一、如前面说的那样新建一个Unity项目并初始化GDNet开发环境
二、新建一个场景,并保存为“GameScene”
三、新建一个空对象(Create Empty),并改名为NetworkManager(当然,改为什么名字其实无所谓,不影响)。
加入ClientManager、SerializeAdapter、NetworkTime组件。并将ClientManager中的Protocal改为Tcp。
四、新建文件MyCommand.cs
复制 using System;
using System.Collections.Generic;
using System.Text;
using Net.Component;
public class MyCommand : Command
{
}
注意:这个MyCommand.cs文件最好与服务器端VisualStudio项目的MyCommand.cs同名且代码一样
五、建立MyClientSceneManager.cs
复制 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Net.Share;
using Net.Component;
using System;
public class MyClientSceneManager : Net.Component.SceneManager
{
public override void OnOperationOther(Operation opt)
{
switch (opt.cmd)
{
case MyCommand.Attack:
{
}
break;
}
}
}
将这个文件拖放给NetworkManager
========================== 下面是Player生成与设置 ==========================
六、建立场景环境。先建立地面Floor
建立一个Plane,改名为Floor,scale改为 (10,1,10)
七、新建Capsule,改名Player,并加入 TransformComponent 组件
将TransformComponent 组件的Sync Mode设为Local,勾上Fixed Sync。
将Hierachy中的Player拖入Project窗口,做成Prefab,并将Hierachy中的Player删除
八、新建PlayerController.cs,加载到Player上,但不要启用
复制 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 8f;
private void Update()
{
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(Vector3.left * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(Vector3.back * speed * Time.deltaTime);
}
}
}
九、建立一个空对象(Create Empty),改名为GameManager(改为什么名字无所谓,但一个好的命名对项目是有很大的好处的)
十、新建脚本GameManager.cs,加到GameManager这个对象上。并将Player的Prefab拖进来
复制 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Net.Component;
public class GameManager : MonoBehaviour
{
public GameObject PlayerPrefab;
private void Start()
{
ClientManager.Instance.client.OnConnectedHandle += Connected;
}
private void Connected()
{
SpawnPlayer(Vector3.zero, Quaternion.identity);
}
public void SpawnPlayer(Vector3 position, Quaternion rotation)
{
NetworkTransformBase.Identity = ClientManager.UID;
GameObject _player = Instantiate(PlayerPrefab, position, rotation);
_player.GetComponent<PlayerController>().enabled = true;
}
}
十一、在NetworkManager的MyClientSceneManager的Prefabs增加一个项,将Player这个Prefab拖入。
============================== 结束 =================================
至此,第一个GDNet项目完成。先运行服务器端,然后运行客户端。
在服务端显示:
在客户端显示:
Build后,运行多个客户端登录。显示如下