我有一个摄像头连接到由 NetworkManager 实例化的播放器预制件。
主机开始游戏后一切正常,但是一旦客户端加入游戏,主机就会切换摄像头,现在客户端和主机都在控制客户端摄像头.
我不确定为什么会这样,无法调试问题。
供您参考,这是我在相机上的播放器外观脚本:
using Unity.Netcode;
public class PlayerLook : NetworkBehaviour
{
public float sensitivity = 100f; // Mouse sensitivity
private Transform player; // Reference to player transform
private float xRotation = 0f; // Current rotation around the x-axis
void Start()
{
player = this.transform.parent; // Set player reference
}
void Update()
{
float mouseX = Input.GetAxis("Mouse X") * sensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * sensitivity * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
player.Rotate(Vector3.up * mouseX);
}
}
不能说我以前玩过多人游戏,但我不确定让两个玩家都有自己的相机是否正确。无论如何,如果他们必须拥有它,例如当您想要显示分屏或其他内容时,那么您最好让玩家的一个或两个相机渲染到 RenderTexture 和一个相机来渲染您想要的任何构图。因为实际上,您可能在同一个显示器中渲染了两个相机。上面发布的代码本身不会影响任何恕我直言。您可能只会看到场景视图中渲染的最后一个摄像机。如果没有,那么也许在其他地方寻找对 Camera.main 的引用,并检查两个摄像头的 MainCamera 标签。在同一个场景中,只有一台摄像机应该有该标签。我也会研究 Cinemachine。您可以使用 vcams 而不是 Unity 的 Camera 作为子项,并且场景中只有一个 Unity Camera。 vcams 是驱动 Unity 相机的代理,因此您可以在它们之间切换甚至混合等。