【问题标题】:Camera following program相机跟随程序
【发布时间】:2018-08-19 05:10:59
【问题描述】:

我正在制作一个 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;
        }
    }
}

【问题讨论】:

  • 我不懂c#,但在其他语言中,比较值时需要==,单个= 是赋值运算符。
  • 是的,你知道。我都试过了,显然我在设置为单个 = 时复制了它。谢谢!
  • 您的代码没问题,不会抛出错误(在当前版本中)。无论如何......你确定你只想在偏移量完全开始时移动相机吗?基本上它永远不会被调用,因为玩家可能永远不会再次到达相同的位置......
  • 这个问题也解决了很多次了,看看here or here or here .. 对于X轴只做position.x而不是position跨度>

标签: c# unity3d


【解决方案1】:

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

https://docs.unity3d.com/ScriptReference/Vector3-operator_eq.html

 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!");
         }
     }
 }

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

https://docs.unity3d.com/ScriptReference/Vector3.Equals.html

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

https://answers.unity.com/questions/395513/vector3-comparison-efficiency-and-float-precision.html

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

【讨论】:

  • 该错误仅发生在该文件中,当我注释掉 if 语句时,错误消失了。
  • 嗯,错误本身表明您从 == 运算符获得的返回值正在返回一个 Vector3,它不能隐式转换为 if 语句所期望的布尔值。您可以尝试将 offset == player.transform.position 包含在显式转换中吗?
  • 另外,您使用的是哪个版本的 Unity?
  • 根据我所做的研究和您的代码,offset 是 Vector3,而 player.transform.position 也是 Vector3。因此我们知道 == 运算符可以应用于这些变量。我们知道它还返回一个布尔值,因此在 if() 语句中进行此比较时甚至不需要隐式转换。尽管值得注意的是 C# 不允许隐式转换。这里没有其他代码可能导致您的错误。也许 Unity 已经在方向盘上睡着了,你试过重新启动它吗?
  • 是的,我有。我正在使用统一 2018。我目前正在使用没有 if 语句的那个​​。希望我能用我的头撞到代码,直到它工作为止。
猜你喜欢
  • 2017-08-28
  • 2016-02-24
  • 1970-01-01
  • 2022-10-04
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
相关资源
最近更新 更多