2017-08-13 141 views
0

我正在制作地震式游戏,并且目前正在实施多人游戏。如果gameObject =(“玩家(克隆)”)进入触发器,则会出现跳跃板。在unet(Unity多人游戏)中,当你启动并加入它时,会将你的GameObject创建为“玩家(克隆)”。无法在Unity中找到克隆玩家(Unet)的实例

现在的问题是,当第二个玩家加入并在跳板上跳转(进入触发器)时,什么都不会发生。但主持人(玩家1)可以。以下是跳转板识别游戏对象的代码。我一直在抨击我的大脑,试图使用诸如“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(主机)被发射到空中,甚至没有踩着垫。

回答

0

下面是我的一些调查结果:

  1. GameObject.Find("Player(Clone)")只会得到一个游戏对象。所以,如果有两名球员,你只能得到一名球员,而且可能是第一名球员。
  2. 如果您正在使用NetworkTransform和球员的NetworkIdentity没有被设置为本土球员管理局,这是行不通的,因为服务器将控制改造。
  3. 您还需要确定刚体是否通过网络同步。

不过,我会建议使用命令RPCClient同步所有网络上的球员。例如,当玩家进入触发器时,向所有客户端发送RPC,以便他们也更新玩家在其实例中的变换。 请看这里深入的网络教程:https://unity3d.com/learn/tutorials/topics/multiplayer-networking

+0

我很肯定在这一点上它的编号1),我刚刚开始联网,所以我不确定什么RPCClient和所有。但是你会用什么样的方法(除了rpc)来解决数字1)? –

+0

您需要从已经进入触发器的玩家处获得quakeJump组件。所以,你可以使用这样的代码:https://pastebin.com/baU5qyfb 但是,如果你不确定第二点,它将不起作用。 - – ZayedUpal

+0

我的网络身份设置为本地播放器权限,当我写下你粘贴在我的代码中的内容时,它没有任何影响,它仍然处于当前状态,如果主持人跳转到可以启动的键盘上,并且如果有其他播放器跳上去,玩家不会启动,但主持人即使不在垫上也会启动。 –