iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0

今天,我們將會做出像以下動畫的跑酷遊戲

完整動畫


1. 地圖建置

https://ithelp.ithome.com.tw/upload/images/20250819/20169664yJKVY2oHwQ.png

這應該沒什麼難度啦,Part拉一拉放一放,然後記得固定就好
https://ithelp.ithome.com.tw/upload/images/20250819/20169664xDHHPuWfVh.png


2. 死亡方塊腳本製作

接下來,在每一塊紅色霓虹材質的Part裡新增一個腳本
https://ithelp.ithome.com.tw/upload/images/20250819/20169664iYjphX4rDr.png

接下來,這項程式的邏輯會是當這個Part被碰到的時候,先判斷碰到的Part的父項目是否為玩家的角色,如果是的話則把玩家角色內的Humanoid屬性的Health (生命值)屬性設為0

首先,先定義好函式

function OnTouch()

end

接著在函式內放入一項參數,這項參數是碰到這個Part的物件

function OnTouch(Hit)

end

在函式內先定義好如何取得玩家的資訊,以便後續的判斷

function OnTouch(Hit)
    local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
end

上述所使用的函式為從玩家的角色模型取得完整的玩家資訊,以便後續判斷碰到的是否為玩家

接著就是判斷

function OnTouch(Hit)
    local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
    if Player == true then --我們在判斷式那章節有講過,這個== true可以省略
    
    end
end

然後再來取得玩家角色內的Humanoid屬性物件

function OnTouch(Hit)
    local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
    if Player then
        local Humanoid = Player.Character.Humanoid
    end
end

取得生命值屬性並設為0

function OnTouch(Hit)
    local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
    if Player then
        local Humanoid = Player.Character.Humanoid
        Humanoid.Health = 0
    end
end

最後在連接函式就完成了

function OnTouch(Hit)
    local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
    if Player then
        local Humanoid = Player.Character.Humanoid
        Humanoid.Health = 0
    end
end

script.Parent.Touched:Connect(OnTouch)

死亡方塊動畫

然後記得把這些程式碼貼到所有的死亡方塊裡面


2. 消失方塊製作

接下來我們可以直接拿剛剛寫好的死亡方塊來改

首先,先複製一份死亡方塊的腳本並貼到一個消失方塊裡面
https://ithelp.ithome.com.tw/upload/images/20250819/20169664W6qlzXyTqe.png

然後打開腳本,把剛剛將玩家的生命值設為0的指令刪掉

function OnTouch(Hit)
    local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
    if Player then
        
    end
end

script.Parent.Touched:Connect(OnTouch)

這項程式的邏輯為當此物件被碰到時,先判斷是否為玩家,若碰到的對象為玩家則等待0.5秒,然後將此物件的透明度設為1 (完全透明),並將可觸碰設為否,在等0.5秒後將上述步驟回復

首先,先使用task.wait指令讓程式等待0.5秒

function OnTouch(Hit)
    local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
    if Player then
        task.wait(0.5)
    end
end

script.Parent.Touched:Connect(OnTouch)

然後將物件的透明度設為1、可觸碰設為否

function OnTouch(Hit)
    local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
    if Player then
        task.wait(0.5)
		script.Parent.Transparency = 1
		script.Parent.CanCollide = false
    end
end

script.Parent.Touched:Connect(OnTouch)

接著再等待0.5秒,將上述步驟反過來做

function OnTouch(Hit)
	local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
	if Player then
		task.wait(0.5)
		script.Parent.Transparency = 1
		script.Parent.CanCollide = false
		task.wait(0.5)
		script.Parent.Transparency = 0
		script.Parent.CanCollide = true
	end
end

script.Parent.Touched:Connect(OnTouch)

最後的成果會像這樣

消失方塊動畫


我們在這次的賽程中會時不時出現像今天這種小小的應用單元,用來檢核自己在前面的單元是否都有學會,而我們在後續的應用單元2會繼續使用這項專案,還請各位寫完後不要刪掉。

好啦今天太嚴肅了講個好笑的,昨天我跟朋友在做遊戲的時候,我們就剩最後的部分了,而我的部分已經寫完了,剩下他的動畫,但我運行的時候就覺得很奇怪,明明看的時候動畫是正確位置的,但運行的時候它的位置就是往下移了三格,我就一直找我的程式裡面有沒有動到動畫,但都沒有找到,結果在最後是我那個白癡朋友沒有把那的動畫的角色固定 XP
註: 他是做建模的


上一篇
Day 7: 字典與取得陣列內部子項目
下一篇
Day 9: Enum的用法與玩家攝影機的各項設定
系列文
透過Roblox Studio學習Lua語言與基本程式邏輯21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言