數學習作還沒寫完.....
時間 2024/9/23 下午7:51
地點 我房間
今天回到第一張地圖修改了一些Bug,其中有關於移動物件以及旋轉物件的指令。
首先,這是目前遇到的Bug
我有使用到移動動畫,但因為整體物件已經整個跑位了,所以要把他們全部歸位,那其實也非常簡單,我們只需要使用到幾行簡單的指令就可以搞定
local Remote = game:GetService("ReplicatedStorage"):WaitForChild("PlayerTriggered")
script.Parent.Triggered:Connect(function(player)
workspace:WaitForChild("TofyJS"):PivotTo(CFrame.new(-427.303, 4.27, 268.23)*CFrame.Angles(0, math.rad(90), 0))
script.Parent.Enabled = false
Remote:FireClient(player)
end)
此程式碼包含了許多指令,當然今天沒有要討論這麼多。
我們今天著重在這一行
workspace:WaitForChild("TofyJS"):PivotTo(CFrame.new(-427.303, 4.27, 268.23)*CFrame.Angles(0, math.rad(90), 0))
這一行控制了這個模型的位置Position,正常情況下一個移動一個Part只需要調整他的CFrame就可以了,但因為上面的這個對象是一個Model,也就是由許多模型組成的群組,我們無法改變這個模型的CFrame,所以這個時候就需要使用一個叫做":PivotTo()"的指令,這個指令的作用為改變此模型的中心物件的CFrame,當然這之前有一個大前提,模型的中心物件必須要錨定(意思就是不受重力影響,會一直在固定的方位,除非我們使用指令改變),而中心物件以外的物件必須要關閉錨定。
接下來將會介紹各種可以改變物體方位的指令
CFrame "coordinate frame"的縮寫,一種在Roblox中表示座標的型態(處裡在Roblox中3D資料的基本運算,可改變物體的位置Positional、旋轉角度Rotational)
--CFrame是一個很複雜的指令,他有許多簡單以及複雜的功能,今天不會講那麼多,有興趣的話來看看API吧:
https://create.roblox.com/docs/workspace/cframes
CFrame.new(數值, Vector3) 定義一個新的CFrame變數(new後面的括號可以放入數值X, Y, Z,也可放入Vector3數值)
CFrame.LookAt(位置(Vector3), 看的方向(Vector3), 位置上方(Vector3)) 定義一個新的CFrame變數,與new不同的是,這邊可以定義出物體要看的方向,以及物體上方的方位(通常不會用到第三個,因為基本上有前面兩個數值就已經足夠達到我們要求的方位了)
CFrame.Angles() 定義一個新的CFrame變數,此變數改變的是物體的旋轉角度(Angles裡面放的數值是X, Y, Z的旋轉角度,API裡面寫的rx, ry, rz就是旋轉角度的意思)
Vector3 Roblox中的另一種表示座標的型態(超級複雜,把他想成是可以做複雜運算的CFrame就好了,平常做遊戲不會用到太多的運算,除非你的物體移動需要使用到,另外我說的複雜運算就類似於加減乘除這類的都可以做到)
--想了解更多關於Vector3的來看看API(雖然我自己看不懂就是了)
https://create.roblox.com/docs/reference/engine/datatypes/Vector3
基本上我們會使用到的指令就只有這些,當然也會有其他更複雜的改變方位的方式,但真的不常用到
如果你有實際使用過CFrame或Vector3的話,你一定會遇到一個問題,那就是要如何讓物體平滑的移動呢? 剛才說到,CFrame與Vector3都是用來"移動"一個物體的,代表他們的工作只負責把物體從A點拿到B點(或拿到其他點之類的),他們並沒有讓物體順順的從A點滑到B點的功能,而這就是我的下一篇日誌要寫的內容了。(也是我在上面的Bug那一小段指令的下面的內容,也就是移動動畫)
然後關於為什麼這篇日誌晚了一天才出,主要是因為我跑去寫數學習作然後寫到睡著了(溝咩捏🙏)
以上就是今日(才寫完)的日誌。