初學unity,關於解決有向勻速運動的問題

2021-07-07 02:51:45 字數 1205 閱讀 6282

在專案中,可能會遇到迅速任意方向的運動需求,要解決勻速運動大家可能會首先想到vector3.lerp和unity 的itween外掛程式來解決,但是真正使用之後,你就會發現vector3.lerp和itween外掛程式路徑演算法並不是你需要的效果,在目標點轉換的時候使用這兩個方法並不會勻速,兩點間的距離越大速度就越快,我對itween的演算法還不太了解,現在我著重解釋一下怎麼用vector3.lerp解決「變速」的問題;

vector3.lerp

static vector3 lerp(vector3 from, vector3 to, float t);假設from和to的座標分別為(x1,y1,z1)和(x2,y2,z2),兩點之間可以連成一條直線。vector3.lerp(from,to,t)的值(x,y,z)就是在這條直線上的一點,並且滿足x-x1/x2-x1=y-y1/y2-y1=z-z1/z2-z1=t,根據這個方程求得x=t(x2-x1)+x1,y=t(y2-y1)+y1,z=t(z2-z1)+z1,即vector3.lerp(from,to,t)的(返回)值為(t(x2-x1)+x1,t(y2-y1)+y1,t(z2-z1)+z1),由於x1,y1,z1,x2,y2,z2都是常數,所以x,y,z隨t單調遞增或遞減。當t=0時,x=t(x2-x1)+x1=x1,y=y1,z=z1;當t=1時,x=x2,y=y2,z=z2;當t=1/2時,x=x1+x2/2,y=y1+y2/2,z=z1+z2/2,正好為兩點之間的中點。函式返回值實際上就是由from到to的直線的t分點綜上所述,當0<=t<=1時,並且由0向1變化時,函式返回值沿直線由點from逐漸變化為點to。在unity中,t<0按t=0處理,t>1按t=1處理在update中呼叫該函式時,transform.position=vector3.lerp(transform.position,gameobject.findwithtag("player").transform.position,0.9f);每經過一幀,物體的位置向player移動90%,兩者之間越來越接近,但是永遠不會在同一位置(特殊情況除外)。可見,只要t不為0和1,兩者之間總是在逐漸接近,t越大,兩者之間接近的速度越快,當t不等於1時,兩者總不會在同一位置(特殊情況除外)。當t=1時,兩者總在同一位置

了解了 vector3.lerp每次都是按剩餘百分比,這就是速度變化的原因,而想要控制速度只需要很簡單的把t=1/((from - to).magnitude)就行了,每一幀都對剩餘的量求解,這樣就能實現勻速了。

而方向控制就使用quaternion.slerp就非常容易解決。

關於unity使用網路demo報錯的解決技巧

報錯位置在這一行 intcurstripcount combine mesh get strip combine submeshindex length 報錯說的是在unityengine.mesh這個類裡,既沒有get strip 這個方法的定義,也沒有相關的擴充套件方法。我是這樣思考的,這個方法...

關於部分Unity發布IOS報錯的解決辦法

近期前公司的一直在用unity開發只發布android的專案,現在想發布ios專案,遇到了一些問題在此分享以下。用unity做專案就免不了接入不少第三方外掛程式,有的時候只實現了安卓方面的功能。但是不少第三方外掛程式都是同時支援android與ios,甚至有些第三方外掛程式直接寫好了ios互動的ap...

幼兒初學程式設計會遇到哪些問題?有什麼解決辦法嗎?

近年來,家長程式設計客棧們紛紛認識到了讓孩子學程式設計的重要性和必要性,而一時間林林總總的輔導機構也迅速凸起,在各大商場都能看見程式設計輔導的實體店,可是,櫛比鱗次間也一定有魚龍混雜,良莠不齊的現象存在,看見如此炙熱的乙個大瓜可以分,免不了出現一些水平不行,濫竽充數的輔導機構,以其不專業,不正規的資...