SynMove.cs
using UnityEngine;using System.Collections;using UnityEngine.Networking;public class SynMove : NetworkBehaviour { ???//当 SyncVar 发生改变时,UNet 会从 Server 端向所有有效的 Client 端发送这些改变。注意这里的方向,是从 Server 到 Client ,而不是从 Client 到 Server 的方向。 ???[SyncVar] ???private Vector3 synPos; ???[SerializeField]Transform myTransform; ???[SerializeField]float lerpRate = 15; ???????// Update is called once per frame ???void FixedUpdate () { ???????TransmitPosition (); ???????LerpPosition (); ???????} ???void LerpPosition(){ ???????//不是本地玩家 ???????if (!isLocalPlayer) { ???????????//非本地玩家的位置进行更新 ???????????myTransform.position = Vector3.Lerp (myTransform.position,synPos,Time.deltaTime*lerpRate); ???????} ???} ???[Command] ???//命令, 在客户端调用,但是在服务端运行,这是方法必须以 Cmd 开头 ???void CmdProvidePositionToServer(Vector3 pos){ ???????//在服务器上为synPos 同步变量赋值 ???????synPos = pos; ???} ???[ClientCallback] ???//只在客户端调用 ???void TransmitPosition(){ ???????//是本地玩家 ???????if (isLocalPlayer) { ???????????//就把本地玩家的位置传给服务器 ???????????CmdProvidePositionToServer (myTransform.position); ???????} ???}}
PlayerController.cs
using UnityEngine;using System.Collections;using UnityEngine.Networking;public class PlayerController : NetworkBehaviour { ???????// Update is called once per frame ???void Update () { ???????//判断是不是本地玩家(自己只能控制自己的玩家,不能控制别人的玩家) ???????if (isLocalPlayer == false) { ???????????return; ???????} ???????//获取键盘横轴的值 ???????float h = Input.GetAxis ("Horizontal"); ???????//获取键盘纵轴的值 ???????float v = Input.GetAxis ("Vertical"); ???????//主角左右移动 ???????transform.Translate (Vector3.right*h*3*Time.deltaTime); ???????//主角前后移动 ???????transform.Translate (Vector3.forward*v*3*Time.deltaTime); ???}}
使用Multiplayer Networking做一个简单的多人游戏例子-1/2(换一种方法)
原文地址:http://www.cnblogs.com/ye-ming/p/7976817.html