gpt4 book ai didi

unity3d - 随机实例化预制件,但不在已生成的位置

转载 作者:行者123 更新时间:2023-12-04 18:06:48 24 4
gpt4 key购买 nike

我想在我的屏幕上随机生成气泡。当气泡在一个地方生成时,其他气泡就不能在其半径 1 区域附近生成。意味着气泡不能与任何其他气泡碰撞或触发。

我该怎么做 ?

public void GenerateBubble ()
{
newBubbleXPos = Random.Range (-7, 7);
newBubbleYPos = Random.Range (-3, 3);
bubbleClone = (GameObject)Instantiate (bubblePrefab, new Vector3 (newBubbleXPos, newBubbleYPos, 0), Quaternion.identity);
UIManager.instance.ChangeBubbleSprite (bubbleClone);
bubbleList.Add (bubbleClone);
if (bubblePosList.Contains (bubbleClone.transform.position)) {
bubbleClone.transform.position=new Vector3(Random.Range (-7,7),Random.Range (-3,3),0);
}
bubblePosList.Add (bubbleClone.transform.position);
bubbleClone.transform.parent = UIManager.instance.CurrentLevel.transform;
GLOBALS.bubbleCounter++;
}

在这个我的代码中,每个气泡都是在不同的位置生成的,但它可以与其他气泡发生碰撞,这意味着我想生成不同位置的新气泡,并且它也不能碰撞。
我的气泡对撞机的半径是 1。

最佳答案

我找到了答案:

    public List<GameObject> bubbleList = new List<GameObject> ();
private int newBubbleXPos;
private int newBubbleYPos;

public void GenerateBubble ()
{
bool locationInvaild = true;
while (locationInvaild) {
newBubbleXPos = Random.Range (-8, 8);
newBubbleYPos = Random.Range (-4, 4);
currentPosition = new Vector3 (newBubbleXPos, newBubbleYPos, 0);
locationInvaild = false;
for (int i=0; i<bubbleList.Count; i++) {
if (Vector3.Distance (bubbleList [i].transform.position, currentPosition) < 2.5f * radius) {
locationInvaild = true;
break;
}
}
}
bubbleClone = Instantiate (bubblePrefab, new Vector3 (newBubbleXPos, newBubbleYPos, 0), Quaternion.identity) as GameObject;
bubbleList.Add (bubbleClone);
}

关于unity3d - 随机实例化预制件,但不在已生成的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25154732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com