在Unity3D中,我得到了一个游戏对象,它与一个盒子对撞机和物理材料相连。手控制器模型也附加在盒子对撞机和物理材料上。当游戏对象与手控制器发生冲突时,CollideWithController会登录控制台。但是,游戏对象不会改变方向。
if (other.CompareTag("HandController"))
{
Debug.Log("CollideWithController");
var magnitude = 1000;
var force = transform.position - other.transform.position;
force.Normalize();
gameObject.GetComponent<Rigidbody>().AddForce(force * magnitude);
}发布于 2017-12-13 22:21:32
如果不知道/看不到other是什么,很难说,但通常会有两个问题:
transform.position-other.transform.position实际上并不会导致您期望的方向。要确定这一点,请打印值或使用Debug.DrawRay.发布于 2017-12-13 22:29:18
var force = transform.position - other.transform.position;你将得到一个方向向量,以获得其他到这个的位置。所以你正在移动到碰撞中,反转向量应该可以解决你的问题。
发布于 2017-12-13 22:30:50
当你像这里用AddForce修改物理值时,你应该在FixedUpdate中这样做,以最大限度地减少错误的风险。(它可以在FixedUpdate之外工作,但在大多数情况下,它会产生不需要的行为)。
在您的代码中使用AddFroce,但如果gameObject的实际力大于此值,则您添加的力只会减慢游戏对象的实际移动速度,而不会使其反转。
我认为改变gameObject移动的最好方法是使用速度矢量并反射它。
还有一个建议:不要在游戏系统中使用物理原理。物理学是非常强大的东西,它可以带来许多紧急行为,但它是一个混乱的系统。当涉及到游戏性时,你不想要混乱,你想要控制和一致性。
Unity文档:
https://stackoverflow.com/questions/47790755
复制相似问题