Camera 统一:摄像机穿过地形
问题是: 我已经创建了地形,我需要用相机飞越地形。我在相机“鼠标外观”脚本中添加了刚体:usegravity-unchecked,并在更新方法中添加了代码: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
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用于由脚本控制的对象