Unity C#GameObject与另一个GameObject发生冲突

时间:2013-06-05 15:56:13

标签: c# unity3d

我有一个不可思议的GameObject叫做触发器,当我的英雄与它碰撞时,枝形吊灯掉落了。 我想给枝形吊灯一个Rigidbody,所以它会掉下来,你可以碰撞它并使用它。

如果你可以向我解释碰撞是如何工作的,并说明如何对游戏对象发生碰撞,那么它在Unity中仍然很酷。

using UnityEngine;
using System.Collections;

public class Collider : MonoBehaviour {
    public GameObject chandelier;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    //When my hero collides with trigger go to the fall function
    void OnTriggerEnter (Collider other) {

        if (other.tag == "Trigger")
        {
            fall(); 
        }
    }

    //Add Rigidbody to the GameObject called chandelier
    void fall ()
    {
        chandelier.rigidbody.AddForce(1, 1, 1);
    }
}

1 个答案:

答案 0 :(得分:2)

要使碰撞工作,至少有一个碰撞游戏对象必须附加一个刚体,因为您使用OnTriggerEnter方法,以下设置应该有效:

第一个对象:

-collider(标记为触发器)

-rigidbody(标记为运动学)

第二个对象

-collider(标记为触发器)

然后当对象发生碰撞时,将调用“OnTriggerEnter”方法并添加物理 对于第二个对象的刚体,请注意您不能像在帖子中提到的那样添加刚体

// This will cause to Exception if there is no rigidbody attached
chandelier.rigidbody.AddForce(1,1,1);

所以基本上你必须选择:

- 通过Unity编辑器为游戏对象添加一个刚体并将其设置为运动学,然后在碰撞方法中删除“Is kinematic”标志,如下所示:

rigidbody.isKinematic = false;

- 使用以下代码在碰撞后添加刚体:

gameObject.AddComponent< Rigidbody >();

之后你可以添加所需的力量,或者如果你只想让它掉落,只需将重力加到刚体上:

rigidbody.useGravity = true;