相機(jī)旋轉(zhuǎn),看著是小事,但是卻關(guān)系到用戶的直觀體驗(yàn)。旋轉(zhuǎn)對(duì)了母慈子孝,旋轉(zhuǎn)錯(cuò)了則翻江倒海。
一、功能
鼠標(biāo)左右移動(dòng)時(shí),控制相機(jī)左右轉(zhuǎn)動(dòng)
鼠標(biāo)上下移動(dòng)時(shí),控制相機(jī)抬頭低頭
二、被GPT帶翻的過程
你可以在GPT里提問,他的回答也很給力,能轉(zhuǎn),但是都不符合人體的看東西的特點(diǎn)。
后來還是的自己寫…
本案的相機(jī)旋轉(zhuǎn)的關(guān)鍵要點(diǎn)有兩個(gè):
- 1、鼠標(biāo)左右滑動(dòng)的時(shí)候,相機(jī)要圍繞這 世界的Y軸 旋轉(zhuǎn),旋轉(zhuǎn)的中心在相機(jī)的原點(diǎn)。
//左右旋轉(zhuǎn):繞自己的原點(diǎn)旋轉(zhuǎn),旋轉(zhuǎn)軸為世界的Y軸
this.transform.RotateAround(this.transform.position, axisX,mouseX);// public Vector3 axisY = new Vector3(1,0,0);
類比:
我雖然是低著頭(相機(jī)往下看),但是當(dāng)我東張西望的時(shí)候,往東和往西是圍繞我站立的Y軸,也就是世界的Y軸,來旋轉(zhuǎn)轉(zhuǎn)的。其他任何旋轉(zhuǎn)方法,都會(huì)導(dǎo)致奇怪的效果,不符合人的觀察特點(diǎn)。
下圖的坐標(biāo)軸為世界坐標(biāo)軸。
文章來源:http://www.zghlxwxcb.cn/news/detail-495533.html
- 2、鼠標(biāo)上下滑動(dòng)的時(shí)候,相機(jī)實(shí)現(xiàn)抬頭和低頭的動(dòng)作,此時(shí)相機(jī)是繞自己的x軸進(jìn)行旋轉(zhuǎn)。
類比:把自己的頭想象成一個(gè)攝像機(jī),抬頭和低頭時(shí),我們繞的軸是穿過太陽(yáng)穴的一條線。
//抬頭低頭:繞自己的軸旋轉(zhuǎn)
transform.Rotate(axisY,mouseY, Space.Self);// public Vector3 axisY = new Vector3(1,0,0);
文章來源地址http://www.zghlxwxcb.cn/news/detail-495533.html
三、代碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 鼠標(biāo)左右移動(dòng)時(shí),控制相機(jī)左右轉(zhuǎn)動(dòng)
/// 鼠標(biāo)上下移動(dòng)時(shí),控制相機(jī)抬頭低頭
/// 該腳本掛載到相機(jī)Camera上
/// Todo:加入平滑插值或者動(dòng)畫效果
/// </summary>
public class CameraController2 : MonoBehaviour
{
/// <summary>
/// 鼠標(biāo)靈敏度
/// </summary>
[Header("鼠標(biāo)靈敏度")]
public float sensitivity = 100f; // 鼠標(biāo)靈敏度
/// <summary>
/// 相機(jī)抬頭低頭的旋轉(zhuǎn)軸
/// </summary>
[Header("相機(jī)抬頭低頭的旋轉(zhuǎn)軸")]
public Vector3 axisY = new Vector3(1,0,0);
/// <summary>
/// 鼠標(biāo)X位移映射的旋轉(zhuǎn)軸
/// </summary>
[Header("鼠標(biāo)X位移映射的旋轉(zhuǎn)軸")]
public Vector3 axisX = new Vector3(0, 1, 0);
[Header("0-左鍵,1-右鍵,2-中建")]
[SerializeField]
public int buttonIndex = 1;
void Update()
{
//鼠標(biāo)按下
if (Input.GetMouseButton(buttonIndex))
{
// 獲取鼠標(biāo)的位置變化delta值
float mouseX = Input.GetAxis("Mouse X") * sensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * sensitivity * Time.deltaTime;
//左右旋轉(zhuǎn):繞自己的點(diǎn)旋轉(zhuǎn),旋轉(zhuǎn)軸為世界的Y軸
this.transform.RotateAround(this.transform.position, axisX,mouseX);
//抬頭低頭:繞自己的軸旋轉(zhuǎn)
transform.Rotate(axisY,mouseY, Space.Self);
}
}
}
到了這里,關(guān)于Unity:鼠標(biāo)【上下左右滑動(dòng)時(shí)】控制相機(jī)【左右張望】和【上下抬頭】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!