试图在Unity中围绕玩家围成一圈

时间:2014-06-04 19:54:51

标签: c# unity3d 2d

2D sidescroller。我试图围绕玩家围绕玩家实例化5个Enemy预制件。我一直在使用玩家位置创建半径,但我无法弄明白。

有什么想法吗?

以下是我的目标图片: enter image description here

  

将预制件放在您的播放器上方,无论您在任何半径范围内都是如此遥远。

     

计算你想要实例化的许多敌人需要旋转多少角度。所以如果你想要5个敌人,你可以这样:

     

浮角= 360f / 5;   使用Transform.RotateAround按预定角度围绕播放器旋转预制件多次,然后实例化预制件的副本。这样你就可以得到一个完美的圆圈。

     

或者,如果您不想使用RotateAround,您可以将单个预制件作为gameObject的子项,将子项的transform.localPosition更改为距其父级中心的任何距离,然后通过以下方式旋转预制件的父变换:角度5次。

我按照他的指示慢慢地进入了一个可行的解决方案。我确信有一种更漂亮的方式可以做到这一点,并且我很乐意听到其他的意见,但这很有效。这就是我正在做的事情:

private int num_enemies=5;
float angle =  360f/5;
void Start () {
    player = GameObject.FindGameObjectWithTag ("Player");
     //emptyenemy is a gameobject I have positioned right on top of the player
    //This is hardcoded and needs to change to position itself betwwen the player and the top of the screen

            Vector3 enemyPos = emptyEnemy.transform.position;

    while (num_enemies>0) {
        Instantiate (EnemyPrefab, enemyPos, player.transform.rotation);
        EnemyPrefab.tag = "Enemy" + num_enemies;
        num_enemies--;
        emptyEnemy.transform.RotateAround (player.transform.position, Vector3.forward, angle);
        enemyPos=emptyEnemy.transform.position;
    }
}

我将要玩弄它,试图让它们进入轨道而不是。我也喜欢听到其他人的态度。

1 个答案:

答案 0 :(得分:2)

你可以这样做:


  1. 创建一个parentGameObject游戏对象。

  2. 创建5个子游戏对象;将它们放在您希望实例化的位置。

  3. parentGameObject.transform.position等于玩家的transform.position

  4. 循环每个子变换并为每个子变换Instantiate你的敌人预制件:

    foreach (Transform child in parentGameObject.transform) {
        Instantiate(yourPrefab, child.position, Quaternion.identity);
    }
    

    1. 将预制件放在您的播放器上方,无论您在任何半径范围内都可以远离它。

    2. 计算你想要实例化的敌人需要旋转多少角度。所以如果你想要5个敌人,你可以这样:

      float angle = 360f / 5;
      
    3. 使用Transform.RotateAround将预制件围绕播放器旋转angle多次,然后Instantiate预制件副本RotateAround。这样你就可以得到一个完美的圆圈。

    4. 或者,如果你不想使用transform.localPosition,你可以将你的单个预制件作为gameObject的子项,将孩子的angle更改为与其父级中心的任何距离,然后Rotate预制件的父级变换{{1}} 5次。