【UNET自学日志】Part18 修复一些错误

来源:互联网 发布:淘宝网沙发布料 编辑:程序博客网 时间:2024/06/08 19:45

首先,我们需要的是新建一个空物体“SpawnManager”,将GameManager中的SpawnManaer_ZombieSpawner拖到SpawnManager中,并移除GameManager中的NetworkIdentity,SpawnManager中添加NetworkIdentity,并勾选Server Only选项


第二,打开最开始的脚本Player_NetworkSetup,修改其代码(去掉原来的Start函数,将Start函数中的内容复制到OnStartLocalPlayer中)

using UnityEngine;using System.Collections;using UnityEngine.Networking;public class Player_NetworkSetup : NetworkBehaviour {    [SerializeField]    Camera FPSCharacterCam;    [SerializeField]    AudioListener audioListener;    public override void OnStartLocalPlayer()    {        GameObject.Find("Scene Camera").SetActive(false);        //GetComponent<CharacterController>().enabled = true;        GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController>().enabled = true;        FPSCharacterCam.enabled = true;        audioListener.enabled = true;    }}



第三,打开脚本Player_Death,修改其代码(去掉原来的Start函数,将Start函数中的内容复制到OnStartLocalPlayer和PreStartClient中),将OnDisable函数重新更名为public override void OnNetworkDestroy()
 public override void PreStartClient()    {        healthScript = GetComponent<Player_Health>();        healthScript.EventDie += DisablePlayer;    }    public override void OnStartClient()    {        crossHairImage = GameObject.Find("crossHairImage").GetComponent<Image>();    }



第四,打开脚本Player_Health,修改其代码(去掉原来的Start函数,将Start函数中的内容复制到OnStartLocalPlayer中)

 public override void OnStartLocalPlayer()    {        healthText = GameObject.Find("Health Text").GetComponent<Text>();        SetHealthText();    }



第五,打开脚本Player_Respawn,修改其代码(去掉原来的Start函数,将Start函数中的内容复制到OnStartLocalPlayer和PreStartClient中),将OnDisable函数重新更名为public override void OnNetworkDestroy()

 public override void PreStartClient()    {        healthScript = GetComponent<Player_Health>();        healthScript.EventRespawn += EnablePlayer;    }    public override void OnStartLocalPlayer()    {        crossHairImage = GameObject.Find("crossHairImage").GetComponent<Image>();        SetRespawnButton();    }


第六,在预制件Player中,关掉Player_SyncPosition脚本,添加Network Transform,将其SendRate改为11,SyncMode改为Sync Character Controller,Rotation Axis改为None,新建一个Player_Latency脚本,将Player_SyncPosition脚本中关于显示延迟的代码复制到其中(PS;理由是Network Transform的Sync Character Controller模式已经能够十分平滑的移动物体了= =之前的Player_SyncPosition就当是了解其中的机制吧。。。)

using UnityEngine;using System.Collections;using UnityEngine.Networking;using UnityEngine.UI;public class Player_Latency : NetworkBehaviour {    private NetworkClient nClient;    private int latency;    private Text latencyText;    public override void OnStartLocalPlayer()    {        nClient = GameObject.Find("NetworkManager").GetComponent<NetworkManager>().client;        latencyText = GameObject.Find("Latency Text").GetComponent<Text>();    }void Update ()     {        ShowLatency();}    void ShowLatency()    {        if (isLocalPlayer)        {            latency = nClient.GetRTT();            latencyText.text = latency.ToString();        }    }}




0 0
原创粉丝点击