единство получить дочерние данные - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь создать процедурно созданное подземелье в Unity.У меня есть это создание подземелья, и у меня есть сценарий, прикрепленный к каждому сборному зданию, который предназначен для создания стен, пола и т. Д. Каждый из них прикреплен к одному родителю, чтобы можно было легко удалить и перестроить все подземелье.Скрипт содержит подробности:

 public class WallPrefab
 {
     public bool use;
     private int roomId;
     public WallTypes type; //enum = torch, switch, item etc
     public WallDirections direction; //direction wall is facing
     public GameObject myPrefab; //nested
 }

В префабе также есть пустой игровой объект, используемый в качестве точки монтирования для факелов, переключателей и т. Д.

 myPrefab
      prefab //prefab for the actual 3d object
      wallmount //empty game object to store location and rotation details
      ....

Мои вопросы: 1. Как мнеполучить тип стены?

    int childs = transform.childCount;
    for (var i = childs - 1; i >= 0; i--)
    {
        c = transform.GetChild(i).gameObject;
        Debug.Log("child:" + c.name);
        //WallTypes g = c.GetComponentInChildren<WallPrefab>().type;
        WallTypes g = c.transform.GetComponentInChildren<WallSettings>().type;

(отредактировано для вставки рабочего решения этой части моей проблемы!) Этот код не работает, потому что Unity жалуется, что:

ArgumentException:GetComponent требует, чтобы запрошенный компонент «WallPrefab» был производным от MonoBehaviour или Component или являлся интерфейсом.

Как получить преобразование точки монтирования?

Я знаю, как получить местоположение и поворот, как только я получу точку монтирования, но как на самом деле получить точку монтирования?

1 Ответ

1 голос
/ 24 июня 2019

Вопрос 1 кажется довольно понятным.

Вопрос 2 выглядит немного более интересным.

Если я вас правильно понял, у вас есть скрипт, который «создает» факелы в указанных точках монтирования,Предполагая, что эти точки монтирования являются пустыми игровыми объектами, и вы не хотите добавлять факелы непосредственно в префаб (было бы неплохо, если бы мы получили немного больше подробностей о том, как именно генерируется ваша точка подземелья + точка монтирования), я бы добавил скрипт дляпрефаб, добавьте переменную экземпляра GameObject и используйте инспектор, чтобы перетащить точку монтирования в скрипт.тогда я бы использовал "gameobjectVariable.transform.position", чтобы получить позицию.

что-то вроде:

public class prefabClassWithMountPoints{
    GameObject mountpoint; //drag mount point from inspector
    GameObject torchGameObject; //drag torch prefab here

    public void createTorch(){
        GameObject torchObject = Instantiate(torchGameObject, mountpoint.transform.position, Quaternion.identity);
        //...
    }
    //rest of code
}

это при условии, что точки монтирования не генерируются случайным образом в рамках префаба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...