| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- local EntityView = class("EntityView")
- local MultiTypeAssetLoadSystem = require("MultiTypeAssetLoadSystem")
- local GameObject = UnityEngine.GameObject
- --- 构造
- ---@param pos Vector3 初始坐标
- ---@param rot Vector3 初始方向
- function EntityView:ctor(uid, pos, rot)
- self.uid = uid
- self.pos = pos:Clone()
- self.rot = rot:Clone()
- self.isInWorld = false
- self.isCreated = false
- self.loadSystem = MultiTypeAssetLoadSystem:new()
- self.loadSystem:SetCompleteCB(self, self.PreloadedAssets)
- end
- --- 销毁
- function EntityView:Dispose()
- if self.isInWorld then self:ExitWorld() end
- if self.loadSystem then
- self.loadSystem:Dispose()
- self.loadSystem = nil
- end
- self.uid = nil
- self.pos = nil
- self.rot = nil
- self.isInWorld = nil
- self.isCreated = nil
- end
- function EntityView:EnterMap()
- self:CollectPreloadAssets()
- end
- function EntityView:ExitMap()
- self:ExitWorld()
- end
- --- 进入游戏世界
- function EntityView:EnterWorld()
- self.isInWorld = true
- self.isCreated = false
- self:CreateContainer()
- self:BeginLoadAssets()
- end
- --- 退出游戏世界
- function EntityView:ExitWorld()
- if self.loadSystem then
- self.loadSystem:Cancel()
- end
- self.avatarGo = nil
- self.avatarTrans = nil
- if self.gameObject then GameObject.Destroy(self.gameObject) end
- self.gameObject = nil
- self.transform = nil
- self.isInWorld = false
- self.isCreated = false
- end
- --- 更新
- function EntityView:Update(deltaTime)
- end
- --- 获得名字
- function EntityView:GetName()
- return self:getClassName()
- end
- --- 获得根节点
- function EntityView:GetParent()
- return nil
- end
- function EntityView:GetTransform()
- return self.transform
- end
- function EntityView:CreateContainer()
- -- 创建容器
- self.gameObject = GameObject(self:GetName())
- self.transform = self.gameObject.transform
- self.transform:SetParent(self:GetParent())
- self.transform:SetPositionAndRotation(self.pos, Quaternion.identity)
- -- 创建转向容器(模型需要转向,而UI则不需要转向)
- self.avatarGo = GameObject("Avatar")
- self.avatarTrans = self.avatarGo.transform
- self.avatarTrans:SetParent(self.transform)
- self.avatarTrans:SetPositionAndRotation(self.pos, self.rot)
- end
- function EntityView:CollectPreloadAssets()
- self.loadSystem:RemoveLoadAllAsset()
- end
- function EntityView:BeginLoadAssets()
- self.loadSystem:Begin()
- end
- --- 获得需要预加载的资源内容
- ---@return nil or table(Enum.ResourceType, table(string, int))
- function EntityView:StatisticsPreloadAssets(multiTypeAssetLoadSystem)
- if not multiTypeAssetLoadSystem then return end
- self.loadSystem:AddToLoadSystem(multiTypeAssetLoadSystem)
- end
- --- 预加载的资源已加载完成
- function EntityView:PreloadedAssets()
- if not self.isCreated then
- self.isCreated = true
- self:InitGenerateView()
- end
- self:OtherGenerateView()
- end
- function EntityView:InitGenerateView()
- end
- function EntityView:OtherGenerateView()
- end
- function EntityView:_SetLayer(trans, layer, enterChild)
- if not trans then return end
- trans.gameObject.layer = layer
- if not enterChild then return end
- for i = 0, trans.childCount - 1 do
- self:_SetLayer(trans:GetChild(i), layer, enterChild)
- end
- end
- function EntityView:_SetTag(trans, tag, enterChild)
- if not trans then return end
- trans.tag = tag
- if not enterChild then return end
- for i = 0, trans.childCount - 1 do
- self:_SetTag(trans:GetChild(i), tag, enterChild)
- end
- end
- function EntityView:_SetLayerAndTag(trans, layer, tag, enterChild)
- if not trans then return end
- trans.tag = tag
- trans.gameObject.layer = layer
- if not enterChild then return end
- for i = 0, trans.childCount - 1 do
- self:_SetLayerAndTag(trans:GetChild(i), layer, tag, enterChild)
- end
- end
- return EntityView
|