2D sidescroller。我试图围绕玩家围绕玩家实例化5个Enemy预制件。我一直在使用玩家位置创建半径,但我无法弄明白。
有什么想法吗?
以下是我的目标图片:
将预制件放在您的播放器上方,无论您在任何半径范围内都是如此遥远。
计算你想要实例化的许多敌人需要旋转多少角度。所以如果你想要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;
}
}
我将要玩弄它,试图让它们进入轨道而不是。我也喜欢听到其他人的态度。
答案 0 :(得分:2)
你可以这样做:
创建一个parentGameObject
游戏对象。
创建5个子游戏对象;将它们放在您希望实例化的位置。
让parentGameObject.transform.position
等于玩家的transform.position
。
循环每个子变换并为每个子变换Instantiate
你的敌人预制件:
foreach (Transform child in parentGameObject.transform) {
Instantiate(yourPrefab, child.position, Quaternion.identity);
}
或
将预制件放在您的播放器上方,无论您在任何半径范围内都可以远离它。
计算你想要实例化的敌人需要旋转多少角度。所以如果你想要5个敌人,你可以这样:
float angle = 360f / 5;
使用Transform.RotateAround将预制件围绕播放器旋转angle
多次,然后Instantiate
预制件副本RotateAround
。这样你就可以得到一个完美的圆圈。
或者,如果你不想使用transform.localPosition
,你可以将你的单个预制件作为gameObject的子项,将孩子的angle
更改为与其父级中心的任何距离,然后Rotate
预制件的父级变换{{1}} 5次。