130 lines
4.9 KiB
C#
130 lines
4.9 KiB
C#
|
using System.Collections;
|
|||
|
using Games.GlobeDefine;
|
|||
|
using GCGame.Table;
|
|||
|
using UnityEngine;
|
|||
|
namespace Games.LogicObj
|
|||
|
{
|
|||
|
public class Obj_Character_Clone_Init_Data : Obj_Character_Init_Data
|
|||
|
{
|
|||
|
public Material[] addMaterials;
|
|||
|
public CharacterCloneAnimData animData;
|
|||
|
public Material baseMaterial;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 角色在世界空间的克隆体
|
|||
|
/// </summary>
|
|||
|
// 主要用于构造角色之后,需要同时修改材质或者其他显示效果的情况
|
|||
|
// 仅角色自己可以很容易收获模型加载完成的消息,因此单独开辟一个类
|
|||
|
public class Obj_CharacterClone : Obj_Character
|
|||
|
{
|
|||
|
/// 角色动画需求数据 - 用于处理模型延迟加载的问题
|
|||
|
public CharacterCloneAnimData AnimData { get; private set; }
|
|||
|
|
|||
|
public override bool Init(ObjParent_Init_Data initData1)
|
|||
|
{
|
|||
|
var result = false;
|
|||
|
var initData = initData1 as Obj_Character_Clone_Init_Data;
|
|||
|
if (initData != null)
|
|||
|
{
|
|||
|
ModelID = initData.m_ModelVisualID;
|
|||
|
ModelVisualID = initData.m_ModelVisualID;
|
|||
|
WeaponDataID = initData.m_WeaponDataID;
|
|||
|
WeaponEffectGem = initData.m_WeaponEffectGem;
|
|||
|
WingModelAuraid = initData.m_WingAuraId;
|
|||
|
EffectAuraId = initData.m_EffectAuraId;
|
|||
|
Profession = initData.m_nProfession;
|
|||
|
AdvanceWingId = initData.m_AdvanceWingId;
|
|||
|
|
|||
|
InitMaterialManager();
|
|||
|
ClearMaterialMods();
|
|||
|
AddMaterialToBodyPart(initData.baseMaterial, initData.addMaterials, ModelPart.body);
|
|||
|
AddMaterialToBodyPart(initData.baseMaterial, initData.addMaterials, ModelPart.weaponLeft);
|
|||
|
AddMaterialToBodyPart(initData.baseMaterial, initData.addMaterials, ModelPart.weaponRight);
|
|||
|
AnimData = initData.animData;
|
|||
|
//SetAnim();
|
|||
|
|
|||
|
if (Profession >= 0)
|
|||
|
{
|
|||
|
var itemVisual = TableManager.GetItemVisualByID(ModelVisualID, 0);
|
|||
|
if (itemVisual == null)
|
|||
|
{
|
|||
|
ModelVisualID = GlobeVar.DEFAULT_VISUAL_ID;
|
|||
|
itemVisual = TableManager.GetItemVisualByID(ModelVisualID, 0);
|
|||
|
}
|
|||
|
|
|||
|
ModelID = GetCharModelID(itemVisual, Profession);
|
|||
|
}
|
|||
|
|
|||
|
var charModel = TableManager.GetCharModelByID(ModelID, 0);
|
|||
|
if (charModel != null)
|
|||
|
{
|
|||
|
result = true;
|
|||
|
transform.localScale = Vector3.one * charModel.Scale;
|
|||
|
CreateModel(ModelID);
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
public override void CreateModel(int modelId, string resPath, string bundlePath, Hashtable table = null,
|
|||
|
ObjModelLoadCallback delFinish = null)
|
|||
|
{
|
|||
|
// Prevent Blinking on reuse.
|
|||
|
if (ModelNode.model != null && (ModelNode.targetBundle != bundlePath || ModelNode.targetModel != resPath))
|
|||
|
ModelNode.RemoveModel();
|
|||
|
base.CreateModel(modelId, resPath, bundlePath, table, delFinish);
|
|||
|
}
|
|||
|
|
|||
|
private void SetAnim()
|
|||
|
{
|
|||
|
if (ModelNode.model != null)
|
|||
|
{
|
|||
|
// 注:这个流程无法使用AnimLogic执行 - AnimLogic不支持normalizedTime功能。
|
|||
|
var animator = ModelNode.model.GetComponentInChildren<Animator>();
|
|||
|
if (animator != null)
|
|||
|
if (AnimData == null)
|
|||
|
animator.speed = 0f;
|
|||
|
else
|
|||
|
{
|
|||
|
animator.enabled = true;
|
|||
|
animator.Play(AnimData.animName, 0, AnimData.normalizedTime);
|
|||
|
animator.speed = AnimData.animSpeed;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected override void CreateModelOver(Hashtable hashParam)
|
|||
|
{
|
|||
|
base.CreateModelOver(hashParam);
|
|||
|
SetAnim();
|
|||
|
RealoadPlayerWeaponVisual();
|
|||
|
ReloadPlayerEffect();
|
|||
|
}
|
|||
|
|
|||
|
private void AddMaterialToBodyPart(Material baseMaterial, Material[] addMaterials, int modelPart)
|
|||
|
{
|
|||
|
if (addMaterials != null)
|
|||
|
for (var i = 0; i < addMaterials.Length; i++)
|
|||
|
AddMaterial(addMaterials[i], modelPart);
|
|||
|
if (baseMaterial != null)
|
|||
|
CreateMaterialMod(baseMaterial, modelPart);
|
|||
|
}
|
|||
|
|
|||
|
//protected override void CreateBlackModelOver(Hashtable hashParam)
|
|||
|
//{
|
|||
|
// base.CreateBlackModelOver(hashParam);
|
|||
|
// RealoadWingModel((int)hashParam["wingId"], 0);
|
|||
|
//}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 角色克隆体动画数据
|
|||
|
/// </summary>
|
|||
|
public class CharacterCloneAnimData
|
|||
|
{
|
|||
|
public string animName;
|
|||
|
public float animSpeed = 1f;
|
|||
|
public float normalizedTime;
|
|||
|
}
|
|||
|
}
|