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;
}
}
}
原文地址:https://blog.csdn.net/weixin_41725832/article/details/115381865
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。