それぞれのbadGuyに独自のプロパティを設定する場合は、badguysの一般的なクラスを作成し、その中にすべての変数を配置する必要があります。 BadGuysManagerという名前のスクリプトを作成し、悪意のある人の行動をそこに実装するか、下の方からコピーします。
関数のシグネチャ:あなたのtest.cs
スクリプトで
void createBadGuy(GameObject badGuyPrefab, BadGuyType badGuyType, Vector3 badGuyPosition)
void setBadGuyType(BadGuyType badGuyType)
BadGuyType getBadGuyType()
void killBadGuy()
GameObject getBadGuyGameObject()
、あなたはリストでBadGuysManagerスクリプトを追加することができます。
public class test : MonoBehaviour
{
//Attch the gameObject bad guy here
public GameObject badGuyPrefab;
List<BadGuysManager> badGuys = new List<BadGuysManager>();
// Use this for initialization
void Start()
{
/////////////////////////////////////CREATE 3 bad guys with different colors
//Bad Guy 1, Green Color
badGuys.Add(gameObject.AddComponent<BadGuysManager>());
badGuys[0].createBadGuy(badGuyPrefab, BadGuyType.green, Vector3.zero);
//Bad Guy 2, Blue Color
badGuys.Add(gameObject.AddComponent<BadGuysManager>());
badGuys[1].createBadGuy(badGuyPrefab, BadGuyType.blue, Vector3.zero);
//Bad Guy 3, Red Color
badGuys.Add(gameObject.AddComponent<BadGuysManager>());
badGuys[2].createBadGuy(badGuyPrefab, BadGuyType.red, Vector3.zero);
/////////////////////////////////////CHANGE bad guy type later on
//badGuys[0].setBadGuyType(BadGuyType.green);
/////////////////////////////////////READ bad guy type
//BadGuyType badGuyType = badGuys[0].getBadGuyType();
/////////////////////////////////////Get bad guy
//GameObject badGuy = badGuys[0].getBadGuyGameObject();
/////////////////////////////////////KILL bad guy type
//badGuys[0].killBadGuy();
}
}
BadGuysManager
.csスクリプトのコードは次のとおりです。これはあなたを始めるはずです。 BadGuysManager
クラスに、より多くの機能を簡単に拡張または追加することができます。
public class BadGuysManager : MonoBehaviour
{
private GameObject badGuy; //I set this in the inspector
private BadGuyType playerGuyType = BadGuyType.NONE;
public void setBadGuyType(BadGuyType badGuyType)
{
playerGuyType = badGuyType;
if (badGuy == null)
{
Debug.Log("Failed to set color because Bad Guy Prefab is null! Call createBadGuy function first");
return; //exit
}
if (badGuyType == BadGuyType.green)
{
badGuy.GetComponent<MeshRenderer>().material.color = Color.green;
}
else if (badGuyType == BadGuyType.blue)
{
badGuy.GetComponent<MeshRenderer>().material.color = Color.blue;
}
if (badGuyType == BadGuyType.red)
{
badGuy.GetComponent<MeshRenderer>().material.color = Color.red;
}
}
public BadGuyType getBadGuyType()
{
return playerGuyType;
}
public void createBadGuy(GameObject badGuyPrefab, BadGuyType badGuyType, Vector3 badGuyPosition)
{
if (badGuyPrefab == null)
{
Debug.Log("Bad Guy Prefab is null!");
return; //exit
}
badGuy = (GameObject)Instantiate(badGuyPrefab, badGuyPosition, Quaternion.identity);
setBadGuyType(badGuyType);
}
public void killBadGuy()
{
Destroy(badGuy);
Destroy(this);
}
public GameObject getBadGuyGameObject()
{
return badGuy;
}
}
public enum BadGuyType
{
NONE,
green,
blue,
red
}
私の 'BadGuysManager'スクリプトが私のBadGuyのプレハブに接続されているのであれば、私はノーノーノー' gameObject' – Nullititiousness
と 'badGuy'を置き換えることができます。それはBadGuyManagerの仕組みではありません。 BadGuysManagerスクリプトは、シーンのどこにでも接続しないでください。新しいオブジェクトを作成するには、gameObject.AddComponent()を使用します。次に、createBadGuyを使用してBadGuysManagerの新しいbadGuyを初期化します。これは、prefabをit.badGuyに渡すことによってcreateBadGuyが呼び出されると初期化されます。 'test.cs'スクリプトを見てください。それはそれを使用する方法を示しています。 –
Programmer
nullitiousness、あなたのスタイルを統一に適用しようとしないでください、フローと一緒に、彼らはそれを使用する方法に適応します。その "コンポーネント駆動"コンポーネントを使用していないし、単一のマスタークラスのすべてを制御しようとしないでください。完全に不可能ではないものの、過度に複雑なやり方で、あなたは団結のパラダイムを回避する方法を見つける時間を浪費します。 – yes