【问题标题】:Unity procedural generation spawning overlapping objects issuesUnity 程序生成产生重叠对象问题
【发布时间】:2022-01-08 06:26:05
【问题描述】:

我有 2 个脚本 一个检查一个区域是否空闲的 如果该区域是空闲的,则生成一个对象 这是为了防止重叠 检查脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpaceCheck : MonoBehaviour
{
    public bool isFree = true;
    public GameObject RoomParent;

    void OnCollisionEnter(Collision col)
    {
        isFree = false;
    }

    void Start()
    {
        if(isFree == true)
        {
            RoomParent.SetActive(true);
        }
    }

    void Update()
    {
        
    }
}

生成器脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RoomSpawner : MonoBehaviour
{

    public List<Transform> Spawners;
    public List<GameObject> Rooms;
    int choosenSpawner = 0;
    public GameObject SpaceCheck;

    void Start()
    {
        choosenSpawner = Random.Range(0, Spawners.Count);
        GameObject manager = GameObject.Find("RoomsManager");
        RoomsManager managerProperty = manager.GetComponent<RoomsManager>();

        GameObject Space = SpaceCheck;
        SpaceCheck spaceProperty = Space.GetComponent<SpaceCheck>();

        if (managerProperty.maxRoom > managerProperty.RoomCount && spaceProperty.isFree == true)
        {
            Instantiate(Rooms[Random.Range(0, Rooms.Count)], Spawners[choosenSpawner].position, Spawners[choosenSpawner].rotation);
            RoomsManager.instance.AddRoomCount();
        }    

    }
    void Update()
    {

    }
}

问题是它们仍然重叠

这里是问题的视频:https://www.youtube.com/watch?v=mUjMUSNhDcQ

【问题讨论】:

  • 所以基本上你是在问如何选择没有重复的随机位置?

标签: c# unity3d procedural-generation


【解决方案1】:

这个问题真的很模糊,但这里有一个假设 derHugo 是正确的答案,并且你在问如何选择没有重复的随机位置:

您将房间存储在一个列表中,因此您只需检查新生成的位置是否与列表中的任何现有游戏对象相同。

所以首先在新的向量 x、y 和 z 中生成随机浮点数,然后检查该位置是否在先前生成的位置列表中。如果列表不包含具有该位置的游戏对象,则它是唯一的,使用它并将其添加到列表中。如果它不是唯一的,则将其丢弃并生成一个新的,直到它唯一为止。

您需要检查新生成的位置是否与先前存在的位置足够远,以至于它们不重叠,并考虑到对象的大小。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多