110 lines
3.4 KiB
Lua
110 lines
3.4 KiB
Lua
---@class BP_BaseMultiCube_C:AActor
|
|
---@field P_BoxDeadFX UParticleSystemComponent
|
|
---@field Cube UStaticMeshComponent
|
|
---@field jiantou02 UStaticMeshComponent
|
|
---@field Box UBoxComponent
|
|
---@field StaticMesh UStaticMeshComponent
|
|
---@field DefaultSceneRoot USceneComponent
|
|
---@field EnableLaunch bool
|
|
---@field LaunchZSpeed float
|
|
---@field EnableDisappear bool
|
|
---@field DelayDisappearTime float
|
|
---@field DisappearResetTime float
|
|
---@field Sound UAkAudioEvent
|
|
--Edit Below--
|
|
local BP_BaseMultiCube = {
|
|
IsHiding = false
|
|
};
|
|
|
|
|
|
function BP_BaseMultiCube:ReceiveBeginPlay()
|
|
self.SuperClass.ReceiveBeginPlay(self);
|
|
if UGCGameSystem.IsServer() then
|
|
UGCSystemLibrary.BindBeginOverlapFunc(self.Box, self.OverlapPlayer, self)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
function BP_BaseMultiCube:OverlapPlayer(OverlappedComp, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult)
|
|
if self.IsHiding then return end
|
|
|
|
-- Launch
|
|
if self.EnableLaunch and UE.IsValid(OtherActor) and OtherActor:IsAlive() then
|
|
local PlayerCharacter = OtherActor
|
|
--考虑角色跳起来的情况
|
|
if PlayerCharacter.CharacterMovement.Velocity.Z < 0 then
|
|
local AddSpeed = Vector.New(0, 0, self.LaunchZSpeed - PlayerCharacter.CharacterMovement.Velocity.Z)
|
|
OtherActor.CharacterMovement:AddImpulse(AddSpeed, true)
|
|
elseif PlayerCharacter.CharacterMovement.Velocity.Z == 0 then
|
|
OtherActor.CharacterMovement:AddImpulse({X = 0, Y = 0, Z = self.LaunchZSpeed}, true)
|
|
end
|
|
end
|
|
|
|
-- Disappear
|
|
if self.EnableDisappear then
|
|
UGCEventSystem.SetTimer(self, function()
|
|
self.StaticMesh:SetCollisionEnabled(ECollisionEnabled.NoCollision)
|
|
self.Cube:SetCollisionEnabled(ECollisionEnabled.NoCollision)
|
|
end, self.DelayDisappearTime)
|
|
UGCEventSystem.SetTimer(self, self.ResetCube, self.DelayDisappearTime + self.DisappearResetTime)
|
|
self.IsHiding = true
|
|
end
|
|
UGCSendRPCSystem.ActorRPCNotify(nil, self, "ClientEffect")
|
|
end
|
|
|
|
function BP_BaseMultiCube:ResetCube()
|
|
-- 开启碰撞
|
|
self.StaticMesh:SetCollisionEnabled(ECollisionEnabled.QueryAndPhysics)
|
|
self.Cube:SetCollisionEnabled(ECollisionEnabled.QueryAndPhysics)
|
|
if UGCGameSystem.IsServer() then
|
|
-- 服务器发送RPC
|
|
UGCSendRPCSystem.ActorRPCNotify(nil, self, "ResetCube")
|
|
self.IsHiding = false
|
|
else
|
|
-- 显示网格
|
|
self.StaticMesh:SetHiddenInGame(false, true)
|
|
end
|
|
end
|
|
|
|
function BP_BaseMultiCube:ClientEffect()
|
|
if self.EnableDisappear then
|
|
-- 延迟一小段时间关闭碰撞
|
|
UGCEventSystem.SetTimer(self, function()
|
|
self.StaticMesh:SetCollisionEnabled(ECollisionEnabled.NoCollision)
|
|
self.Cube:SetCollisionEnabled(ECollisionEnabled.NoCollision)
|
|
end, self.DelayDisappearTime)
|
|
-- 隐藏网格
|
|
self.StaticMesh:SetHiddenInGame(true, true)
|
|
end
|
|
-- 播放音效
|
|
UGCSoundManagerSystem.PlaySoundAtLocation(self.Sound, self:K2_GetActorLocation(), VectorHelper.RotZero())
|
|
-- 播放粒子
|
|
self.P_BoxDeadFX:SetActive(true, true)
|
|
end
|
|
|
|
--[[
|
|
function BP_BaseMultiCube:ReceiveTick(DeltaTime)
|
|
self.SuperClass.ReceiveTick(self, DeltaTime);
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_BaseMultiCube:ReceiveEndPlay()
|
|
self.SuperClass.ReceiveEndPlay(self);
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_BaseMultiCube:GetReplicatedProperties()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_BaseMultiCube:GetAvailableServerRPCs()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
return BP_BaseMultiCube; |