【问题标题】:Unity3D CharacterController movement issue. Camera position not changedUnity3D CharacterController 移动问题。相机位置未更改
【发布时间】:2018-02-13 10:21:54
【问题描述】:

我有一个问题,即在 CharacterController.SimpleMove() 调用后主摄像机位置没有改变。任务是创建相机移动的场景。 我有带有角色控制器和脚本的主相机游戏对象。 问题是调用 SimpleMove() 后 vrCamera 位置没有任何变化。
我的问题是这段代码有什么问题。我建议 MainCamera 对象和 CharacterController 组件之间的绑定有问题,但我花了很多时间调查,没有发现任何工作。

using UnityEngine;

[RequireComponent(typeof(CharacterController))]
public class VRLookWalk : MonoBehaviour {

    public Transform vrCamera;

    public float toggleAngle = 30.0f;
    public float speed = 3.0f;
    public bool moveForwad;
    private CharacterController cc;

  // Use this for initialization
  void Start () {
        cc = vrCamera.GetComponent<CharacterController>();
  }

  // Update is called once per frame
  void Update () {
        if (vrCamera.eulerAngles.x >= toggleAngle && vrCamera.eulerAngles.x < 90.0f)
        {
            Vector3 forward = vrCamera.TransformDirection(Vector3.forward);
            cc.SimpleMove(forward * speed);
        }
    }
}

【问题讨论】:

  • 尝试将vrCamera.eulerAngles.x打印到Update中的控制台,看看它的值是否确实在30到90之间。
  • 我调试了脚本。 "if" 语句中的代码返回 true;行 cc.SimpleMove() 执行。

标签: c# unity3d virtual-reality


【解决方案1】:

你不能移动 VR 相机,是 SDK 决定了 mainCamera 的位置。

为了移动您的相机,您只需创建一个新的GameObject 作为您的mainCamera 的父级,然后移动父级GameObject

【讨论】:

  • 非常感谢!我已经尝试过这种方法并且它有效。相机移动,但出现了新问题:我预计每个Update() 方法都会改变相机位置:在cc.SimpleMove() 调用之后,vrCamera.transform.forward 的值将被更新,因此当Update() 下次调用vrCamera.transform.forward 时会有新的价值。但是现在vrCamera.transform.forward 总是一样的。所以看起来玩家只需迈出 1 步并冻结。当if() 语句等于false 时,相机移动到其初始位置。你知道它为什么会这样吗?
  • @EvgenyDes 您可以参考您的相机并使用他的矢量向前(例如:Camera.mainCamera.transform.foward)
【解决方案2】:

试试这个。您的 TransformDirection 可能返回错误的向量。

Vector3 forward = vrCamera.transform.forward;
cc.SimpleMove(forward * speed);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多