在上一篇的Health脚本的最后一个方法里:
我们设置了玩家的重生位置设置,为这个方法添加[ClientRpc]特性,表示代码在执行在客户端。但是又服务器调用,这样就相当于从服务器广播位置信息,使得客户端的位置信息始终同步,我们还需要在Unity做如下修改:
首先我们在Unity里面指定玩家的重生位置,然后给设定的位置添加如下组件:
然后在NetworkManager里面设置如下:
这样,当游戏开始时,玩家的位置就在我们设定好的位置了。
下面我们为游戏添加一些敌人使得游戏稍微丰富一些:
首先创建一个空物体并添加EnemySpawn脚本用来生成敌人:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class EnemySpawn : NetworkBehaviour
{
public GameObject EnemyPre;
public int EnemyCount;
public override void OnStartServer()
{
CmdSpawnEnemy();
}
//private void Start()
//{
// CmdSpawnEnemy();
//}
//[Command]
public void CmdSpawnEnemy()
{
for (int i = 0; i < EnemyCount; i++)
{
Vector3 pos = new Vector3(EnemyPre.transform.position.x + Random.Range(-6, 6), EnemyPre.transform.position.y, EnemyPre.transform.position.z + Random.Range(-6, 6));
GameObject enemy = GameObject.Instantiate(EnemyPre, pos, EnemyPre.transform.rotation);
enemy.transform.rotation = Quaternion.Euler(0, Random.Range(0, 180), 0);
NetworkServer.Spawn(enemy);
}
}
}
上面的脚本中,既可以直接重写 public override void OnStartServer()方法在服务器生成敌人也可以使用[Command]指令,在客户端Start()方法里面调用方法。
下面是制作敌人的预制:
敌人需要有Health脚本进行血量的控制,NetworkIdentity和Player一致
下面运行起来:
OK,到此Unet的简单学习就完了,后面会就Unet做一个比较深入的了解
欢迎加群:4364930讨论。