Camera 统一:摄像机穿过地形

Camera 统一:摄像机穿过地形,camera,unity3d,terrain,Camera,Unity3d,Terrain,问题是: 我已经创建了地形,我需要用相机飞越地形。我在相机“鼠标外观”脚本中添加了刚体:usegravity-unchecked,并在更新方法中添加了代码: float vert = Input.GetAxis("Vertical"); float hor = Input.GetAxis("Horizontal"); if (vert != 0) { if (!Physics.Raycast(this.transform.position, th

问题是:

我已经创建了地形,我需要用相机飞越地形。我在相机“鼠标外观”脚本中添加了刚体:usegravity-unchecked,并在更新方法中添加了代码:

    float vert = Input.GetAxis("Vertical");
    float hor = Input.GetAxis("Horizontal");

    if (vert != 0)
    {
        if (!Physics.Raycast(this.transform.position, this.transform.forward, 5))
        {
            transform.Translate(Vector3.forward * flySpeed * vert);
        }
        else
        {
            transform.Translate(Vector3.up * flySpeed * vert);
        }
    }

    if (hor != 0)
    {   

        if (!Physics.Raycast(this.transform.position, this.transform.forward, 5))
        {
            transform.Translate(Vector3.right * flySpeed * hor);
        }
        else
        {
            transform.Translate(Vector3.up * flySpeed* hor);
        }
    }

    if (Input.GetKey(KeyCode.E))
    {
        transform.Translate(Vector3.up * flySpeed);            
    }
    else if (Input.GetKey(KeyCode.Q))
    {
        Vector3 v = Vector3.down * flySpeed;

        if (!Physics.Raycast(this.transform.position, this.transform.forward, 5))
        {
            transform.Translate(v);
        }           
    }
但有时我会往下走——Q摄像机穿过地形。为什么?
若你们在地形上以尽可能低的速度向前移动相机,而相机并没有从中掉下来,那个么它看起来也很难看——它开始跳跃。还有原因吗?

请确保您的地形上有一个碰撞控制器。

除了S.Richmonds答案之外,您还可以向相机添加角色控制器或其他类似的碰撞器组件对象

请参见统一问题网络中的此答案:

每个fram调用一次monobehavior中的Update()方法。因为调用更新的速率取决于帧速率,所以在update()中按常量值移动对象可能会导致不一致的运动。可以通过将恒定速度乘以Time.deltaTime(自渲染最后一帧以来的秒数)来纠正此问题。这将修复故障,除非flySpeed设置得太高(每个帧的位置变化大于碰撞器的大小)。此外,如上所述,使用没有刚体的CharacterController更适合这种情况。刚体用于主要由物理控制的对象,而CharacterController用于由脚本控制的对象