被困在Unity 5 UNET多人游戏代码中

时间:2016-05-03 11:42:17

标签: c# networking unity3d multiplayer

我在使用unity 5 UNET编写一些多人游戏时遇到困难。 目前我正在使用unity 5.1并希望通过网络同步一些游戏对象的子变换。

问题是所有客户端都发送请求将其子转换同步到服务器。但服务器并没有将其子转换与其他客户端一起下沉。

我听说有一个组件是团结5.2为那项工作,但正如我告诉你我在团结5.1工作所以我想要5.1的解决方案。

这是我的代码。

期待回应

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class Sync_Position : NetworkBehaviour 
{
    [SyncVar]
    Vector3 []sync_pos;

    [SerializeField] Transform []obj;
    [SerializeField] int lerp_rate;

    Vector3 []last_pos;
    float threshold=5;

    void Start()
    {
        sync_pos= new Vector3[obj.Length];
        last_pos= new Vector3[obj.Length];
    }

    // Update is called once per frame
    void FixedUpdate () 
    {
        transform_pos();
        lerp_pos();
    }

    void lerp_pos()
    {
        if(!isLocalPlayer)
        {
            for(int i=0;i<obj.Length;i++)
            {
                if(Vector3.Distance(obj[i].localPosition,sync_pos[i]) > 1)
                {
                    obj[i].localPosition=sync_pos[i];
                }
            }
        }
    }

    [Command]
    void Cmd_for_pos(Vector3 p, int index)
    {
        sync_pos[index]=p;
    }

    [ClientCallback]
    void transform_pos()
    {
        if(isLocalPlayer)
        {
            for(int i=0;i<obj.Length;i++)
            {
                if(Vector3.Distance(obj[i].localPosition,last_pos[i]) > threshold)
                {
                    Cmd_for_pos(obj[i].localPosition,i);
                    last_pos[i]=obj[i].localPosition;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你可以创建&#34;阴影对象&#34;对于服务器上每个连接的客户端/播放器,然后移动这些对象代表antoehr远程对象的位置。

我只能建议查看本教程,因为这是我用来进入UNET的。

https://www.youtube.com/watch?v=NLnzlwCRjgc