我有一个联网的游戏,玩家飞来飞去。该船是带有摄像头的预制件。当应用程序运行时,播放器可以按预期方式移动船只,并且摄像机随预制件一起移动。但是,当另一个玩家加入游戏时,该新玩家将控制摄像机。每个玩家仍然可以控制自己的飞船,并且可以独立移动,但是摄像机会跟随最近加入的玩家飞船。
我不知所措,因为相机是播放器预制件的子代,所以我不明白其他玩家如何控制相机。
我尝试添加具有本地播放器身份的网络身份,但不确定是否还有其他尝试。
我希望摄像机跟随本地玩家的飞船。
请让我知道是否还有其他方法可以帮助诊断此问题。
确实没有任何相关代码,但是此代码确实将初始摄像头设置为非活动状态,以使预制摄像头成为活动摄像头...
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
public class move : NetworkBehaviour {
public float moveSpeed = 1f;
public float smoothTimeY;
public float smoothTimeX;
private GameObject joystickcont;
private Camera firstcamera;
public Camera shipcamera;
[SyncVar(hook = "OnSetScale")]
private Vector3 scale;
[Command]
public void CmdSetScale(Vector3 vec)
{
scale = vec;
}
private void OnSetScale(Vector3 vec)
{
transform.localScale = vec;
}
void Start () {
if (!isLocalPlayer)
{
return;
}
firstcamera = GameObject.FindWithTag("firstcamera").GetComponent<Camera>();
firstcamera.gameObject.SetActive(false);
shipcamera.gameObject.SetActive(true);
CmdSetScale(gameObject.transform.localScale);
gameObject.transform.localScale = new Vector3(0.05f, 0.05f, 1);
}
void Update () {
if (!isLocalPlayer)
{
return;
}
CmdSetScale(gameObject.transform.localScale);
Vector3 dir = Vector3.zero;
dir.x = Input.GetAxis("Horizontal");
dir.y = Input.GetAxis("Vertical");
joystick moveJoystick = joystickcont.GetComponent<joystick>();
if (moveJoystick.InputDirection != Vector3.zero)
{
dir.x = moveJoystick.InputDirection.x;
dir.y = moveJoystick.InputDirection.y;
}
var rb = gameObject.GetComponent<Rigidbody2D>();
if (dir == Vector3.zero)
{
}
else
{
float heading = Mathf.Atan2(dir.x, dir.y);
transform.rotation = Quaternion.Inverse(Quaternion.Euler(0f, 0f, heading * Mathf.Rad2Deg));
rb.velocity = new Vector3(dir.x * .2f, dir.y * .2f, 0);
}
}
}