碰撞控制器后的物体改变方向

时间:2017-12-13 10:28:09

标签: c# unity3d

在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);
}

3 个答案:

答案 0 :(得分:0)

没有看到/知道other是什么,很难说,但通常会有两个问题:

  1. transform.position-other.transform.position实际上并未导致您期望的方向。要确定这一点,请打印该值或使用Debug.DrawRay显示该值。
  2. 你添加的力量可能不足以改变方向,或者还有其他力量将其取消。

答案 1 :(得分:0)

var force = transform.position - other.transform.position;

你将获得一个方向向量来获得其他位置。所以你正在进入碰撞,逆转矢量应该解决你的问题。

答案 2 :(得分:0)

当您使用AddForce修改此处的物理值时,您应该在FixedUpdate中执行此操作以最大程度地降低bug的风险。 (它可以在FixedUpdate之外工作,但在大多数情况下会产生不需要的行为。)

在你的代码中使用AddFroce,但是如果gameObject的实际力大于此值,你添加的力只会减慢游戏对象的实际移动而不会反转它。

我认为改变游戏对象移动的最佳方法是使用速度向量并反映它。

还有一条建议:不要将物理学用于游戏系统。物理学是非常强大的东西,它可以带来很多紧急行为,但它是一个混乱的系统。当它涉及游戏玩法时,你不想要混乱,你想要控制和一致性。

Unity doc: