在本文,你將學(xué)會如何用簡單的代碼實(shí)現(xiàn)功能相對較為全面的鼠標(biāo)控制Cube旋轉(zhuǎn)的解決方案。
功能:
- 可以設(shè)置觸發(fā)Cube旋轉(zhuǎn)的方式:點(diǎn)擊觸發(fā) OR __ *劃過觸發(fā) *__;
- 可以設(shè)置Cube旋轉(zhuǎn)圈數(shù);
- 可以設(shè)置Cube旋轉(zhuǎn)速率,正反轉(zhuǎn);
演示:
Tips: 由于GIF錄制幀率采集比較低,調(diào)整速率的功能錄出來的效果不明顯。
功能演示
代碼:
using UnityEngine;
using System.Collections;
public class RotateCube : MonoBehaviour
{
[Header("輸入要轉(zhuǎn)的圈數(shù):")] [Range(1,10)]public int RotateCount = 2;
[Header("旋轉(zhuǎn)步進(jìn)(速率):")]
public int stepSensitive = 5; //旋轉(zhuǎn)速度,每次多少個步進(jìn)
[Header("勾選點(diǎn)擊觸發(fā)旋轉(zhuǎn),反之劃過觸發(fā)旋轉(zhuǎn):")]public bool activeModel = true;
private bool ifActive = false; //強(qiáng)制鎖定必須動畫執(zhí)行完畢才能響應(yīng)下一次觸發(fā)。
string[] Msg = new string[] {"速率為負(fù)值,逆時針","速率為正值,順時針" };
private void OnMouseDown() //鼠標(biāo)左鍵點(diǎn)擊播放動畫
{
if (!ifActive&&activeModel)
{
Debug.Log(string.Format("我點(diǎn)擊了鼠標(biāo)左鍵,{0}旋轉(zhuǎn){1}圈!",Msg[stepSensitive<0?0:1],RotateCount) );
StartCoroutine(RotateIt());
}
}
private void OnMouseOver() //鼠標(biāo)劃過就播放動畫
{
if (!ifActive&&!activeModel)
{
Debug.Log(string.Format("鼠標(biāo)劃過,{0}旋轉(zhuǎn){1}圈!", Msg[stepSensitive < 0 ? 0 : 1], RotateCount));
StartCoroutine(RotateIt());
}
}
IEnumerator RotateIt()
{
ifActive = true;
int Step = 0;
do
{
gameObject.transform.eulerAngles = new Vector3(0, Step, 0);
Step+=stepSensitive;
yield return new WaitForFixedUpdate();
} while (Mathf.Abs(Step) < 360 *RotateCount);
gameObject.transform.eulerAngles = Vector3.zero; //計(jì)算機(jī)計(jì)算到最后的結(jié)果不能達(dá)到真正的0,且用戶步進(jìn)值不可控,故挑出循環(huán)體直接歸0
ifActive = false;
}
}
優(yōu)點(diǎn):
不在生命周期函數(shù)Update
監(jiān)測鼠標(biāo)事件,故該腳本可以復(fù)用并單獨(dú)控制各自的游戲?qū)ο螅?/p>
講啥優(yōu)點(diǎn),看看演示不更好玩?
下載地址
標(biāo)簽:Unity3D、鼠標(biāo)控制Cube旋轉(zhuǎn),OnMouseDown,OnMouseOver