local MonthlyCardModelCtrl = class("MonthlyCardModelCtrl", BaseCtrl) local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader") local ResType = GameResourceLoader.ResType local Camera = CS.UnityEngine.Camera local Light = CS.UnityEngine.Light local Animator = CS.UnityEngine.Animator local ClientManager = CS.ClientManager local CustomModelMaterialVariantComponent = CS.CustomModelMaterialVariantComponent local typeof = typeof MonthlyCardModelCtrl._mapNodeConfig = { trParent = {sComponentName = "Transform"}, rimgModel = {sComponentName = "RawImage"} } MonthlyCardModelCtrl._mapEventConfig = {} function MonthlyCardModelCtrl:ShowRawImage() self.sModelPath = "UI/MonthlyCard/Model/MonthlyCardBox01.prefab" if not self.mActive then return end local obj = self:LoadAsset(self.sModelPath, typeof(GameObject)) self:showModel(obj) end function MonthlyCardModelCtrl:PlayOpenAnim() if self.animator ~= nil then self.animator:SetTrigger("tOpen") end end function MonthlyCardModelCtrl:buildData() local layerName = "Cam_Layer_1" local layerIndex = NovaAPI.LayerMaskName2Layer(layerName) local layerMask = NovaAPI.LayerMaskGetMask(layerName) local windowResolution = ClientManager.Instance.currentWindowResolution local texSize = windowResolution.x local imgSize = 2160 local go = self:CreatePrefabInstance("UI/MonthlyCard/MonthlyCardModel.prefab", self._mapNode.trParent) go.transform.position = Vector3(0, 0, 0) go.transform:SetLayerRecursively(layerIndex) self.m3DData.gameObject = go self.m3DData.camera = go.transform:Find("Camera"):GetComponent(typeof(Camera)) self.m3DData.camera.cullingMask = layerMask self.m3DData.camera:SetCameraVolumeLayerMask(layerMask) local n = math.floor(texSize * Settings.RENDERTEXTURE_SIZE_FACTOR) self.m3DData.cameraRT = GameUIUtils.GenerateRenderTextureFor3D(n, n) self.m3DData.camera.targetTexture = self.m3DData.cameraRT self.m3DData.light = go.transform:Find("Light"):GetComponent(typeof(Light)) self.m3DData.light.cullingMask = layerMask self.m3DData.node = go.transform:Find("SpawnPosition") self.m3DData.box = nil NovaAPI.SetTexture(self._mapNode.rimgModel, self.m3DData.cameraRT) self._mapNode.rimgModel:GetComponent(typeof(RectTransform)).sizeDelta = Vector2(imgSize, imgSize) end function MonthlyCardModelCtrl:showModel(modelPrefab) self.m3DData.gameObject.transform.position = Vector3(0, 0, 0) self.m3DData.box = instantiate(modelPrefab, self.m3DData.node) self.m3DData.weaponPath = self.sModelPath self.animator = self.m3DData.box:GetComponent(typeof(Animator)) local matVariantComp = self.m3DData.box:GetComponent(typeof(CustomModelMaterialVariantComponent)) if matVariantComp ~= nil then matVariantComp:SetVariant(CS.CustomModelMaterialVariantComponent.VariantNames.WeaponModelView) end local layerName = "Cam_Layer_1" local layerIndex = NovaAPI.LayerMaskName2Layer(layerName) local layerMask = NovaAPI.LayerMaskGetMask(layerName) self.m3DData.gameObject.transform:SetLayerRecursively(layerIndex) self.m3DData.camera.cullingMask = layerMask self.m3DData.camera:SetCameraVolumeLayerMask(layerMask) self.m3DData.light.cullingMask = layerMask end function MonthlyCardModelCtrl:Awake() self.mActive = true self.m3DData = {} self:buildData() end function MonthlyCardModelCtrl:OnEnable() self.mActive = true end function MonthlyCardModelCtrl:OnDisable() if self.m3DData.box ~= nil then destroy(self.m3DData.box) self.m3DData.box = nil end self.mActive = false end function MonthlyCardModelCtrl:OnDestroy() if self.m3DData.box ~= nil then destroy(self.m3DData.box) self.m3DData.box = nil end if self.m3DData.cameraRT ~= nil then self.m3DData.camera.targetTexture = nil GameUIUtils.ReleaseRenderTexture(self.m3DData.cameraRT) self.m3DData.cameraRT = nil end if self.m3DData.gameObject ~= nil then destroy(self.m3DData.gameObject) self.m3DData.gameObject = nil end self.m3DData = {} end return MonthlyCardModelCtrl