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

时间:2017-11-07 17:11:31

标签: c# android unity3d mobile unity5

所以我有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;
        }


    }


}

1 个答案:

答案 0 :(得分:0)

简单地让冰球成为玩家的孩子,这样就会跟随他们。

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

参数true上的worldPositionStays值确保保持冰球当前世界位置,同时将其父级更改为播放器对象。

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

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

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

一旦你想拍摄冰球,从而将其从玩家身上移开,只需做transform.SetParent(null, true);然后自由移动。

相关问题