Unity - 如何判断translate函数是否会将对象置于某些边界之外?

问题描述 投票:0回答:1

好吧我使用操纵杆在Unity中移动我的相机,如下所示:

moveVector = (transform.right * joystick.Horizontal + transform.forward * joystick.Vertical);

transform.Translate(moveVector * speed * Time.deltaTime, Space.World);

但是我需要限制我的相机在boxcollider(房间,存储在变量中)的范围内移动到的位置。我尝试了这个,但即使相机移出范围,这总是会返回true:

print(GameObject.FindObjectOfType<PlayerController>().room.bounds.Contains(moveVector));

如何检测翻译是否会将摄像机移出界限,如果这是真的,则不使用移动矢量进行平移?

c# unity3d game-physics
1个回答
0
投票

问题是您正在使用摄像机的位移('moveVector')来确定摄像机是否在边界框中。相反,你应该使用相机的位置,

gameObject.transform.Position 

或相机的未来位置,

gameObject.transform.position + moveVector

确定它是否在边界框中。因此,修改您的代码如下:

GameObject.FindObjectOfType<PlayerController>().room.bounds.Contains(camera.transform.position + moveVector)

确保你的'room'变量是'PlayerController'脚本中的Collider类型,

 var room = GetComponent<Collider>();
© www.soinside.com 2019 - 2024. All rights reserved.