NetWork网络_TCP_在unity中初步实现局域网互联效果

NetWork网络_TCP_在unity中初步实现局域网互联效果<13/9/2017>

首先搭建界面,建立Canvas并且赋予两个按钮建立服务器和客户端的功能

NetWork网络_TCP_在unity中初步实现局域网互联效果_第1张图片

为Canvas写一个脚本,实现点击事件和网络通讯速率的调整(能改善画面同步效果)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NetWork : MonoBehaviour
{
    void Start()
    {
        Network.sendRate = 180;//网络通讯速率,稍微改善实际显示效果
    }

    public void MyClick()
    {
        Network.InitializeServer(20, 8899, false);
    }

    public void MyClick2()
    {
        //"127.0.0.1"默认指的本机IP,若要实现局域网连接(不能用"127..."),必须在cmd中ipconfig查询本机正确的ip地址
        Network.Connect("192.168.90.110", 8899);
    }
}
实现网络连接的回调函数方法,写在主摄像机上面,不能写在Canvas,因为我面我们会false掉Canvas

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Connect : MonoBehaviour
{
    public Text connected;
    public GameObject canvas;
    public GameObject plane;
    public GameObject cube;

    void OnServerInitialized()//回调函数,可以和关联的点击事件放在不同脚本中同样有效
    {
        connected.text = "Server initialized and ready";
    }

    void OnConnectedToServer()//在客户端使用
    {
        connected.text = "Connected to server";
        canvas.gameObject.SetActive(false);
        plane.gameObject.SetActive(true);
        GameObject up = (GameObject)Network.Instantiate(cube, new Vector3(0, 7, 0), Quaternion.identity, 0);
        up.AddComponent();
    }

    void OnPlayerConnected(NetworkPlayer player)//在服务器使用
    {
        canvas.gameObject.SetActive(false);
        plane.gameObject.SetActive(true);
    }
}
如果在客户端产生对象,并且给对象赋予组件,那么只能在客户端控制对象物体,服务器同此.

创建物体的预制体时就要加上刚体和碰撞体等组件,如果在代码中添加,若是客户端则服务器中不会跟着动,反之亦然.

然后控制的对象预制体得加上NetWork View组件.

额外写一个简单的控制脚本给预制体:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{
    //一个普通的控制脚本
    void Update()
    {
        float x = Input.GetAxis("Horizontal");
        float y = Input.GetAxis("Vertical");
        if (x != 0 || y != 0)
        {
            transform.position += new Vector3(x, 0, y) * Time.deltaTime;
        }
        if (Input.GetKeyDown(KeyCode.Space))
        {
            gameObject.GetComponent().velocity += new Vector3(0, 7, 0);
        }
    }
}
打包时记得勾上Run in background,实现后台运行,否则切出来窗口不被激活,局域网使用会出问题

1.开始执行,打开两个窗口

NetWork网络_TCP_在unity中初步实现局域网互联效果_第2张图片
2.首先建立一个服务器

NetWork网络_TCP_在unity中初步实现局域网互联效果_第3张图片

3.服务器建立成功,使用另一个开始连接

NetWork网络_TCP_在unity中初步实现局域网互联效果_第4张图片

4.开始在客户端执行控制,局域网互联效果实现成功!

NetWork网络_TCP_在unity中初步实现局域网互联效果_第5张图片



你可能感兴趣的:(网络)