当名为Player的物体碰到墙壁时,就会发生碰撞。但是当我旋转物体并希望它前进时,它却穿过了墙壁。这是什么原因呢?
public float movementSpeed = 5.0f;
public Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKey(KeyCode.W))
{
transform.position += transform.forward * Time.deltaTime * movementSpeed;
}
else if (Input.GetKey(KeyCode.S))
{
transform.position -= transform.forward * Time.deltaTime * movementSpeed;
}
if (Input.GetKey(KeyCode.D))
{
transform.Rotate(0, 150 * Time.deltaTime, 0);
}
else if (Input.GetKey(KeyCode.A))
{
transform.Rotate(0, - 150 * Time.deltaTime , 0);
}
}
我希望在不增加墙的宽度后它不会进入对象内部,但事实并非如此。
1条答案
按热度按时间8qgya5xd1#
正如已经提到的,改变变换位置将传送你的对象,从而忽略碰撞。
有不同的方法来实现移动。如果你想让你的对象发生碰撞,你必须给你移动的游戏对象添加一个刚体或角色控制器。这里是每种方法的例子-两种方法都应该向前移动你的对象-所以你仍然需要改变方向来完成移动。
刚体:
角色控制器
编辑:你可能最终会使用刚体,因为你已经在你的脚本中有了它-变量初始化不应该在方法中,我这样做只是为了简单(也许除了方向,如果你想让它们相对于你的相机)