在我的游戏中,我希望角色能够拥有可以绕着玩家旋转的镐或武器,但是当我这样做时,它会穿过物体并且非常有毛刺。
我希望它仍然跟随鼠标(不可见)并在发生碰撞时仍然停止。现在,我的代码只是用于鼠标旋转的相当标准的代码,并将其附加到一个空的游戏对象上,该对象是镐/武器的父代
//rotation
Vector3 mousePos = Input.mousePosition;
mousePos.z = 5.23f;
Vector3 objectPos = Camera.main.WorldToScreenPoint(transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;
float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
答案 0 :(得分:0)
每当要启用物理功能的GameObject时,都不要直接移动它。您添加一个Rigidbody并使用RigidBody.MoveRotation旋转您的GameObject。 RigidBody
拥有一组考虑碰撞的运动和旋转方法。直接移动Transform
会引起问题。
在某些情况下,这仍然可能导致问题。如果您仍然遇到物理怪异现象,则可以使用“物理上正确的”解决方案并使用Rigidbody.angularVelocity来消除它们。根据角度,您可以设置速度以使对象向右或向左旋转,直到其面向您想要的方式。
从本质上讲,物理系统讨厌隐形传送。即时运动和即时旋转基本上是对其的传送。因此,对于某些动作来说,存在“如何对物理系统友好”的层次结构。他们会像这样: