funkytree的使用(簡單飛機(jī)復(fù)雜的代碼怎么寫)
在游玩簡單飛機(jī)的時(shí)候,
大多數(shù)同學(xué)肯定想過,
有沒有什么辦法,可以在可操作部件上實(shí)現(xiàn)多種不同的復(fù)雜的指令和操作。
舉些例子
====在一個(gè)轉(zhuǎn)軸上,可接受不同的指令,比如既可roll又可pitch,
===比如輪子的只能在空中的條件下收回,地面不允許收回
==延遲啟動(dòng)艙門,延遲關(guān)閉艙門
=飛機(jī)的飛控
等等等等。。。。。。
funky tree 這種工具,或者書寫的規(guī)則,可以幫助玩家實(shí)現(xiàn)很多復(fù)雜的操作,來完成我們不同情況的需求
那么應(yīng)該如何了解?
我們先在百度搜索funkytree,找到這個(gè)帖子,里面是關(guān)于funkytree的代碼名詞解釋和代碼工具的使用方法(應(yīng)該是,好久沒看了)

不過一開始最重要的,是如何書寫這些代碼?,以實(shí)現(xiàn)我們想做出來的復(fù)雜功能。
先從最簡單的說起
一個(gè)轉(zhuǎn)軸上同時(shí)可以roll和pitch
如下圖所示,打開簡飛,選中部件,打開從右到左第三個(gè)圖標(biāo),(記得激活兩個(gè)mod,在游戲進(jìn)入界面的mods可以找到,分別是overload和fineturner,并激活,否則找不到這個(gè)圖標(biāo)喔)
頂部換到InputController欄,并找到input選項(xiàng),里面輸入Pitch+Roll??(注意大小寫,?加號(hào)這樣的符號(hào)也分中文和英文的版本,是英文版本,不要寫錯(cuò)了)。

你就可以看到這個(gè)轉(zhuǎn)軸同時(shí)實(shí)現(xiàn)了Pitch和Roll兩個(gè)操作

