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;
     dir1 = (Mathf.Cos(transform.localEulerAngles.x) * transform.right).normalized;
    dir2 = new Vector3((Mathf.Cos(transform.localEulerAngles.z) * transform.forward).x, 0, (Mathf.Cos(transform.localEulerAngles.z) * transform.forward).z).normalized;
}

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

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值