客户端Unity项目

一、如前面说的那样新建一个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后,运行多个客户端登录。显示如下

最后更新于

这有帮助吗?