#visual-studio #unity3d #prefab
Вопрос:
Цель кодекса состоит в том, чтобы
- сделайте сборку из «Нормального» и «Вирусного»
- заставьте их двигаться в произвольных направлениях
- когда они сталкиваются, замените «Обычные» сборные на «Вирусные» .
Тем не менее, я остановился на шаге 2. Я успешно сделал так, чтобы «Нормальные» и «Вирусные» сборные конструкции появлялись в случайных местах. Кстати, я понятия не имею, что мне делать, чтобы предоставить функцию преобразования сборным сборкам.
Кроме того, какие коды я должен использовать для замены «Обычных» сборных блоков на «Вирусные» сборные блоки, если они сталкиваются друг с другом?
Это коды и фотографии, которые я использовал
using UnityEngine;
public class VirusSpawner : MonoBehaviour
{
[SerializeField]
private int objectSpawnCount = 5;
[SerializeField]
private GameObject[] prefabArray;
private void Awake()
{
for (int i = 0; i < objectSpawnCount; i)
{
int index = Random.Range(0, prefabArray.Length);
float x = Random.Range(-3, 3);
float y = Random.Range(-4, 4);
Vector3 position = new Vector3(x, y, 0);
Instantiate(prefabArray[index], position, Quaternion.identity);
}
}
}
Комментарии:
1. Вы не перемещаете сборные дома. Точно так же, как вы не готовите свою книгу рецептов, когда готовите. Вам нужно переместить созданный объект.
Ответ №1:
Как я понял, вам нужен скрипт для ваших объектов, отвечающий за их перемещение и управление всеми этими «Нормальными» и «вирусными» состояниями.
2.1. Создайте скрипт на C# (т. е. «Вирус»), который перемещает объект, как только он существует.
2.2. Сразу после создания экземпляра ваших сборных модулей добавьте в него этот скрипт:
GameObject newGO = Instantiate(prefabArray[index], position, Quaternion.identity);
newGO.AddComponent<Virus>();
- В новом сценарии «Вирус» добавьте обнаружение столкновений и переменную, которая содержит состояние нормального или вирусного
Ответ №2:
Как сказал @Caio Rocha, вы можете создать экземпляр нового вирусного объекта и добавить в него компонент, но может быть еще один способ, который может быть быстрее :
- Создайте Пустой игровой объект.
- Добавьте оба сборных модуля (вирусный и обычный) в качестве дочерних элементов этого сборного модуля и перетащите их в окно проекта, чтобы создать новый сборный модуль.
- Прикрепите этот сценарий к родительскому:
public class ParentObject : MonoBehaviour { public GameObject VirusObject; public GameObject NormalObject; private bool isVirus; private void Awake() { isVirus = (Random.Range(0, 2) == 1); //Randomly Make an object //virus or normal on instantiation if (isVirus) { TurnToVirus(); } else { TurntoNormal(); } } private void OnCollisionEnter(Collision other) { ParentObject coll = other.collider.gameObject.GetComponent<ParentObject>(); if (coll amp;amp; coll.isVirus) //if other object is virus { TurnToVirus(); } } private void TurnToVirus() { VirusObject.SetActive(true); NormalObject.SetActive(false); } private void TurntoNormal() { VirusObject.SetActive(false); NormalObject.SetActive(true); } }
Теперь внутри массива сборных блоков переместите этот родительский сборный блок вместо ваших собственных сборных блоков, и он будет случайным образом создавать обычные и вирусные объекты, а когда они взаимодействуют, нормальные превращаются в вирусы. Убедитесь, что этот сценарий и коллайдер теперь включены. Это значительно оптимизировано по сравнению с добавлением компонента по отдельности только для одной проверки.