直接乘以-1或者減法就行,
比如Pitch*-1+Roll或者Pitch-Roll
可以看到,要實(shí)現(xiàn)這樣的操作很簡單,就是直接使用名詞加減乘除就行
其實(shí)我們可以看到,就是簡單的加減乘除而已,如果還要加上yaw軸就直接輸入+Yaw就行了
funkytree的書寫就是用加減乘除和括號(hào)把這些名次和代碼工具組成的工具像積木一樣把它們拼接在一起
再對這些常用的部件如何運(yùn)作的原理做一些解釋
其實(shí)我們使用操作的時(shí)候,比如轉(zhuǎn)軸里的Pitch上下,其實(shí)就是從1到-1過程,你不動(dòng)它,就是0,它門是跟著數(shù)字的大小改變的
如果我們把Pitch乘以2,也就是Pitch*2,就會(huì)發(fā)現(xiàn)其動(dòng)作的幅度也變成了之前的兩倍,
又或者不輸入Pitch*2,就只在轉(zhuǎn)軸里輸入個(gè)1,你就會(huì)發(fā)現(xiàn)轉(zhuǎn)軸就一直固定在一個(gè)位置,這就是1的位置,也就是正常拉到頂的位置,你輸入-1就會(huì)發(fā)現(xiàn)轉(zhuǎn)軸固定在剛才相反的位置了)
其他很多操作也是從一到負(fù)一的過程,
我們在操作飛機(jī)的時(shí)候下面不是有12345678那些按鈕嗎,你按下這些按鈕,它所表達(dá)的數(shù)據(jù)就會(huì)一瞬間從-1變成1(當(dāng)然按鈕8是相反的)。什么TRIM?VTOL也是從1到-1的過程
接下來我就直接介紹比較常用的幾個(gè)代碼工具了,前面的東西我相信摸索一會(huì)兒都能懂
代碼工具如下? ? 代碼工具不需要大寫,小寫就可以
1 限制代碼
clamp(里面填東西)
用途是限制大小,比如尾翼轉(zhuǎn)軸里面輸入Pitch+Roll,我們可以發(fā)現(xiàn)當(dāng)Pitch和Roll都是-1的時(shí)候,這個(gè)代碼兩個(gè)相加就是-2了,這架飛機(jī)的尾翼如果轉(zhuǎn)的角度就會(huì)翻一倍,這么大的角度可能尾翼就直接碰到地面了,所以需要對尾翼進(jìn)行限制到只能動(dòng)作1的幅度,這時(shí)候就可以用到clamp這個(gè)工具↓↓↓↓↓↓↓↓↓↓
clamp(Pitch+Roll,-1,1)? ? ??
括號(hào)里分別是?(你想要的動(dòng)作,逗號(hào)1表示分割,-1表示最小多少,逗號(hào)2表示分割,1表示最大多少)
2 判斷代碼
clamp01(里面填東西)
用途是判斷數(shù)據(jù),這個(gè)代碼在符合條件時(shí)輸出1,不符合條件時(shí)輸出0,比如判斷速度大于10m/s就關(guān)閉座艙蓋? ?↓↓↓↓↓↓↓↓↓↓
clamp01(TAS>10)
注意大于等于之類的這樣書寫>=,比如clamp01(TAS>=10)
3 調(diào)速代碼
smooth(這里填要填的東西,填數(shù)字即速度的大小)
在一些場景是需要部件緩慢運(yùn)行的,比如按下數(shù)字1這個(gè)按鈕,它會(huì)一瞬間從-1變成1,這個(gè)變化太急促了,需要對它進(jìn)行降速,就可以寫↓↓↓↓↓↓↓↓↓↓
smooth(Activate1,0.5)
逗號(hào)代表隔斷,0.5代表速度
4自動(dòng)控制(PID)注意PID三個(gè)字母是需要大寫的
PID(目標(biāo)值,當(dāng)前值,P比例,I積分,D微分)
PID自動(dòng)控制是一種可以精細(xì)控制的算法,剛接觸的同學(xué)可能不清楚它需要使用的場景,
比如我要設(shè)置一個(gè)懸停的火箭,這個(gè)火箭想要停留在10米的高度
是不是就必須不斷精細(xì)的控制推力的大小?
所以就可以用PID算法,它會(huì)自動(dòng)根據(jù)當(dāng)前值追趕目標(biāo)值,
不過不同的場景所需要調(diào)整的幅度都是不同的,所以后面三個(gè)值P比例,I積分,D微分,就是用來調(diào)節(jié)的參數(shù)(根據(jù)我自己的經(jīng)驗(yàn),一般只需要調(diào)節(jié)P比例和D微分兩個(gè)就行了,I積分就不用管了,具體怎么調(diào)節(jié)各位同學(xué)自己找資料學(xué)習(xí)吧,up就懶得學(xué)了,我直接用trim和vtol根據(jù)手感進(jìn)行調(diào)節(jié))P比例,I積分,D微分,怎么寫如下↓↓↓↓↓↓↓↓↓↓
PID(10,AltitudeAgl,0.1,0,0.1)
上面這些就是最主要的funkytree代碼工具,基本可以覆蓋百分之八十五的使用場景,學(xué)會(huì)使用這寫代碼工具,其他肯定也看得懂學(xué)得會(huì)
最后解釋下延遲代碼的原理
延遲啟動(dòng)的原理就是利用↓↓↓↓↓↓↓↓↓↓這倆代碼工具
smooth()調(diào)速代碼?
clamp01() 判斷代碼
首先
按下起落架按鈕的時(shí)候
其代碼的值是不是瞬間從1變成了0?(有點(diǎn)忘了起落架是不是從0到1了,先這樣寫了)
這個(gè)時(shí)候我們先使用smooth()調(diào)速代碼,將其減速
舉個(gè)形象的例子,一個(gè)球從桌子左邊緩慢移動(dòng)到右邊(因?yàn)檎{(diào)速的原因,本來是瞬移到右邊的,現(xiàn)在變成緩慢移動(dòng)了)
然后我們這時(shí)候clamp01() 判斷代碼就起作用了
設(shè)置它判斷除非球在最右邊,否則不輸出1,輸出0
因?yàn)?span id="s0sssss00s" class="color-pink-03 font-size-20">球是緩慢到右邊的,而判斷條件是球在最右邊時(shí)才輸出1,所以“延遲啟動(dòng)”
延遲關(guān)閉則相反,
還是一樣的情況,
但是變成了判斷只要球往右邊移動(dòng)一點(diǎn)點(diǎn),就輸出1,
在最左邊才輸出0,
這就變成了,部件一按即啟動(dòng),
但是關(guān)閉,因?yàn)樾枰@個(gè)“球”需要緩慢移動(dòng)到最左邊,所以就“延遲關(guān)閉”了
另外由于up主本人并沒有系統(tǒng)學(xué)習(xí)過funkytree,以上均為up自己摸索得出的經(jīng)驗(yàn),不一定就是對的,大家自行參考