該代碼的目的是
- 制作“正常”和“病毒”的預制件
- 使它們向隨機方向移動
- 當它們碰撞時,將“Normal”變成“Virus” Prefabs
但是,我在第 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);
}
}
}

uj5u.com熱心網友回復:
據我了解,您需要的是一個物件腳本,負責移動它們并控制所有這些“正常”和“病毒”狀態。
2.1. 創建一個 C# 腳本(即“病毒”),一旦物件存在就移動它。
2.2. 在實體化您的預制件后立即添加此腳本:
GameObject newGO = Instantiate(prefabArray[index], position, Quaternion.identity);
newGO.AddComponent<Virus>();
- 在新的“病毒”腳本上,添加碰撞檢測和保存 Normal 或 Virus 狀態的變數
uj5u.com熱心網友回復:
正如@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 && 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); } }
現在在預制陣列內部移動這個父預制而不是你自己的預制,它會隨機創建正常和病毒物件,當它們互動時正常變成病毒。確保此腳本和碰撞器現在位于父級上。這比單獨添加組件僅用于單個檢查進行了很多優化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/362703.html
