碰撞时将一个游戏对象附加到另一个游戏对象

Attach one gameobject to another when they collide

所以我有 2 个游戏对象 Player 和 Puck。 每当玩家接触(碰撞)冰球时,我都希望冰球附着在玩家身上。 到目前为止,我可以让冰球传送到玩家那里,但我不想那样。 我想让冰球附在我小时候放在玩家身上的空游戏对象树懒上。

Here's my code

public class CollisionDetector : MonoBehaviour {

     GameObject empty; //declare empty GameObject called "empty"

     Vector3 pos; //declare empty Vector3

    GameObject player;

    public bool collided;


    void Start() { 
        empty = GameObject.Find("holdSlot"); //Appends actual gameobject called "Empty" to our 'empty' variable we recently declared
        player = GameObject.Find("Player"); //Appends actual gameobject called "Player" to our 'player' variable we recently declared
        collided = false;
        pos = empty.transform.position; //ettii holdSlotin paikan ja laittaa sen "pos" nimelle

    }


   void OnCollisionEnter(Collision col) { 

        if (col.gameObject.tag == "Player")
        {
            //Do something on collide
            //transform.position = pos;
            collided = true;
        }
    }

    void Update() { 

        if (collided == true)
        {
            transform.position = pos;
        }


    }


}

只要让冰球成为玩家的child,这样它就会跟着他们。

void OnCollisionEnter(Collision col)
{
    if (col.gameObject.tag == "Player")
    {
        transform.SetParent(col.gameObject.transform, true);
    }
}

参数 worldPositionStaystrue 值确保冰球保持当前世界位置,而其 parent 更改为玩家 object。

或者,如果你想让冰球跳到默认位置,例如在玩家面前,你可以这样做:

void OnCollisionEnter(Collision col)
{
    if (col.gameObject.tag == "Player")
    {
        transform.SetParent(col.gameObject.transform, false);
        transform.localPosition = SomeDefaultPositionInPlayersLocalSpace;
    }
}

请注意,这两种解决方案都不需要您在更新期间更新冰球的位置。

一旦您想射击冰球,从而将其与玩家分离,只需执行 transform.SetParent(null, true); 然后自由移动它即可。