跳转到内容

可互动物品提示

可互动物品提示

local startPos, endPos--射线检测起点与终点
local InteractButton = 100078--互动按钮
local InformationBar = 100080--互动物品介绍控件
local _DetectedElement = 0--检测到的元件
local GuideInstanceID = 304--一个指引元件做的互动提示
--可互动物品数组
local ItemArray = {
[1]={
Name = "台灯",ID = 302,Inf = "这是一盏台灯。"
},
[2]={
Name = "盒子",ID = 303,Inf = "一个神秘的盒子。"
},
[3]={
Name = "书桌",ID = 313,Inf = "整洁的桌子。"
}
}
local InteractItem--互动物品
function GameClient:OnStart()
--可互动物品提示
TimerManager:AddLoopTimer(0.1, function ()
local startPos = Character:GetPosition(curPlayerId)--设置射线检测起点
local endPos = startPos + Character:GetForward(curPlayerId) * 500--设置射线检测终点
_DetectedElement = PlayInteractive:GetHitElementWithRaycast(startPos, endPos)--射线检测玩家前方5米内的元件
local IsInteractElement = false--是否检测到互动物品
for _, value in ipairs(ItemArray) do--遍历可互动物品数组
if _DetectedElement == value.ID then--判断是否是可互动物品
IsInteractElement = true--是可互动物品
InteractItem = value--设置可互动物品信息
end
end
if IsInteractElement then
Guide:SetGuideVisible(GuideInstanceID,true)--显示指引器
Guide:SetGuideLabelText(GuideInstanceID,InteractItem.Name)--设置指引器文字为物品名
Element:SetPosition(GuideInstanceID, Element:GetPosition(_DetectedElement) + Engine.Vector(0,0,200), Element.COORDINATE.World)--设置指引器位置
UI:SetVisible({InteractButton},true)--显示互动按钮
UI:SetText({InformationBar},InteractItem.Inf)--设置信息栏文字
else
Guide:SetGuideVisible(GuideInstanceID,false)--隐藏指引器
UI:SetVisible({InteractButton},false)--隐藏互动按钮
UI:SetVisible({InformationBar},false)--隐藏信息栏
end
end)
--注册按钮
UI:RegisterPressed(InteractButton,function(Iteam,PosX,PosY)
UI:SetVisible({InformationBar},true)
end)
end