客户正在控制相机

时间:2018-10-13 17:07:17

标签: c# unity3d networking unity3d-unet

我有一个联网的游戏,玩家飞来飞去。该船是带有摄像头的预制件。当应用程序运行时,播放器可以按预期方式移动船只,并且摄像机随预制件一起移动。但是,当另一个玩家加入游戏时,该新玩家将控制摄像机。每个玩家仍然可以控制自己的飞船,并且可以独立移动,但是摄像机会跟随最近加入的玩家飞船。

我不知所措,因为相机是播放器预制件的子代,所以我不明白其他玩家如何控制相机。

我尝试添加具有本地播放器身份的网络身份,但不确定是否还有其他尝试。

我希望摄像机跟随本地玩家的飞船。

请让我知道是否还有其他方法可以帮助诊断此问题。

确实没有任何相关代码,但是此代码确实将初始摄像头设置为非活动状态,以使预制摄像头成为活动摄像头...

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

0 个答案:

没有答案