public override void CreateModel() { //AvatarModelData data = AvatarModelData.dataMap[(int)vocation]; //Debug.Log("EntityNPC.CreateModel(id=" + ID + ")"); int modelID = NPCData.dataMap[(int)ID].mode; if (!AvatarModelData.dataMap.ContainsKey(modelID) && modelID != 150000) { return; } if (modelID != 150000) { AvatarModelData data = AvatarModelData.dataMap[modelID]; AssetCacheMgr.GetInstanceAutoRelease(data.prefabName, (prefab, guid, gameObject) => { GameObject = gameObject as GameObject; Transform = (gameObject as GameObject).transform; Transform.position = position; Transform.eulerAngles = rotation; // Transform.localScale = scale; animator = GameObject.GetComponent <Animator>(); SetIdleAction(); motor = null; npcMotor = GameObject.AddComponent <MogoMotorNPC>(); Transform.tag = "NPC"; GameObject.layer = 17; //Trap? UpdatePosition(); ap = Transform.GetComponent <ActorNPC>(); if (ap == null) { Transform.gameObject.AddComponent <ActorNPC>(); ap = Transform.GetComponent <ActorNPC>(); (ap as ActorNPC).theEntity = this; } SphereCollider collider = Transform.gameObject.AddComponent <SphereCollider>(); collider.isTrigger = true; collider.center = Vector3.zero; collider.radius = NPCData.dataMap[(int)ID].colliderRange / ((Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) < Transform.localScale.z ? (Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) : Transform.localScale.z); BillboardLogicManager.Instance.AddInfoBillboard(ID, Transform, this, false); BillboardLogicManager.Instance.SetHead(this); EventDispatcher.TriggerEvent <Vector3, uint>(BillboardLogicManager.BillboardLogicEvent.UPDATEBILLBOARDPOS, Transform.position, ID); MogoFXManager.Instance.AddShadow(GameObject, ID, 1 / Transform.localScale.x, 1 / Transform.localScale.y, 1 / Transform.localScale.z); if (MogoWorld.thePlayer.CurrentTask != null) { if (MogoWorld.thePlayer.CurrentTask.conditionType == 1 && MogoWorld.thePlayer.CurrentTask.condition != null && MogoWorld.thePlayer.CurrentTask.condition.Count >= 3 && TaskData.dataMap.Get(MogoWorld.thePlayer.CurrentTask.condition[2]).npc == (int)ID) { SetNPCSign(NPCSignState.Doing); } if (MogoWorld.thePlayer.CurrentTask.isShowNPCTip == 1) { SetNPCSign(NPCSignState.Done); } } ((GameObject)gameObject).AddComponent <MogoObjOpt>().ObjType = MogoObjType.NPC; if (((GameObject)gameObject).GetComponent <Animator>() != null) { ((GameObject)gameObject).GetComponent <Animator>().enabled = false; } if (((GameObject)gameObject).GetComponent <Animation>() != null) { ((GameObject)gameObject).GetComponent <Animation>().enabled = false; } if (!NPCManager.npcEntitiePosition.ContainsKey((uint)ID)) { NPCManager.npcEntitiePosition.Add((uint)ID, Transform.position); } EventDispatcher.TriggerEvent(Events.TaskEvent.CheckNpcInRange); NPCCheckThink(); } ); } else { GameObject = new GameObject(); GameObject.name = "Sky_NPC"; Transform = GameObject.transform; Transform.position = position; Transform.eulerAngles = rotation; // Transform.localScale = scale; Transform.tag = "NPC"; UpdatePosition(); ActorNPC ap = Transform.GetComponent <ActorNPC>(); if (ap == null) { Transform.gameObject.AddComponent <ActorNPC>(); ap = Transform.GetComponent <ActorNPC>(); (ap as ActorNPC).theEntity = this; } SphereCollider collider = Transform.gameObject.AddComponent <SphereCollider>(); collider.isTrigger = true; collider.center = Vector3.zero; collider.radius = 5; } }
public override void CreateModel() { //AvatarModelData data = AvatarModelData.dataMap[(int)vocation]; LoggerHelper.Debug("EntityNPC create:" + ID); int modelID = NPCData.dataMap[(int)ID].mode; if (!AvatarModelData.dataMap.ContainsKey(modelID) && modelID != 150000) return; if (modelID != 150000) { AvatarModelData data = AvatarModelData.dataMap[modelID]; AssetCacheMgr.GetInstanceAutoRelease(data.prefabName, (prefab, guid, gameObject) => { GameObject = gameObject as GameObject; Transform = (gameObject as GameObject).transform; Transform.position = position; Transform.eulerAngles = rotation; // Transform.localScale = scale; animator = GameObject.GetComponent<Animator>(); SetIdleAction(); motor = null; npcMotor = GameObject.AddComponent<MogoMotorNPC>(); Transform.tag = "NPC"; GameObject.layer = 17; UpdatePosition(); ap = Transform.GetComponent<ActorNPC>(); if (ap == null) { Transform.gameObject.AddComponent<ActorNPC>(); ap = Transform.GetComponent<ActorNPC>(); (ap as ActorNPC).theEntity = this; } SphereCollider collider = Transform.gameObject.AddComponent<SphereCollider>(); collider.isTrigger = true; collider.center = Vector3.zero; collider.radius = NPCData.dataMap[(int)ID].colliderRange / ((Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) < Transform.localScale.z ? (Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) : Transform.localScale.z); BillboardLogicManager.Instance.AddInfoBillboard(ID, Transform, this, false); BillboardLogicManager.Instance.SetHead(this); EventDispatcher.TriggerEvent<Vector3,uint>(BillboardLogicManager.BillboardLogicEvent.UPDATEBILLBOARDPOS, Transform.position,ID); MogoFXManager.Instance.AddShadow(GameObject, ID, 1 / Transform.localScale.x, 1 / Transform.localScale.y, 1 / Transform.localScale.z); if (MogoWorld.thePlayer.CurrentTask != null) { if (MogoWorld.thePlayer.CurrentTask.conditionType == 1 && MogoWorld.thePlayer.CurrentTask.condition != null && MogoWorld.thePlayer.CurrentTask.condition.Count >= 3 && TaskData.dataMap.Get(MogoWorld.thePlayer.CurrentTask.condition[2]).npc == (int)ID) { SetNPCSign(NPCSignState.Doing); } if (MogoWorld.thePlayer.CurrentTask.isShowNPCTip == 1) { SetNPCSign(NPCSignState.Done); } } ((GameObject)gameObject).AddComponent<MogoObjOpt>().ObjType = MogoObjType.NPC; if (((GameObject)gameObject).GetComponent<Animator>() != null) { ((GameObject)gameObject).GetComponent<Animator>().enabled = false; } if (((GameObject)gameObject).GetComponent<Animation>() != null) { ((GameObject)gameObject).GetComponent<Animation>().enabled = false; } if (!NPCManager.npcEntitiePosition.ContainsKey((uint)ID)) NPCManager.npcEntitiePosition.Add((uint)ID, Transform.position); EventDispatcher.TriggerEvent(Events.TaskEvent.CheckNpcInRange); NPCCheckThink(); } ); } else { GameObject = new GameObject(); GameObject.name = "Sky_NPC"; Transform = GameObject.transform; Transform.position = position; Transform.eulerAngles = rotation; // Transform.localScale = scale; Transform.tag = "NPC"; UpdatePosition(); ActorNPC ap = Transform.GetComponent<ActorNPC>(); if (ap == null) { Transform.gameObject.AddComponent<ActorNPC>(); ap = Transform.GetComponent<ActorNPC>(); (ap as ActorNPC).theEntity = this; } SphereCollider collider = Transform.gameObject.AddComponent<SphereCollider>(); collider.isTrigger = true; collider.center = Vector3.zero; collider.radius = 5; } }