04 unity3d創建對象

主要用於個人筆記記錄
創建對象主要使用的是 Instantiate 方法,在本案例中,使用協程進行敵人的創建。
需求,模仿王者榮耀出兵系統,利用NavMeshAgent自動追蹤塔進行尋路。

public class ReviewAutoCreateObject : MonoBehaviour
{
    public GameObject targetObject;

    public Transform enemyParent;
    public Transform[] startTrans;
    public Transform[] startEnemyTrans;

    public Transform[] middleTowns;
    public Transform[] middleEnemyTowns;

    public Transform[] leftTowns;
    public Transform[] leftEnemyTowns;

    public Transform[] rightTowns;
    public Transform[] rightEnemyTowns;


    public bool isCreate = true;
    public int objNum = 3;
    // Use this for initialization
    void Start()
    {
        StartCoroutine(Create(0, 1, 5));
    }
    void CreateObject(Transform startTran, Transform[] townss)
    {
        GameObject goj = 
        Instantiate(targetObject, startTran.position, Quaternion.identity) as GameObject;
        goj.transform.parent = enemyParent;
        SmartTraceTowns stts = goj.GetComponent<SmartTraceTowns>();
        stts.towns = townss;


    }
    // Update is called once per frame
    void Update()
    {

    }
    IEnumerator Create(float time, float delayTime, float swapTime)
    {
        yield return new WaitForSeconds(time);
        while(isCreate)
        {
            for(int i=0; i<objNum; i++)
            {
                CreateObject(startTrans[0], middleEnemyTowns);
                CreateObject(startTrans[1], leftEnemyTowns);
                CreateObject(startTrans[2], rightEnemyTowns);

                CreateObject(startEnemyTrans[0], middleTowns);
                CreateObject(startEnemyTrans[1], leftTowns);
                CreateObject(startEnemyTrans[2], rightTowns);
                yield return new WaitForSeconds(delayTime);
            }
            yield return new WaitForSeconds(swapTime);
        }
    }
}
public class SmartTraceTowns : MonoBehaviour
{
    public Transform[] towns;
    public NavMeshAgent agent;
    public Transform target;
    // Use this for initialization
    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        target = GetTargetTown();
    }

    // Update is called once per frame
    void Update()
    {
        //Transform townTmp = GetTargetTown();
        if(target == null)
        {
            target = GetTargetTown();
        }
        agent.SetDestination(target.position);
    }
    Transform GetTargetTown()
    {
        for(int i=0; i<towns.Length; i++)
        {
            if (towns[i] != null)
                return towns[i];
        }
        return null;
    }
    public void setRoad(int index)
    {
        agent.areaMask = index;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章