Unity關於飛行效果的小思路(上)

2021-09-25 07:12:34 字數 2100 閱讀 7295

最近在處理飛行效果的需求,類似【完美世界】裡的飛行(五連跳?),起初是自己琢磨其中每一段飛行的軌跡並分解成不同數學模型,實現了直線勻變速、二階貝塞爾曲線、拋物線軌跡效果,其**如下:

一、直線勻變速(我就不整合向上向下了,亦或者歸結為90度的斜拋物運動軌跡)

// startpos 起始位置

// curshowpoint 當前位置

// startdir 起始朝向

// 當前朝向

// dt 該段軌跡開始到當前的時間

private vector3 getshowposbylineup(vector3 startpos, vector3 curshowpoint, float startdir, float curdir, float dt)

if (startspeed == -99999)// 直線向上運動

curspeed = startspeed - accspeed * dt;

float d = startspeed * dt - accspeed * dt * dt / 2;

float rate = d / slen;

float rotangle = (float)((curdir - startdir) * math.pi / 180);

vector3 vec = quaternion.angleaxis(rotangle, new vector3(curshowpoint.x, startpos.y, curshowpoint.z)) * startpos;

rotangle = (float)(curdir * math.pi / 180);

float posx = vec.x + distance * rate * mathf.cos(rotangle);

float posy = startpos.y + height * rate;

float posz = vec.z + distance * rate * mathf.sin(rotangle);

return new vector3(posx, posy, posz);

}二、二階貝塞爾曲線

private vector3 getshowposbybezier(vector3 startpos, vector3 curshowpoint, float startdir, float curdir, float dt)

return calculatecubicbezierpoint(dt, v0, v1, v2);

}public vector3 calculatecubicbezierpoint(float t, vector3 p0, vector3 p1, vector3 p2)

三、拋物線

private vector3 getshowposbyparacurve(vector3 startpos, vector3 curshowpoint, float startdir, float curdir, float dt)

curspeed = startspeed;

float d = startspeed * dt * mathf.cos(paracurveangle);

float h = startspeed * dt * mathf.sin(paracurveangle) - (accspeed * dt * dt) / 2;

float rotangle = (float)(curdir * math.pi / 180);

float posx = startpos.x + d * mathf.cos(rotangle);

float posy = startpos.y + h;

float posz = startpos.z + d * mathf.sin(rotangle);

return new vector3(posx, posy, posz);

}上面三種是強行用用數學模型計算飛行軌跡,效率未知,但對於需求千變萬化不太適應,所以一直查詢其它方式實現。起初想結合itween,後來發現animationcurve更適合,會在後續貼出;

(非常抱歉我的數學爛,該處的旋轉是存在問題的,不是居於當前玩家位置的xz和初試位置的y構成的點進行旋轉的,所以最終飛行過程中轉向效果不對,因為暫時有更緊急的事要處理暫時放這,希望有大神幫忙解決下)

隨筆 關於飛機維修檢測 想到的

學習目的 飛機每日的正常執行保證了幾百條生命的安全,可能是最嚴謹的維修檢修專案,通過學習飛機維修管理,提公升軟體測試維護的能力。學到的 飛機地勤檢修所有都是按照手冊操作進行排查,檢查各類天線探頭有無缺損,減少漏檢,等人為的影響 每架飛機的檢查流程專案最多達百項,機頭,機翼到機尾,從貨艙,到駕駛艙,逐...

Unity 關於如何實現動態天空盒效果

最開始做這個的時候再網上查了很多資料,幾乎推薦的都是unisky,unistorm這些外掛程式。不過不得不說這倆外掛程式的效果是真的不錯,大家有時間可以研究一下。但是這種不免有一些浪費資源。其實unity是很人性化的,早就預知到了我們這些需求 在內建的shader,skybox和cubemap這些s...

關於飛思卡爾xs128的IO埠

埠 a,b和k為通用i o介面 埠 e 整合了irq,xirq中斷輸入 埠 t 整合了1個定時模組 埠 s 整合了2個sci模組和1個spi模組 埠 m 整合了1個mscan 埠 p 整合了 pwm 模組,同時可用作外部中斷源輸入 埠 h 和 j 為通用i o介面,同時可用作外部中斷源輸入 埠 ad...