Вращение основной камеры - PullRequest
0 голосов
/ 19 мая 2019
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour
{

    public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
    public RotationAxes axes = RotationAxes.MouseXAndY;
    public float sensitivityX = 15F;
    public float sensitivityY = 15F;

    public float minimumX = -360F;
    public float maximumX = 360F;

    public float minimumY = -60F;
    public float maximumY = 60F;

    float rotationY = 0F;

    void Update()
    {
        if (axes == RotationAxes.MouseXAndY)
        {
            float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;

            rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);

            transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
        }
        else if (axes == RotationAxes.MouseX)
        {
            transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
        }
        else
        {
            rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);

            transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
        }
    }

    void Start()
    {
        //if(!networkView.isMine)
        //enabled = false;

        // Make the rigid body not change rotation
        //if (rigidbody)
        //rigidbody.freezeRotation = true;
    }
}

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

1 Ответ

0 голосов
/ 19 мая 2019

Получите первое Touch, затем используйте touch.deltaPosition, чтобы узнать, сколько сдвинулось касание с момента последнего обновления.Затем вы можете масштабировать в зависимости от размера экрана и чувствительности.

void Update()
{
    if(Input.touchCount > 0) {
        Touch touch = Input.GetTouch(0);
        float turnAngleChange = (touch.deltaPosition.x / Screen.width) * sensitivityX; 
        float pitchAngleChange = (touch.deltaPosition.y / Screen.height) * sensitivityY;

        // Handle any pitch rotation
        if (axes == RotationAxes.MouseXAndY || axes == RotationAxes.MouseY) {
            rotationY = Mathf.Clamp(rotationY+pitchAngleChange, minimumY, maximumY);
            transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0f));
        }

        // Handle any turn rotation
        if (axes == RotationAxes.MouseXAndY || axes == RotationAxes.MouseX) {
            transform.Rotate(0f, turnAngleChange , 0f);
        }
    }
}

В качестве идентификатора может быть затруднительно назвать повороты основного тона rotationY, даже если они на самом деле являются вращениями вдоль оси x, и наоборотнаоборот.

...