|
--ui挂接模型处理, 单一模型展示,比如只显示武器,不显示人物模型
|
|
UIPartModelClass = UIPartModelClass or BaseClass()
|
|
local UIPartModelClass = UIPartModelClass
|
|
--当前正在使用的rendertexture列表
|
|
function UIPartModelClass:__init(go, parent, res_id, texture_id, modelPartPos,type,raycastParent,texture_size,model_scale)
|
|
self.gameObject = go
|
|
self.parent = parent
|
|
self.particle_list = {}
|
|
self.pos_x = 0
|
|
self.curr_index = UIModelClassByRT.GetRenderTextureIndex()
|
|
self.gameObject.transform.position = Vector3(self.curr_index * 100,0,0)
|
|
self.raycastParent = raycastParent
|
|
|
|
self:SetData(parent, res_id, texture_id, modelPartPos, type,texture_size,model_scale)
|
|
self:AddEvents()
|
|
end
|
|
|
|
function UIPartModelClass:__delete()
|
|
UIModelClassByRT.using_render_texture_list[self.curr_index] = nil
|
|
if self.clothe then
|
|
self.clothe:DeleteMe()
|
|
self.clothe = nil
|
|
end
|
|
destroy(self.gameObject)
|
|
if self.raycastGo then
|
|
destroy(self.raycastGo)
|
|
end
|
|
if self.rt then
|
|
self.rt:Release()
|
|
destroy(self.rt)
|
|
self.rt = nil
|
|
end
|
|
end
|
|
|
|
--UIPartModelConfig 模型位置,大小等的配置,由策划自己去调整
|
|
function UIPartModelClass:SetData(parent, res_id, texture_id, modelPartPos, role_type, texture_size,model_scale)
|
|
local cfg = UIPartModelConfig[res_id]
|
|
local size = nil
|
|
local rotate = nil
|
|
local can_rotate = nil
|
|
local position = nil
|
|
local scale = nil
|
|
if cfg then
|
|
size = cfg.size
|
|
rotate = cfg.rotate
|
|
can_rotate = cfg.can_rotate
|
|
position = cfg.position
|
|
scale = cfg.scale
|
|
end
|
|
|
|
self.res_id = res_id
|
|
self.texture_id = texture_id
|
|
self.type = role_type or nil
|
|
self.size = texture_size or size or Vector2(600,360)
|
|
self.rotate = 0
|
|
self.can_rotate = can_rotate == nil or can_rotate == true
|
|
self.scale = model_scale or scale
|
|
self.position = position
|
|
self.camera = self.gameObject.transform:Find("Camera"):GetComponent("Camera")
|
|
local role_con = self.gameObject.transform:Find("role")
|
|
role_con.localPosition = Vector3(0, 0, 500)
|
|
local anName = ModelPartName[role_type] .. res_id
|
|
local resName = ModelPartName[role_type] .. res_id
|
|
if modelPartPos == FashionPartPos.Weapon then
|
|
anName = "model_wepon_" .. res_id
|
|
resName = ModelPartName[role_type] .. res_id
|
|
|
|
else
|
|
|
|
end
|
|
local function loadRoleCallback(objs)
|
|
if self._use_delete_method then
|
|
return
|
|
end
|
|
if not objs or not objs[0] then
|
|
return
|
|
end
|
|
if self.role then
|
|
destroy(self.role)
|
|
end
|
|
self.role = newObject(objs[0])
|
|
|
|
local custom_speed = Config.ConfigModelSpeed.ModelActionSpeed[tonumber(res_id)]
|
|
if custom_speed then
|
|
local animator = self.role:GetComponent("Animator")
|
|
if animator then
|
|
animator.speed = custom_speed
|
|
end
|
|
end
|
|
|
|
self.role:GetComponent("Animator").cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
|
|
self.role.transform:SetParent(role_con)
|
|
self.role.transform.localRotation = Quaternion.identity
|
|
if position then
|
|
-- self.role.transform.localPosition = position
|
|
SetLocalPosition(self.role.transform, position.x, position.y, position.z)
|
|
else
|
|
SetLocalPosition(self.role.transform, 0)
|
|
-- self.role.transform.localPosition = Vector3(0,0,0)
|
|
end
|
|
if self.scale then
|
|
self.role.transform.localScale = Vector3(self.scale,self.scale,self.scale)
|
|
else
|
|
self.role.transform.localScale = Vector3(100,100,100)
|
|
end
|
|
local rotate_type = type(rotate)
|
|
if rotate_type == "number" then
|
|
self.role.transform:Rotate(Vector3(0, 180 + (rotate), 0))
|
|
self.rotate = rotate
|
|
elseif rotate_type == "table" then
|
|
self.role.transform:Rotate(rotate)
|
|
self.rotate = rotate.y
|
|
else
|
|
self.role.transform:Rotate(Vector3(0, 180, 0))
|
|
self.rotate = 0
|
|
end
|
|
-- self.role.transform:Rotate(Vector3(0, 180 + (self.rotate), 0))
|
|
local animator = self.role:GetComponent("Animator")
|
|
if animator then
|
|
animator:CrossFade( "idle2",0, 0.0 )
|
|
end
|
|
if texture_id then
|
|
self:CreateClothTexture(res_id, texture_id)
|
|
end
|
|
end
|
|
local renderSize = {x = 1500, y = 900}
|
|
self.rt = UnityEngine.RenderTexture.New(renderSize.x, renderSize.y, 24)
|
|
self.camera.targetTexture = self.rt
|
|
parent:GetComponent("RawImage").texture = self.rt
|
|
--size = size or Vector2(600,360)
|
|
parent.sizeDelta = Vector2(self.size.x, self.size.y)
|
|
LuaResManager:getInstance():loadPrefab(self,anName,resName, loadRoleCallback, true)
|
|
end
|
|
|
|
--贴图
|
|
function UIPartModelClass:CreateClothTexture(fashion_model_id, texture_id)
|
|
self.fashion_model_id = fashion_model_id
|
|
self.texture_id = texture_id
|
|
if fashion_model_id and texture_id and tonumber(texture_id) ~= 0 and self.gameObject then --使用贴图
|
|
if self.clothe then
|
|
self.clothe:DeleteMe()
|
|
self.clothe = nil
|
|
end
|
|
local texture_res = fashion_model_id .. "_" .. texture_id
|
|
self.skin_mesh_renderer = self.gameObject:GetComponentInChildren(typeof(UnityEngine.SkinnedMeshRenderer))
|
|
if self.skin_mesh_renderer and self.skin_mesh_renderer.material and texture_res then
|
|
self.clothe = Clothe.New(self.skin_mesh_renderer.material,texture_res)
|
|
end
|
|
end
|
|
end
|
|
|
|
function UIPartModelClass:AddEvents()
|
|
if self.can_rotate then
|
|
local function touch_begin(target,pos_x, pos_y)
|
|
self.pos_x = pos_x
|
|
end
|
|
local function draging(target,pos_x, pos_y)
|
|
self:OnDragging(pos_x, pos_y)
|
|
end
|
|
local function touch_end(target,pos_x, pos_y)
|
|
end
|
|
local rtGo = self.parent.gameObject
|
|
-- AddDownEvent(self.parent.gameObject, touch_begin)
|
|
if self.raycastParent then
|
|
self.parent:GetComponent("RawImage").raycastTarget = false
|
|
self.raycastGo = GameObject.New("raycast_"..self.parent.gameObject.name)
|
|
self.raycastGo.transform:SetParent(self.raycastParent.transform)
|
|
local eImage = self.raycastGo:AddComponent(typeof(LuaFramework.EmptyRaycast))
|
|
self.raycastGo.transform.position = self.parent.position
|
|
self.raycastGo.transform.sizeDelta = Vector2(self.size.x, self.size.y)
|
|
self.raycastGo.transform.localScale = Vector3.one
|
|
eImage.raycastTarget = true
|
|
if type(self.raycastParent) ~= "userdata" and self.raycastParent.use_background then
|
|
self.raycastGo.transform:SetSiblingIndex(1)
|
|
else
|
|
self.raycastGo.transform:SetSiblingIndex(0)
|
|
end
|
|
rtGo = self.raycastGo
|
|
else
|
|
self.parent:GetComponent("RawImage").raycastTarget = true
|
|
end
|
|
AddDragBeginEvent(rtGo, touch_begin)
|
|
AddDragEvent(rtGo, draging)
|
|
AddDragEndEvent(rtGo, touch_end)
|
|
-- AddUpEvent(self.parent.gameObject, touch_end)
|
|
else
|
|
self.parent:GetComponent("RawImage").raycastTarget = false
|
|
end
|
|
end
|
|
|
|
|
|
function UIPartModelClass:OnDragging(pos_x, pos_y)
|
|
if pos_x and self.pos_x then
|
|
local delta_x = pos_x - self.pos_x
|
|
if self.role then
|
|
if delta_x > 0 then
|
|
self.rotate = self.rotate - 10
|
|
-- self.role.transform:Rotate(Vector3(0, -10, 0))
|
|
self.role.transform:Rotate(Vector3.up, -10, UnityEngine.Space.World)
|
|
else
|
|
self.rotate = self.rotate + 10
|
|
-- self.role.transform:Rotate(Vector3(0, 10, 0))
|
|
self.role.transform:Rotate(Vector3.up, 10, UnityEngine.Space.World)
|
|
end
|
|
self.pos_x = pos_x
|
|
end
|
|
else
|
|
print("---UIPartModelClass--OnDragging-pos_x-:", pos_x)
|
|
print("---UIPartModelClass--OnDragging-pos_y-:", pos_y)
|
|
end
|
|
end
|