【问题标题】:Host's camera on network game isn't working correctly网络游戏主机的摄像头无法正常工作
【发布时间】:2016-09-01 11:29:02
【问题描述】:

所以,我在 Unity5 中做一个 FPS 游戏,前几天我开始在 Unity 官方网站上查看multiplayer tutorials。

但是,我更改了一些代码以适应 FPS,但在开始执行此操作时遇到了问题。客户端的摄像头移动正常,但主持人的摄像头没有:它使用客户端的摄像头进行查看,但他的玩家移动,有点像第三人称视角。

所有玩家都有相同的代码,并且相机具有打开本地玩家权限的网络身份。此外,它还有这个 C# 脚本:

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

public class VisionControl : NetworkBehaviour {

void Start () {

    Cursor.lockState = CursorLockMode.Locked;
}

void Update () {
    if(!isLocalPlayer){
        return;
        }
    transform.Rotate (new Vector3 (-Input.GetAxis ("Mouse Y")*5.0f,0.0f,0.0f));
}
}

【问题讨论】:

    标签: c# unity3d unity5 multiplayer


    【解决方案1】:

    您的相机不应具有网络身份。 仅本地客户端使用它来获取游戏世界的视角,因此它们不需要联网。 每个摄像头都存在于当前客户端上。仅适用于当前客户端。 每个游戏实例应运行 1 个摄像头,即本地玩家的摄像头。

    将一个简单的非网络摄像头组件附加到您的播放器预制件并再次测试。

    【讨论】:

    • 主机工作正常,但是当客户端移动其相机时,主机也移动相机。我认为这是因为客户端向主机发送信息,主机对其进行解释。
    • 这就是为什么摄像机不能联网的原因...播放器/服务器之间不应该通过摄像机进行通信。每个玩家都有自己使用的摄像头,联网摄像头不是一个好主意....
    • 是的,但是如何让相机只在本地而不以任何方式传输数据?
    • 从摄像头中移除所有网络组件(NetworkIdentity、NetworkTransform 等),只保留一个简单的摄像头组件。按照我原来的答案说明。只需将相机组件添加到您的播放器预制件中,不要以任何方式将其联网
    • 不起作用。它传输数据是因为玩家有一个 NetworkIdentity。它需要它成为播放器。
    【解决方案2】:

    已修复!我删除了 VisionControl 脚本,并将这个放在了玩家的移动脚本中:

        public override void OnStartLocalPlayer ()
    {
        if (isLocalPlayer) {
            FindObjectOfType<Camera> ().gameObject.transform.position = this.transform.position+new Vector3(0f,0.5f,0f);
            FindObjectOfType<Camera>().gameObject.transform.SetParent (this.transform);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 2012-06-19
      • 1970-01-01
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多