Клиент берет на себя управление камерой - PullRequest
0 голосов
/ 13 октября 2018

У меня есть сетевая игра с кораблем, вокруг которого летает игрок.Корабль представляет собой сборный дом с камерой.Когда приложение запускается, игрок может перемещать корабль, и камера перемещается с префабом, как и ожидалось.Однако, когда другой игрок присоединяется к игре, этот новый игрок получает контроль над камерой.У каждого игрока по-прежнему есть контроль над своим кораблем, и они могут двигаться независимо, но камера следует за последним присоединившимся кораблем игрока.

Я в растерянности, потому что камера является дочерней по отношению к префабу игрока, поэтому яне понимаю, как другой игрок может управлять камерой.

Я пытался добавить сетевую идентификацию с идентификатором локального игрока, но не уверен, что еще попробовать.

Я бы хотел, чтобы камера следовала за кораблем локального игрока.

Пожалуйста, дайте мне знать, если что-нибудь еще поможет диагностировать эту проблему.

На самом деле никакого соответствующего кода нет, но этот код устанавливает исходную камеру в неактивное состояние, чтобы сборная камера стала активной камерой..

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);
        }
    }
}
...