5.玩家移动

为了实现玩家移动的功能,我们采用一个新的脚本叫做“PlayerController”。首先,这个脚本不用到联网的代码,所以只能在单机状态下运行。

1.在Player预制件上新建并添加名为“PlayerController”的脚本。

2.打开脚本编辑,替换代码。

using
UnityEngine;
public
classPlayerController : MonoBehaviour
{
void Update()
{
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);
}
}

系统默认Input.GetAxis("Horizontal")与Input.GetAxis("Vertical")能够让玩家使用WASD、上下左右箭头来移动物体。关于Input

Manager更多细节详见:

http://docs.unity3d.com/Manual/class-InputManager.html?_ga=1.136380656.1949003894.1429508192

3.保存脚本。

4.返回Unity,保存场景。

6.在线测试玩家移动

测试主机上玩家的移动

到目前为止,Player能够在客户端移动,但是还没有联网。测试:

1.进入运行模式。

NetworkManagerHUD的默认界面为:

unity 检查网络连接状态 unity联网教程_unity多人联机插件

2.点击LAN

Host按钮,使其成为Host。

NetworkManager会在场景中创建一个新的游戏物体,NetworkManagerHUD会改变,显示服务器正在工作。此时玩家端以Host的方式运行,意味着服务器与客户端在同一进程。

unity 检查网络连接状态 unity联网教程_unity多人联机插件

测试场景中玩家物体的移动:

3.按住WASD或者上下左右箭头移动玩家物体。

4.点击Stop按钮可以结束host。

5.退出Unity的运行模式。

测试客户端玩家的移动

测试客户端玩家移动需要游戏的两个实例同时运行,其中一个是Host。其中一个实例可以在编辑器运行,另一个可以在游戏创建的项目中运行,所以我们先要基于现有工程创建项目。

将Main场景添加到build

settings窗口。

6.保存工程。

7.选择standaloneapplication,创建单机项目并运行。

创建的单机项目运行时,勾选windowed,并选择一个相对较低的分辨率使得项目能够在编辑器旁边运行。

8.点击Host按钮,使其成为主机。

9.测试场景:按住WASD或者上下左右箭头移动玩家物体。

10.返回Unity。

11.进入Unity的运行模式。

游戏在Unity的窗口中会显示NetworkManagerHUD的界面。

12.点击Unity场景中的LANClient按钮,作为客户端来连接主机。

场景中会出现两个游戏物体,一个是主机上的本地玩家,另一个是连接上主机的客户端上的远程玩家。

测试客户端玩家游戏物体的移动:

13.按住WASD或者上下左右箭头移动玩家物体。

注意两个游戏物体都用的是同样的输入方法。

14.转换到单机版玩家。

注意主机上的玩家游戏物体位置与客户端上面的并不太。

这是因为PlayerController脚本并没有联网,两个玩家物体有着相同脚本,在每一个游戏实例中都处理相同的输入指令。主机与客户端都互相知晓对方的存在,但是玩家物体并没有与主机通信,

NetworkManager没有追踪它们的位置,所以没有被同步。

15.关闭单机版游戏。

16.返回Unity,退出运行模式。