【UNET自學日誌】Part12 殭屍

隨意的新建一個物體來當殭屍,記得和平時遊戲添加的敵人一樣,加上NavMeshAgent組件來追蹤玩家

在zombie上添加NetworkIdentity和NetworkTransform,新建腳本Zombie_Target添加到Zombie上,將Zombie作爲一個新的Prefab

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class Zombie_Target : NetworkBehaviour {

    private NavMeshAgent agent;
    private Transform myTransform;
    private Transform targetTransform;
    private LayerMask raycastLayer;
    private float radius = 100;


	// Use this for initialization
	void Start () 
    {
        agent = GetComponent<NavMeshAgent>();
        myTransform = transform;
        raycastLayer = 1 << LayerMask.NameToLayer("Player");
	}
	
	// Update is called once per frame
	void Update ()
    {
        SerachToTarget();
        MoverToTarget();
	}

    void SerachToTarget()
    {
        if (!isServer)
        {
            return;
        }

        if (targetTransform == null)
        {
            Collider[] hitColliders = Physics.OverlapSphere(myTransform.position, radius, raycastLayer);

            if (hitColliders.Length > 0)
            {
                int randomint = Random.Range(0, hitColliders.Length);
                targetTransform = hitColliders[randomint].transform;
            }
        }

        if (targetTransform != null && targetTransform.GetComponent<BoxCollider>().enabled == false)
        {
            targetTransform = null;
        }
    }

    void MoverToTarget()
    {
        if (targetTransform != null && isServer)
        {
            SetNavDestination(targetTransform);
        }
    }

    void SetNavDestination(Transform dest)
    {
        agent.SetDestination(dest.position);
    }
}
新建一個空物體作爲Zombie 的Spawn點

新建腳本GameManaer_ZombieSpawner,添加到GameManager上,同時記得添加一個NetworkIdentity

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class GameManaer_ZombieSpawner : NetworkBehaviour {

    [SerializeField]
    GameObject zombiePrefab;
    [SerializeField]
    GameObject zombieSpawn;
    private int counter;
    private int numberOfZombies = 10;

    public override void OnStartServer()
    {
        for (int i = 0; i < numberOfZombies; i++)
        {
            SpawnZombie();
        }
    }

    void SpawnZombie()
    {
        //counter

        GameObject go = GameObject.Instantiate(zombiePrefab, zombieSpawn.transform.position, Quaternion.identity) as GameObject;
        NetworkServer.Spawn(go);
    }

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
將對應的ZombiePrefab和ZombieSpawn設置好

接下來記得在NetworkManager中的SpawnInfo的Registered Spawnable Prefabs中添加Zombie的Prefab即可


不過遇到點問題,不知道什麼每次重新打開的時候zombie預製件的註冊又變成了empty的狀態= =怎麼說沒就沒。。。


發佈了43 篇原創文章 · 獲贊 17 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章