У меня есть сетевая игра с кораблем, вокруг которого летает игрок.Корабль представляет собой сборный дом с камерой.Когда приложение запускается, игрок может перемещать корабль, и камера перемещается с префабом, как и ожидалось.Однако, когда другой игрок присоединяется к игре, этот новый игрок получает контроль над камерой.У каждого игрока по-прежнему есть контроль над своим кораблем, и они могут двигаться независимо, но камера следует за последним присоединившимся кораблем игрока.
Я в растерянности, потому что камера является дочерней по отношению к префабу игрока, поэтому яне понимаю, как другой игрок может управлять камерой.
Я пытался добавить сетевую идентификацию с идентификатором локального игрока, но не уверен, что еще попробовать.
Я бы хотел, чтобы камера следовала за кораблем локального игрока.
Пожалуйста, дайте мне знать, если что-нибудь еще поможет диагностировать эту проблему.
На самом деле никакого соответствующего кода нет, но этот код устанавливает исходную камеру в неактивное состояние, чтобы сборная камера стала активной камерой..
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);
}
}
}