简而言之,我有一个非常简单的多人游戏。这是滚球游戏(Unity3D教程)。所以现在我的球员等都完美地产卵了,每个人都可以完美地控制自己的球。

但这是问题所在:我有一个默认的主摄像机。由于只有本地播放器本身需要查看,因此我认为尝试为服务器上的每个播放器生成单独的摄像机没有任何意义。

但是,要使摄像机跟随玩家,我需要将其附加到玩家的游戏对象上。显然,我无法将其附加到播放器预制件上,因为它是相机需要遵循的克隆形式。但是由于播放器是由网络管理器组件生成的,所以我不知道如何引用此克隆。

我自己尝试过的方法:

public class CameraController : NetworkManager
{

    public GameObject playerPrefab;
    public Transform target;

    private Vector3 offset;

    public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
    {
        GameObject player = (GameObject)Instantiate(playerPrefab, new Vector3(0, 0.5f, 0), Quaternion.identity);
        target = player.transform;
        NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
    }

    void Start()
    {
        offset = transform.position - target.position;
    }

    void LateUpdate()
    {
        transform.position = transform.position + offset;
    }
}

但这导致:
c# - 如何将摄像机连接到由HLAPI网络管理器实例化的播放器对象?-LMLPHP

我发现这很奇怪,因为您可以清楚地看到,NetworkManager对象上没有NetworkIdentity组件。过去4个小时,我一直在尝试很多事情,但我做不到。所以现在我希望你们能帮助我。

编辑:这是网络管理器通常产生播放器的方式。如您所见,没有代码:

c# - 如何将摄像机连接到由HLAPI网络管理器实例化的播放器对象?-LMLPHP

最佳答案

我会在预制中添加一个摄像头,然后编写一个播放器脚本,如下所示:

using UnityEngine.Networking;

public class Player : NetworkBehaviour
{
    public Camera camera;

    void Awake()
    {
        if(!isLocalPlayer)
        {
            camera.enabled = false;
        }
    }
}

关于c# - 如何将摄像机连接到由HLAPI网络管理器实例化的播放器对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36261871/

10-13 05:55