0

我正在制作一款地震风格的游戏,目前正在实施多人游戏。有跳垫,如果 gameObject=("Player(Clone)") 进入触发器,它就会飞起来。在 unet (Unity Multiplayer) 中,当您启动并加入时,它会将您的游戏对象创建为“Player(Clone)”。

现在的问题是,当第二个玩家加入并在跳跃垫上跳跃(进入触发器)时,什么也没有发生。但是主机(玩家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(主机)甚至没有踩到垫子就被发射到空中。

4

1 回答 1

0

以下是我的一些发现:

  1. GameObject.Find("Player(Clone)")只会得到一个游戏对象。所以,如果有 2 个玩家,你只会得到一个,它可能是第一个玩家。
  2. 如果您使用NetworkTransform并且 player 的NetworkIdentity未设置为Local Player Authority,则它将不起作用,因为服务器将控制转换。
  3. 您还需要确保刚体是否通过网络同步。

但是,我建议使用CommandRPCClient通过网络同步所有播放器。例如,当玩家进入触发器时,向所有客户端发送 RPC,以便它们也更新其实例中玩家的转换。请在此处深入了解网络教程:https ://unity3d.com/learn/tutorials/topics/multiplayer-networking

于 2017-08-13T17:21:52.383 回答