【发布时间】:2016-04-13 01:27:20
【问题描述】:
我不确定如何解决这个问题,或者是否有任何内置的 Unity 函数可以帮助解决这个问题,因此不胜感激。
我想在设定半径范围内围绕给定点生成游戏对象。然而,它们在这个半径中的位置应该是随机选择的。该位置应与原点(在地面上)具有相同的 Y 轴。下一个主要问题是每个对象不应该发生碰撞和重叠另一个游戏对象,也不应该进入他们的个人空间(橙色圆圈)。
到目前为止我的代码不是很好:
public class Spawner : MonoBehaviour {
public int spawnRadius = 30; // not sure how large this is yet..
public int agentRadius = 5; // agent's personal space
public GameObject agent; // added in Unity GUI
Vector3 originPoint;
void CreateGroup() {
GameObject spawner = GetRandomSpawnPoint ();
originPoint = spawner.gameObject.transform.position;
for (int i = 0; i < groupSize; i++) {
CreateAgent ();
}
}
public void CreateAgent() {
float directionFacing = Random.Range (0f, 360f);
// need to pick a random position around originPoint but inside spawnRadius
// must not be too close to another agent inside spawnRadius
Instantiate (agent, originPoint, Quaternion.Euler (new Vector3 (0f, directionFacing, 0f)));
}
}
感谢您提供的任何建议!
【问题讨论】:
-
圆圈生成不是问题,但请告诉我你为什么不使用对撞机来维护空间?
-
@HamzaHasan - 我不知道从哪里开始。碰撞器是检测另一个特工是否进入另一个人的个人区域的好主意,但是我如何将一个从另一个移开?目前每个代理都没有移动。我只是想在它们生成时将它们生成在一个有效的地方,但不确定碰撞器将如何提供帮助。
-
好的,让我做一些工作,告诉我你使用的是 2D 还是 3D?
-
哇,非常感谢。它是 3D 的 :)
-
不客气 :) 让我写下你的答案 :)
标签: c# unity3d instantiation gameobject