猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://blog.csdn.net/cocos2der/article/details/51007512
使用Multiplayer Networking做一个简单的多人游戏例子-1/3
使用Multiplayer Networking做一个简单的多人游戏例子-2/3
使用Multiplayer Networking做一个简单的多人游戏例子-3/3
7. 在网络中控制Player移动
上一篇中,玩家操作移动会同时控制同屏内的所有Player,且只有自己的屏幕生效。因为咱们还没有同步Transform信息。
下面我们通过UnityEngine.Networking组件来实现玩家控制各自Player
- 打开PlayerController脚本
- 添加命名空间UnityEngine.Networking
using UnityEngine.Networking;
- 修改MonoBehaviour为NetworkBehaviour
public class PlayerController : NetworkBehaviour
- 在Update函数中添加如下方法
if (!isLocalPlayer)
{
return;
}
最后你的PlayerController内容如下:
using UnityEngine;
using UnityEngine.Networking;
public class PlayerController : NetworkBehaviour
{
void Update()
{
if (!isLocalPlayer)
{
return;
}
var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;
var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
transform.Rotate(0, x, 0);
transform.Translate(0, 0, z);
}
}
- 保存脚本
- 回到Unity中
- 选中Player prefab在Project面板中
- 保持Player prefab为选中状态
- 添加组件Network > NetworkTransform
- 保存工程
NetworkTransform用于在网络中同步所有Client信息。加上isLocalPlayer判断,只让当前客户端操作。
8. 测试网络中多玩家移动
- 同样Build一个Mac standalone application作为主机运行
- 点击LAN Host作为主机开始游戏
- 运行Unity,点击LAN Client作为另一个客户端加入游戏
- 点击各自的WASD移动各自Player
9. 区分各自的Player
上面中两个Player外观一致,我们修改自己Player的颜色
- 打开PlayerController脚本
- 添加OnStartLocalPlayer方法
public override void OnStartLocalPlayer()
{
GetComponent<MeshRenderer>().material.color = Color.blue;
}
最终PlayerController:
using UnityEngine;
using UnityEngine.Networking;
public class PlayerController : NetworkBehaviour
{
void Update()
{
if (!isLocalPlayer)
{