10.网络优化
当运行后,SceneScript被disable了,直到玩家处于准备状态为止,因为GameObject.Find()无法保证具有NetworkIdentity的场景对象的被发现。
所以解决方法就是用GameObject.Find()用来得到非网络标识的物体,然后具有网络标识的可以设置预先设定。创建SceneReference空对象,加入SceneReference.cs,然后加入如下代码:
using UnityEngine;
namespace QuickStart
{
public class SceneReference : MonoBehaviour
{
public SceneScript sceneScript;
}
}
然后在SceneScript.cs加入public SceneReference sceneReference,最后两者把脚本相互映射进去,这样两者就可以通信了。
最后在PlayerScript的awake函数中加入sceneScript = GameObject.Find(“SceneReference”).GetComponent<SceneReference>().sceneScript;
11.制作游戏交互界面
在SceneScript.cs加入以下代码:
using UnityEngine.SceneManagement;
public void ButtonChangeScene()
{
if (isServer)
{
Scene scene = SceneManager.GetActiveScene();
if (scene.name == "MainScene") { NetworkManager.singleton.ServerChangeScene("MyOtherScene"); }
else { NetworkManager.singleton.ServerChangeScene("MainScene"); }
}
else { Debug.Log("You are not Host."); }
}