Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 摄像机跟踪程序_C#_Unity3d - Fatal编程技术网

C# 摄像机跟踪程序

C# 摄像机跟踪程序,c#,unity3d,C#,Unity3d,我正在制作一个2D平台,我希望摄影机在角色到达中心后跟随它,但只在x轴上跟随它。我已经下载了这段代码,它工作了,但是它跟随了x和y上的角色,并且它把角色粘在了它启动的相机的同一个角落里。我试图添加一个if语句,以便相机只在偏移量等于播放机时才开始移动,但它不起作用。我得到了错误代码“无法隐式地将vector3转换为bool” 代码如下: using UnityEngine; using System.Collections; public class CompleteCameraControl

我正在制作一个2D平台,我希望摄影机在角色到达中心后跟随它,但只在x轴上跟随它。我已经下载了这段代码,它工作了,但是它跟随了x和y上的角色,并且它把角色粘在了它启动的相机的同一个角落里。我试图添加一个if语句,以便相机只在偏移量等于播放机时才开始移动,但它不起作用。我得到了错误代码“无法隐式地将vector3转换为bool”

代码如下:

using UnityEngine;
using System.Collections;

public class CompleteCameraController : MonoBehaviour {

    public GameObject player;


    private Vector3 offset;

    void Start () 
    {
        offset = transform.position - player.transform.position;
    }

    void LateUpdate () 
    {
        if (offset == player.transform.position)
        {
            transform.position = player.transform.position + offset;
        }
    }
}

文档似乎表明您所做的一切都很好。但也许您的代码可以修改以适合这个示例?我的直觉告诉我,这会给你同样的错误,但是值得一试

如果可以进行精确比较,也可以尝试使用Vector3.Equals()方法

您还可以尝试实现自己的函数来比较这两个向量


我真的看不出你发布的代码有什么问题,可能是另一个文件中存在错误吗?

我不知道c,但在其他语言中,你需要
=
在比较值时,使用single
=
作为赋值运算符。是的,你知道。我两个都试过了,显然当它设置为single=时我复制了它。谢谢您的代码正常,不会抛出错误(在当前版本中)。无论如何是否确定仅在偏移量与开始时的偏移量完全相同时才移动摄影机?基本上,它永远不会被调用,因为玩家可能再也不会到达相同的位置了…这也被解决了多次,只是看一看或者。。只对X轴执行
position.X
而不是
position
错误只发生在该文件中,当我注释掉if语句时,错误消失了。嗯,错误本身表明从==运算符得到的返回值返回了一个向量3,不能隐式转换为if语句所期望的布尔值。你能尝试将offset==player.transform.position包装成一个显式的cast吗?另外,你使用的是什么版本的Unity?根据我所做的研究和你的代码,offset是一个向量3,player.transform.position也是一个向量3。因此,我们知道==运算符可以应用于这些变量。我们知道,它还返回一个布尔值,因此在if()语句中执行此比较时,甚至不需要隐式转换。尽管值得注意的是C#不允许隐式转换。这里没有其他可能导致错误的代码。也许Unity在方向盘上睡着了你试过重新启动吗?是的,我试过。我用的是unity 2018。我现在正在处理一个没有if语句的。希望我能用我的头来打击代码,直到它起作用。
 using UnityEngine; 
 using System.Collections;

 public class ExampleClass : MonoBehaviour 
 {
     public Transform other;

     void Example()
     {
         if (other && transform.position == other.position)
         {
             print("I'm at the same place as the other transform!");
         }
     }
 }