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

首先,我们需要的是新建一个空物体“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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值