Показать сообщение отдельно
Старый 27.08.2015, 09:46   #11
daniladiv
AnyKey`щик
 
Регистрация: 24.08.2015
Сообщений: 19
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Одна камера на двух мультиплеерах.

Упростил код но все равно поворот не хочет устанавливаться, он мелькнет на пару долесекунд и сброситься. Перемещение камеры работает хорошо.
using UnityEngine;
using System.Collections;


public class GlVar : MonoBehaviour
{
    public GameObject Camera; // единственная камера на сцене
    public bool iClient; //выставляются в другом скрипте правильно
    public bool iServ;

     void Update()
    {
        if ((Input.GetAxis("Vertical") != 0 || Input.GetAxis("Horizontal") != 0 
            || Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0))
        {           
            SetPos();
        }
    }

    public void SetPos()
    {
        Vector3 p = Camera.transform.position;
        Vector3 r = Camera.transform.eulerAngles; 
        if (iClient)// я клиент
        this.GetComponent<NetworkView>().RPC("SetKey", RPCMode.Server, p, r);
        if (iServ) // я сервер
        this.GetComponent<NetworkView>().RPC("SetKey", RPCMode.Others, p, r);
    }

    [RPC]
    void SetKey(Vector3 pos, Vector3 r)
    {
            // Движения мыши -> Вращение камеры
            Camera.transform.eulerAngles = r;
            // перемещение камеры
            Camera.transform.position = pos;     
    }

}
Сбрасывает скрипт управления камерой
using UnityEngine;
using System.Collections;
//using UnityEngine.Networking;

public class Polet : MonoBehaviour
{

    public float mouseSensitivity = 3.0f;
    public float speed = 2.0f;
    private Vector3 transfer;
    private GameObject globalvar;
    
    public float minimumX = -360F;
    public float maximumX = 360F;
    public float minimumY = -60F;
    public float maximumY = 60F;
    float rotationX = 0F;
    float rotationY = 0F;
    Quaternion originalRotation;

    public float X;

    void Awake()
    {
        GetComponent<Camera>().orthographic = false;
    }

    void Start()
    {
        originalRotation = transform.rotation;
        globalvar = GameObject.Find("GV");

    }

    void Update()
    {
        // Движения мыши -> Вращение камеры
        rotationX += Input.GetAxis("Mouse X") * mouseSensitivity;
        rotationY += Input.GetAxis("Mouse Y") * mouseSensitivity;
        rotationX = ClampAngle(rotationX, minimumX, maximumX);
        rotationY = ClampAngle(rotationY, minimumY, maximumY);
        Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
        Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, Vector3.left);
        transform.rotation = originalRotation * xQuaternion * yQuaternion;
        // перемещение камеры
        transfer = transform.forward * Input.GetAxis("Vertical");
        transfer += transform.right * Input.GetAxis("Horizontal");
        transform.position += transfer * speed * Time.deltaTime;
        //
        X = Input.GetAxis("Mouse X");

    }

    public static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360F) angle += 360F;
        if (angle > 360F) angle -= 360F;
        return Mathf.Clamp(angle, min, max);
    }

}
Как поступить? Отключать скрипт если игрок не нажимает кнопки и не двигает мышью?

Последний раз редактировалось daniladiv, 27.08.2015 в 10:38. Причина: Нашел причину
(Offline)
 
Ответить с цитированием