无法在Unity中找到克隆播放器(Unet)的实例

时间:2017-08-13 12:48:32

标签: c# unity3d unet

我正在制作一个地震风格的游戏,我目前正在实施多人游戏。有跳垫,如果gameObject =("播放器(克隆)")进入触发器,则发送飞行。在unet(Unity Multiplayer)中,当你启动并加入它时,你会将游戏对象创建为"播放器(克隆)"。

现在的问题是,当第二个玩家加入并跳跃跳跃垫(进入触发器)时,没有任何事情发生。但是主持人(玩家1)可以。这是跳过垫识别GameObject的代码。我一直在抨击我的大脑,尝试不同的方法,如" Find.FindGameObjectsWithTag"。

代码:

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

public class JumpPad : MonoBehaviour {

QuakeJump fpsinput;
public float power;

private void OnTriggerEnter(Collider mycollision)
{
    {
        fpsinput = 
GameObject.Find("Player(Clone)").GetComponent<QuakeJump>();
        if (mycollision.gameObject.tag == "Player")
        {
            fpsinput.playerVelocity = transform.up * power;
        }
    }
}

}

编辑:我还注意到当玩家2跳到打击垫上时,没有任何事情发生在他身上,但是玩家1(主机)在没有踩到打击垫的情况下被发射到空中。

1 个答案:

答案 0 :(得分:0)

以下是我的一些发现:

  1. GameObject.Find("Player(Clone)")只能获得一个游戏对象。所以,如果有2个玩家,你只得到一个,它可能是第一个玩家。
  2. 如果您使用 NetworkTransform 且播放器的 NetworkIdentity 未设置为本地播放器权限,则无法正常工作,因为服务器将控制转换。
  3. 您还需要确保刚体是否通过网络同步。
  4. 但是,我建议使用命令 RPCClient 来通过网络同步所有玩家。例如,当玩家进入触发器时,将RPC发送给所有客户端,以便他们也在其实例中更新玩家的转换。 请在此深入了解网络教程:https://unity3d.com/learn/tutorials/topics/multiplayer-networking