在學習unity旋轉物體的時候發現一個問題:
當按住W,物體朝前,旋轉的Y軸為0。
當按住D,物體朝右,旋轉的Y軸為90。
當同時按住W和D不放的時候 物體朝向右前方45度, 旋轉的Y軸為45度。
當松開的時候,出現錯誤,物體會回轉,角度不會保持在45度了 (如果不設定平滑旋轉物體會瞬間回到0度或者90度,錯誤表現非常明顯)
錯誤原因好像是:
人們一般很難同時一瞬間松開兩個按鈕,如松開D按鈕比松開W按鈕慢了0.1秒,物體瞬間從45度變成90度了。
如果設定了平滑旋轉和旋轉速度的話,旋轉速度越小回轉速度越慢,如同時松開快的話物體可能回轉到40度或者50度甚至更小,回轉不會很明顯,如果松開慢的話,有時會回轉10度以上就很明顯了;
另一個問題是如果速度過小,回轉不明顯了,但是物體轉身就會非常慢,控制會非常不靈活。
另一個問題就是W+D和W和D的按鈕重疊
對比發現現在大部分游戲(包括單機網游手游等)都不會回轉,松開后依然保持45度角度,角度就像鎖住的一樣,即時2個按鈕放的慢,也不會回轉,但又不影響W和D
很多游戲里:W,S,A,D 角色面向前,向后,向左,向右(有很多是瞬轉),一般相鄰的兩個鍵如W和D,角色會朝右前方
后來又發現有的比較早期的網游,放開兩個按鈕后,角色會瞬間回正,保持朝前
求助大佬如何像大部分游戲一樣即使松開的慢,物體也依然保持住右前的角度或者鎖定角度?謝謝
代碼如圖:


//旋轉速度
public float speed = 19;
//向量
public Vector3 v3 = Vector3.zero;
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
v3 = new Vector3(h, 0, v);
v3.Normalize();
if (h!=0||v!=0)
{
//朝向
Quaternion a = Quaternion.LookRotation(v3);
//平滑旋轉
Quaternion a1 = Quaternion.Lerp(transform.rotation, a, speed * Time.deltaTime);
transform.rotation = a1;
////這個不用平滑旋轉,當松開W和D鍵的時候,物體會瞬間回轉到0度或者90度
//Quaternion a = Quaternion.LookRotation(v3);
//transform.rotation = a;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225718.html
標籤:Unity3D
下一篇:openstack設定密碼策略
