PGRData/Script/matrix/xhome/XSceneObject.lua
2024-09-01 22:49:41 +02:00

100 lines
No EOL
2.6 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---@class XSceneObject 场景基类对象
---@field GameObject UnityEngine.GameObject
---@field Transform UnityEngine.Transform
---@field Resource XIResource
---@field ModelPath string
local XSceneObject = XClass(nil, "XSceneObject")
function XSceneObject:Ctor()
--
end
function XSceneObject:Dispose()
XSceneEntityManager.RemoveEntity(self.GameObject)
if self.GameObject and self.GameObject:Exist() then
CS.UnityEngine.GameObject.Destroy(self.GameObject)
self.GameObject = nil
self.Transform = nil
end
if self.Resource then
self.Resource:Release()
self.Resource = nil
end
self.ModelPath = nil
end
function XSceneObject:SetModel(go, loadtype)
self.GameObject = go
self.Transform = go.transform
XSceneEntityManager.AddEntity(self.GameObject, self)
self:OnLoadComplete(loadtype)
end
--同步加载
function XSceneObject:LoadModel(modelPath, root)
if string.IsNilOrEmpty(modelPath) then
XLog.Error("宿舍模型加载失败Url为空")
return
end
self.ModelPath = modelPath
if not self:CheckBeforeLoad() then
return
end
local resource = CS.XResourceManager.Load(modelPath)
if resource == nil or not resource.Asset then
XLog.Error(string.format("加载宿舍SceneObject:%s失败", modelPath))
return
end
self.Resource = resource
local model = CS.UnityEngine.Object.Instantiate(resource.Asset)
self:BindToRoot(model, root)
self:SetModel(model)
end
--异步加载
function XSceneObject:LoadModelAsync(modelPath, root)
if string.IsNilOrEmpty(modelPath) then
XLog.Error("宿舍模型加载失败Url为空")
return
end
self.ModelPath = modelPath
if not self:CheckBeforeLoad() then
return
end
local resource = CS.XResourceManager.LoadAsync(modelPath)
CS.XTool.WaitCoroutine(resource, function()
if resource == nil or not resource.Asset then
XLog.Error(string.format("加载宿舍SceneObject:%s失败", modelPath))
return
end
self.Resource = resource
local model = CS.UnityEngine.Object.Instantiate(resource.Asset)
self:BindToRoot(model, root)
self:SetModel(model)
end)
end
function XSceneObject:BindToRoot(model, root)
model.transform:SetParent(root)
model.transform.localPosition = CS.UnityEngine.Vector3.zero
model.transform.localEulerAngles = CS.UnityEngine.Vector3.zero
model.transform.localScale = CS.UnityEngine.Vector3.one
end
function XSceneObject:CheckBeforeLoad()
return true
end
function XSceneObject:OnLoadComplete()
-- body
end
return XSceneObject