Unity 鼠标控制相机移动

Unity 鼠标控制相机移动

一直白嫖,今天尝试写点东西吧,一小段代码,解决了相机旋转后再移动方向跟着变的问题,有不对的地方希望大佬们多多指教

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class CameraMoveTest : MonoBehaviour
{
float moveH, moveV, viewNum;
public float moveSpeed=10f, rotaSpeed=50f, viewSpeed=5f;
private Vector3 resetPosition;

Vector3 dir1=Vector3.right;
Vector3 dir2=Vector3.forward;
// Start is called before the first frame update
void Start()
{
    resetPosition = transform.position;
}

// Update is called once per frame
void Update()
{

#if UNITY_ANDROID
#else
if (!EventSystem.current.IsPointerOverGameObject())
{
if (Input.GetMouseButton(0))
{
CamMove();
}
if (Input.GetMouseButton(1))
{
CamRota();
}
CamView();
}
#endif
}

void CamMove()
{
    moveH = Input.GetAxis("Mouse X");
    moveV = Input.GetAxis("Mouse Y");

    if (moveV != 0 || moveH != 0)
    {
        transform.localPosition += dir1 * -moveH * moveSpeed * Time.deltaTime;
        transform.localPosition += dir2 * -moveV * moveSpeed * Time.deltaTime;
    }
}
void CamRota()
{
    moveH = Input.GetAxis("Mouse X");
    moveV = Input.GetAxis("Mouse Y");
    if (moveH!=0||moveV!=0)
    {
        float anglex = -moveV * rotaSpeed * Time.deltaTime;
        float angley = rotaSpeed * moveH * Time.deltaTime;
        Quaternion tempRotation1 = Quaternion.Euler(anglex,angley , 0f);
        transform.localEulerAngles = new Vector3((transform.localRotation * tempRotation1).eulerAngles.x, (transform.localRotation * tempRotation1).eulerAngles.y, 0);

        dir1 = (Mathf.Cos(anglex) * transform.right).normalized;
        dir2 = new Vector3((Mathf.Cos(angley) * transform.forward).x,0,(Mathf.Cos(angley) * transform.forward).z).normalized;
    }
}
void CamView()
{
    viewNum = Input.GetAxis("Mouse ScrollWheel");
    if (viewNum!=0)
    {
        transform.GetComponent<Camera>().fieldOfView +=viewNum * viewSpeed;
    }
}

}

上一篇:Unity中的群组行为


下一篇:Unity*移动拖动物品