// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-09-02 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.ResourceManagement.AsyncOperations; namespace G { /// /// 角色技能 /// public class Cha_Skill : MonoBehaviour { class SkillInfo { public readonly List prefabs = new List(); public readonly List instances = new List(); public GameObject instance => instances[0]; public GameObject instance2 => instances[1]; public bool isInit; public int repeat; public int repeatCount; public float repeatDelay; public int repeatDamage; //public Vector3 repeatPosition; } #region Field private Transform _mytransform; /// /// /// private Transform _chaRHand; /// /// /// private float _baseDamage = 1f; public float skillatk; private int _skillAttack; private int _motionKind; private int _gSkillAttack; private int _gMotionKind; /// /// 施法延迟 /// private float _castingDelay; private float _repeatAtk; private bool _repeat; private int _repeatTime; private int _repeatKind; private float _repeatDelay; /// /// /// private float _currentDelay = 10f; private EntityMainPlayer _scriptCha1; private int _skillIndex = -1; private Ef_rotfog _scriptRotfog; private float _ptOffDelay = 10f; public Transform swordwind; public Transform rapidstab; public Transform supersword; public Transform energypillar; public Transform pt_attackup; public Transform pt_defenceup; public Transform pt_boom; public Transform pt_poison; public Transform ef_gather; public Transform deathhand; public Transform chosun; public Transform junwui; public Transform jin; public Transform ef_rotfog; public Transform fincanon; public Transform swordrain_b; public Transform swordrain_s; public Transform swordrain; public Transform wing; public Transform ef_groundbreak; public Transform bombsphere; public Transform lightningblade; private Transform directionArrow; private Transform pt_ki; private Transform c_fincanon; private Transform c_groundbreak; private Transform c_bombsphere; private const int MAX_SKILL_COUNT = 40; private readonly SkillInfo[] _skillInfos = new SkillInfo[MAX_SKILL_COUNT]; private Cha_Sound _scriptSound; #endregion #region Method /// /// /// /// public void SetBaseDamage(float damage) { _baseDamage = damage; } /// /// /// /// /// /// public void SetSkill(int attack, int skillAttack, int motionKind) { _skillAttack = Mathf.Max(1, skillAttack); } /// /// 设置 /// /// /// /// public void SetGeneralSkill(int attack, int skillAttack, int motionKind) { _gSkillAttack = (int)(attack * skillAttack * 0.01f); _gSkillAttack = Mathf.Max(1, _gSkillAttack); _gMotionKind = motionKind; } /// /// /// /// public void SetRHand(Transform hand) { _chaRHand = hand; } /// /// 角色技能 /// /// /// /// public float SkillOn(int index, bool general) { float result = 10; _scriptCha1.SkillStart(); //pt_ki.particleEmitter().emit = true; //_rigidbody.drag = 20f; _scriptCha1.drag = 20f; _skillIndex = index; ef_rotfog.position = _mytransform.position; _scriptRotfog.RotfogOn(1.5f, 40f, 800, 150, 0.5f); Time.timeScale = 0.1f; if (!general) { //var skillItem = ItemProxy.Instance.GetStaticItem(skill_index + 2001); //motionkind = skillItem.kind;// script_DBskill.ss[skill_index, 0]._kind; //cur_skill_grade[skill_index] = Mathf.Max(0, cur_skill_grade[skill_index]); skillatk = _scriptCha1.sourceTotalAttack;// skillItem.attackpoint;// script_DBskill.ss[skill_index, cur_skill_grade[skill_index]]._attackpoint; //result = skillItem.cooltime;// script_DBskill.ss[skill_index, 0]._cooltime; } else { _motionKind = _gMotionKind; skillatk = _gSkillAttack; _skillIndex += 21; } // if (_motionKind == 1) { directionArrow.GetComponent().enabled = true; _scriptCha1.PlayAnimation(EntityPlayer.Hash_Cast1); //script_cha1.PlayAnim("cast1"); } else if (_motionKind == 2) { GameCamera.Instance.ZoomIn(20, 16, 0.3f); _scriptCha1.PlayAnimation(EntityPlayer.Hash_Cast2); if (_skillIndex == 13 || _skillIndex == 15) { jin.gameObject.SetActive(true); jin.position = _mytransform.position + _mytransform.forward * 0.2f + Vector3.up * 0.01f; } else if (_skillIndex == 19) { wing.gameObject.SetActive(true); } } else if (_motionKind == 3) { directionArrow.GetComponent().enabled = true; _scriptCha1.PlayAnimation(EntityPlayer.Hash_Cast3); if (_skillIndex == 8) { ef_gather.position = _mytransform.position + Vector3.up * 0.22f; ef_gather.gameObject.SetActive(true); ef_gather.GetComponent().SetTex(0, 1.2f); } else if (_skillIndex == 9) { ef_gather.position = _mytransform.position + Vector3.up * 0.22f; ef_gather.gameObject.SetActive(true); ef_gather.GetComponent().SetTex(1, 0.8f); } } else if (_motionKind == 4) { directionArrow.GetComponent().enabled = true; //script_cha1.PlayAnim("cast4"); _scriptCha1.PlayAnimation(EntityPlayer.Hash_Cast4); if (_skillIndex == 16) { jin.gameObject.SetActive(true); jin.position = _mytransform.position + Vector3.up * 0.01f; if (c_fincanon == null) { c_fincanon = Instantiate(fincanon, _mytransform.position, _mytransform.rotation); c_fincanon.GetComponent().mass = skillatk * _baseDamage * 0.01f; c_fincanon.parent = _mytransform; } else { c_fincanon.gameObject.SetActive(true); c_fincanon.position = _mytransform.position; c_fincanon.rotation = _mytransform.rotation; c_fincanon.parent = _mytransform; } } } return result; } /// /// 宠物技能 /// /// public void PetSkillOn(int index) { ef_rotfog.position = _mytransform.position; _scriptRotfog.RotfogOn(3f, 4f, 80, 5, 3f); GameCamera.Instance.ZoomIn(5, 15, 1f); switch (index) { case 0: _scriptCha1.CallHorse(); break; case 1: _scriptCha1.Fly(); break; } } /// /// 延迟技能 /// /// public void DelaySkill(int index) { if (c_groundbreak == null) { c_groundbreak = Instantiate(ef_groundbreak, _mytransform.position, Quaternion.identity); } else { c_groundbreak.position = _mytransform.position; c_groundbreak.gameObject.SetActive(true); } int damage = _scriptCha1.sourceTotalAttack; c_groundbreak.GetComponent().mass = damage; switch (index) { case 2: c_groundbreak.localScale = Vector3.one * 0.5f; GameCamera.Instance.Hitcam2(2f); break; case 19: c_groundbreak.localScale = Vector3.one * 1f; GameCamera.Instance.Hitcam2(4f); Time.timeScale = 0.6f; StartCoroutine(ResetTimeScale()); c_bombsphere = Object.Instantiate(bombsphere, _mytransform.position, Quaternion.identity); Object.Destroy(c_bombsphere.gameObject, 1.2f); break; } } /// /// 重复技能 /// /// /// /// /// public void Repeatskill(int kind, int count, float delay, bool next = false) { _repeat = true; _repeatKind = kind; _repeatTime = count; _repeatDelay = delay; _currentDelay = _repeatDelay; if (next) return; switch (_repeatKind) { case 8: { Vector3 rndPos = transform.position + Random.onUnitSphere * Random.Range(0.3f, 0.6f); rndPos.y = 0f; if (!TryNewOrGetSkillInfo(_repeatKind, out var skillInfo) && _repeatTime > 0) { int instance_index = Mathf.Max(1, _repeatTime); skillInfo.instances[instance_index].transform.SetPositionAndRotation(rndPos + Vector3.up * 0.05f, _mytransform.rotation); skillInfo.instances[instance_index].GetComponent().damage = Mathf.Max(1, skillInfo.repeatDamage); skillInfo.instances[instance_index].SetActive(true); } } break; case 11: { var rndpos = _mytransform.position + _mytransform.forward * 0.3f + _mytransform.right * Random.Range(-0.2f, 0.2f); rndpos.y = 0.01f; var skillInfo = _skillInfos[10]; skillInfo.instance.transform.position = rndpos; skillInfo.instance.GetComponent().mass = _repeatAtk; GameCamera.Instance.Hitcam2(1.5f); } break; case 17: { Vector3 rndPos; if (_scriptCha1.targetEnemy) rndPos = _scriptCha1.targetEnemy.position; else rndPos = transform.position + Random.onUnitSphere * Random.Range(0.2f, 0.35f); rndPos.y = -1f; if (!TryNewOrGetSkillInfo(17, out var skillInfo) && _repeatTime > 0) { int instance_index = Mathf.Max(0, 5 - _repeatTime); skillInfo.instances[instance_index].GetComponent().mass = skillInfo.repeatDamage; skillInfo.instances[instance_index].transform.position = rndPos; skillInfo.instances[instance_index].SetActive(true); GameCamera.Instance.Hitcam2(1.2f); } } break; case 25: { float num = (3 - _repeatTime) * 45; Vector3 eulerAngles = _mytransform.eulerAngles; var tempradian = (num - eulerAngles.y + 90f) * 0.01745f; var rndpos = _mytransform.position + 0.3f * Vector3.right * Mathf.Cos(tempradian) + 0.3f * Vector3.forward * Mathf.Sin(tempradian); rndpos.y = -1f; var skillInfo = _skillInfos[10]; skillInfo.instances[_repeatTime + 1].GetComponent().mass = _repeatAtk; skillInfo.instances[_repeatTime + 1].transform.localScale = Vector3.one + Vector3.up * Random.Range(-0.1f, 0.5f); skillInfo.instances[_repeatTime + 1].transform.localScale *= Random.Range(0.7f, 1.2f); skillInfo.instances[_repeatTime + 1].transform.position = rndpos; skillInfo.instances[_repeatTime + 1].gameObject.SetActive(true); break; } case 29: { var rndpos = _mytransform.position + _mytransform.forward * (0.1f + 0.14f * (6 - _repeatTime)) + _mytransform.right * Random.Range(-0.1f, 0.1f); rndpos.y = -1f; var skillInfo = _skillInfos[28]; skillInfo.instances[_repeatTime + 1].GetComponent().mass = _repeatAtk; skillInfo.instances[_repeatTime + 1].transform.position = rndpos; skillInfo.instances[_repeatTime + 1].gameObject.SetActive(true); } break; case 31: { var skillInfo = _skillInfos[30]; skillInfo.instance.GetComponent().mass = _repeatAtk; skillInfo.instance.transform.position = _mytransform.position; skillInfo.instance.transform.rotation = Quaternion.Euler(0f, _repeatTime * 60, 0f); skillInfo.instance.SetActive(true); } break; } } /// /// /// /// /// public void FireSkill(int index, int[] args) { _scriptCha1.SkillStart(); _scriptSound.PlaySound("bt_jin"); pt_ki.particleEmitter().emit = false; int damage = _scriptCha1.sourceTotalAttack * args[2] / 100 + args[1]; switch (index) { case 1: Sk_1_(); break; case 2: Sk_2_wheelwind(damage, args); break; case 3: Sk_3_(); break; case 4: Sk_4_(damage); break; case 5: Sk_05_(damage); break; case 6: Sk_06_Async(damage, args); break; case 7: Sk_07_(damage); break; case 8: Sk_08_Async(damage, args); //Sk_08_(damage); break; case 9: Sk_09_(damage); break; case 10: Sk_10_(damage); break; case 11: Sk_11_(damage, args); break; case 12: Sk_12_Async(damage, args); break; case 13: Sk_13_Async(damage, args); break; case 14: Sk_14_Async(damage, args); break; case 15: Sk_15_(damage, args); break; case 16: Sk_16_(damage, args); break; case 17: Sk_17_Async(damage, args); break; case 18: Sk_18_(damage, args); break; case 19: Sk_19_(damage, args); break; case 20: Sk_20_Async(damage, args); break; case 21: Sk_21_Feilong_Async(damage, args[6], args[8]); break; case 22: Sk_22_(damage, args); break; case 23: Sk_23_(damage, args); break; case 24: Sk_24_(damage, args); break; case 25: Sk_25_(damage, args); break; case 26: Sk_26_(damage, args); break; case 27: Sk_27_(damage, args); break; case 28: Sk_28_(damage, args); break; case 29: Sk_29_(damage, args); break; case 30: Sk_30_(damage, args); break; case 31: Sk_31_(damage, args); break; case 32: Sk_32_(damage, args); break; case 33: Sk_33_(damage, args); break; case 34: Sk_34_(damage, args); break; case 35: Sk_35_(damage, args); break; case 36: Sk_36_(damage, args); break; case 37: Sk_37_(damage, args); break; case 38: Sk_38_(damage, args); break; case 39: Sk_39_(damage, args); break; case 40: Sk_40_(damage, args); break; } _skillIndex = -1; GameLevel.Instance.OnSkill(index); MissionProxy.Instance.OnEvent(MissionProxy.使用指定技能, 1, index); } public IEnumerator Pt_Off(Transform _pt) { yield return new WaitForSeconds(_ptOffDelay); //_pt.particleEmitter().emit = false; } public void BoomOn(int index, bool collider) { pt_boom.GetComponent().SetTex(index, _mytransform.position, collider); } public IEnumerator ResetTimeScale() { yield return new WaitForSeconds(0.5f); Time.timeScale = 1f; BoomOn(0, false); } public IEnumerator BambooFin() { yield return new WaitForSeconds(3.5f); //c_crow.particleEmitter().emit = false; //c_bamboobase.particleEmitter().emit = false; } /// /// /// private void Sk_AttackUp() { //pt_attackup.particleEmitter().emit = false; _scriptCha1.ResetAtk(); } /// /// /// private void Sk_DefenceUp() { var skillInfo = _skillInfos[2]; skillInfo.instance.SetActive(false); _scriptCha1.ResetDef(); } /// /// /// /// public IEnumerator Sk_SwordDance() { yield return new WaitForSeconds(0.5f); _scriptCha1.StopAnimation(); //AnimationState comein = script_cha1.PlayAnimQueued("change_in_atk"); //comein.speed = 0.5f; //_scriptCha1.PlayAnimation("change_in_atk"); _scriptCha1.entityView.Appear(); _scriptCha1.StartControl(); } /// /// /// /// public IEnumerator Sk_Mirage() { yield return new WaitForSeconds(1f); _scriptCha1.entityView.Appear(); _scriptCha1.StartControl(); _scriptCha1.PlayAnimation("attackex2_impact"); } /// /// /// /// /// /// is New private bool TryNewOrGetSkillInfo(int kind, out SkillInfo skillInfo) { int index = kind - 1; skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; return true; } return false; } private void Sk_1_() { _scriptCha1.PlayAnimation("jumpattack_air"); //AnimationState animationState = script_cha1.PlayAnimQueued("jumpattack_impact"); //animationState.speed = 0.25f; } /// /// /// /// private async void Sk_2_wheelwind(int damage, int[] args) { _scriptCha1.PlayAnimation(EntityPlayer.Hash_WheelWind); int index = 1; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var wheelwind = await LoadAssetAsync("sk_wheelwind").Task; var instance = Instantiate(wheelwind, _mytransform); instance.transform.localPosition = Vector3.zero; skillInfo.instances.Add(instance); } if (args.Length > 9 && args[8] > 0) skillInfo.instance.GetComponent().SetTornado(args[8], args[9]); skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); } private void Sk_3_() { _scriptCha1.PlayAnimation(EntityPlayer.Hash_Skill03); int index = 2; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var instance = Instantiate(pt_defenceup, _mytransform.position, Quaternion.identity); skillInfo.instances.Add(instance.gameObject); } else { CancelInvoke(nameof(Sk_DefenceUp)); } pt_boom.GetComponent().SetTex(1, _mytransform.position, true); _scriptCha1.DefenceUp(100, 0); Invoke(nameof(Sk_DefenceUp), skillatk); } private void Sk_4_(int damage) { _scriptCha1.PlayAnimation("rapidstab"); int index = 3; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var instance = Instantiate(rapidstab, _mytransform.position + _mytransform.forward * 0.25f + Vector3.up * 0.04f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.25f + Vector3.up * 0.04f; skillInfo.instance.transform.rotation = _mytransform.rotation; } private void Sk_05_(int damage) { //script_cha1.SetAnimSpeed("attackex3", 0.35f); _scriptCha1.PlayAnimation("attackex3"); //temp = script_cha1.PlayAnimQueued("attackex3_impact"); //temp.speed = 0.25f; int index = 4; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var instance = Instantiate(lightningblade, _mytransform.position + Vector3.up * 0.05f, _mytransform.rotation); instance.parent = _mytransform; skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); } /// /// 幽灵剑 /// /// /// private async void Sk_06_Async(int damage, int[] args) { //script_cha1.PlayAnimation("skill03"); int index = 5; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var prefab = await LoadAssetAsync("sk_spiritsword").Task; var instance = Instantiate(prefab); skillInfo.instances.Add(instance.gameObject); } var sword1 = skillInfo.instance.GetComponent(); sword1.Reset(); sword1.swordCount = args[6]; sword1.power = damage; skillInfo.instance.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.2f, _mytransform.rotation); skillInfo.instance.SetActive(true); } private void Sk_07_(int damage) { _scriptCha1.PlayAnimation("skill03"); //ParticleEmitter particleEmitter = pt_attackup.particleEmitter(); //if (!particleEmitter.emit) //{ // particleEmitter.emit = true; //} //else //{ // CancelInvoke(nameof(Sk_AttackUp)); //} pt_boom.GetComponent().SetTex(0, _mytransform.position, true); _scriptCha1.AttackUp(0, 150); Invoke(nameof(Sk_AttackUp), skillatk); } /// /// /// /// private void Sk_08_(int damage) { _scriptCha1.PlayAnimation("skill02"); ef_gather.position = _mytransform.position + Vector3.up * 0.22f; ef_gather.gameObject.SetActive(true); ef_gather.GetComponent().SetTex(0, 1.2f); int index = 7; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var instance = Instantiate(pt_poison, _mytransform.position + Vector3.up * 0.22f, Quaternion.identity); instance.parent = _mytransform; skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = Mathf.Max(1, damage); } /// /// 如来神掌 /// /// private async void Sk_08_Async(int damage, int[] args) { _scriptCha1.PlayAnimation(EntityPlayer.Hash_Skill02); const int MAX_RLSZ_AMOUNT = 10; if (TryNewOrGetSkillInfo(8, out SkillInfo skillInfo)) { var prefab = await LoadAssetAsync("sk_rlsz").Task; var instance = Instantiate(prefab); skillInfo.instances.Add(instance); for (int i = 0; i < MAX_RLSZ_AMOUNT; i++) { instance = Instantiate(prefab); instance.transform.localScale = Vector3.one * (0.6f - i * 0.03f); skillInfo.instances.Add(instance); } } if (_scriptCha1.targetEnemy) { var targetPos = _scriptCha1.targetEnemy.position; var forward = (targetPos - _mytransform.position).normalized; skillInfo.instance.transform.SetPositionAndRotation(targetPos + Vector3.up * 0.05f, Quaternion.LookRotation(forward)); } else { skillInfo.instance.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.05f, _mytransform.rotation); } skillInfo.instance.GetComponent().damage = Mathf.Max(1, damage); skillInfo.instance.SetActive(true); int amoutIndex = (int)Cha_Moves.ArgIndex.Amount; if (args != null && args.Length > amoutIndex) { int count = Mathf.Min(MAX_RLSZ_AMOUNT, args[amoutIndex]); if (count > 0) { skillInfo.repeatDamage = damage; skillInfo.repeatCount = count; skillInfo.repeatDelay = 1f; Repeatskill(8, count, 0.3f, true); } } } private void Sk_09_(int damage) { _scriptCha1.PlayAnimation("skill04"); ef_gather.position = _mytransform.position + Vector3.up * 0.22f; ef_gather.gameObject.SetActive(true); ef_gather.GetComponent().SetTex(1, 0.8f); int index = 8; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var instance = Instantiate(deathhand, _mytransform.position + Vector3.up * 0.05f, _mytransform.rotation); instance.parent = _mytransform; skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); } private void Sk_10_(int damage) { _scriptCha1.PlayAnimation("skill_chargesmash"); int index = 9; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var instance = Instantiate(supersword, _chaRHand.position, _chaRHand.rotation); instance.up = _chaRHand.forward; instance.parent = _chaRHand; skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); } private void Sk_11_(int damage, int[] args) { _scriptCha1.Invincibility(5f); _scriptCha1.PlayAnimation("skill03"); _repeatAtk = damage; int index = 10; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var instance = Object.Instantiate(energypillar); skillInfo.instances.Add(instance.gameObject); } Repeatskill(11, 5, 0.8f); } /// /// 独孤九剑 /// /// /// private async void Sk_12_Async(int damage, int[] args) { _scriptCha1.PlayAnimation("skill01"); if (TryNewOrGetSkillInfo(12, out SkillInfo skillInfo)) { var sworddance = await LoadAssetAsync("sk_sworddance").Task; var instance = Instantiate(sworddance); skillInfo.instances.Add(instance.gameObject); //sworddance = await LoadAssetAsync("sk_sworddance2").Task; //instance = Instantiate(sworddance); //skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().damage = damage; skillInfo.instance.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.05f, Quaternion.LookRotation(-_mytransform.forward + _mytransform.right)); skillInfo.instance.SetActive(true); if (args != null && args.Length > (int)Cha_Moves.ArgIndex.Special1 && args[(int)Cha_Moves.ArgIndex.Special1] > 0) skillInfo.instance.GetComponent().special1 = args[(int)Cha_Moves.ArgIndex.Special1]; //if (args[7] == 0) //{ // skillInfo.instance.GetComponent().mass = damage; // skillInfo.instance.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.05f, Quaternion.LookRotation(-_mytransform.forward + _mytransform.right)); // skillInfo.instance.SetActive(true); //} //else //{ // skillInfo.instance2.GetComponent().mass = damage; // skillInfo.instance2.transform.SetPositionAndRotation(_mytransform.position + Vector3.up * 0.05f, Quaternion.LookRotation(-_mytransform.forward + _mytransform.right)); // skillInfo.instance2.SetActive(true); //} _scriptCha1.entityView.Disappear(); _scriptCha1.StopControl(); StartCoroutine(Sk_SwordDance()); } /// /// /// /// /// private async void Sk_13_Async(int damage, int[] args) { if (TryNewOrGetSkillInfo(13, out SkillInfo skillInfo)) { var skillAsset = await LoadAssetAsync("sk_machine").Task; for (int i = 0; i < 2; i++) { var instance = Instantiate(skillAsset); instance.SetActive(false); skillInfo.instances.Add(instance); } } //_scriptCha1.PlayAnimation("skill03"); _scriptCha1.Invincibility(0.5f); if (args.Length >= 7) { int count = args[6]; float life = args[7] * 0.001f; for (int i = 0; i < count; i++) { skillInfo.instances[i].SetActive(true); //skillInfo.instances[i].GetComponent().SetDamage(damage); //skillInfo.instances[i].GetComponent().lifeTime = life; skillInfo.instances[i].transform.position = transform.TransformPoint(Vector3.forward * 0.2f); skillInfo.instances[i].transform.rotation = transform.rotation; } } //if (TryNewOrGetSkillInfo(13, out SkillInfo skillInfo)) //{ // var skillAsset = await LoadAssetAsync("sk_guard").Task; // for (int i = 0; i < 2; i++) // { // var instance = Instantiate(skillAsset); // instance.SetActive(false); // skillInfo.instances.Add(instance); // } //} //_scriptCha1.PlayAnimation("skill03"); //_scriptCha1.Invincibility(1f); //if (args.Length >= 7) //{ // int count = args[6]; // float life = args[7] * 0.001f; // for (int i = 0; i < count; i++) // { // skillInfo.instances[i].SetActive(true); // skillInfo.instances[i].GetComponent().SetDamage(damage); // skillInfo.instances[i].GetComponent().lifeTime = life; // skillInfo.instances[i].transform.position = transform.TransformPoint(Vector3.forward * 0.2f); // skillInfo.instances[i].transform.rotation = transform.rotation; // } //} //jin.gameObject.SetActive(true); //jin.position = _mytransform.position + _mytransform.forward * 0.2f + Vector3.up * 0.01f; } /// /// /// /// /// private async void Sk_14_Async(int damage, int[] args) { _scriptCha1.PlayAnimation("skill04"); _scriptCha1.Invincibility(2f); if (TryNewOrGetSkillInfo(14, out SkillInfo skillInfo)) { var dragonhead = await LoadAssetAsync("sk_dragonhead").Task; var instance = Instantiate(dragonhead, _mytransform.position - _mytransform.forward * 0.2f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().physicsDamage = damage; skillInfo.instance.SetActive(true); //有目标 if (_scriptCha1.targetEnemy) { var targetPos = _scriptCha1.targetEnemy.position; var forward = (targetPos - _mytransform.position).normalized; skillInfo.instance.transform.SetPositionAndRotation(targetPos - forward * 0.4f, Quaternion.LookRotation(forward)); } else { var targetPos = _mytransform.TransformPoint(-Vector3.forward * 0.2f); skillInfo.instance.transform.SetPositionAndRotation(targetPos, _mytransform.rotation); } } private void Sk_15_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); _scriptCha1.Invincibility(4f); int index = 14; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var instance = Instantiate(chosun, _mytransform.position + _mytransform.forward * 0.2f, chosun.localRotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = skillatk * _baseDamage * 0.01f; skillInfo.instance.SetActive(false); skillInfo.instance.SetActive(true); skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.2f; skillInfo.instance.transform.rotation = chosun.localRotation; GameCamera.Instance.LookTarget(skillInfo.instance.transform, 28, 0.5f); jin.gameObject.SetActive(true); jin.position = _mytransform.position + _mytransform.forward * 0.2f + Vector3.up * 0.01f; } private void Sk_16_(int damage, int[] args) { jin.gameObject.SetActive(true); jin.position = _mytransform.position + Vector3.up * 0.01f; if (c_fincanon == null) { c_fincanon = Instantiate(fincanon, _mytransform.position, _mytransform.rotation); c_fincanon.GetComponent().mass = skillatk * _baseDamage * 0.01f; c_fincanon.parent = _mytransform; } else { c_fincanon.gameObject.SetActive(true); c_fincanon.position = _mytransform.position; c_fincanon.rotation = _mytransform.rotation; c_fincanon.parent = _mytransform; } _scriptCha1.PlayAnimation("skill03"); //temp = script_cha1.PlayAnimQueued("skill03"); //temp.speed = 0.2f; } /// /// 竹子 /// /// /// private async void Sk_17_Async(int damage, int[] args) { const int MAX_COUNT = 5; if (TryNewOrGetSkillInfo(17, out SkillInfo skillInfo)) { var bamboo = await LoadAssetAsync("sk_bamboo").Task; for (int i = 0; i < MAX_COUNT; i++) { var instance = Object.Instantiate(bamboo); instance.SetActive(false); skillInfo.instances.Add(instance); } } _scriptCha1.PlayAnimation("skill03"); StartCoroutine(BambooFin()); if (args.Length >= 7) { int count = Mathf.Min(MAX_COUNT, args[6]); skillInfo.repeatDamage = damage; skillInfo.repeatCount = count; skillInfo.repeatDelay = 1f; Repeatskill(17, count, 1f); } else { Repeatskill(17, 1, 1f); } } private void Sk_18_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 17; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var instance = Instantiate(swordrain_s, _mytransform.position, Quaternion.identity); skillInfo.instances.Add(instance.gameObject); var instance2 = Instantiate(swordrain, _mytransform.position + Vector3.up * 1f, _mytransform.rotation); skillInfo.instances.Add(instance2.gameObject); var instance3 = Instantiate(swordrain_b, _mytransform.position + Vector3.up * -0.1f, _mytransform.rotation); skillInfo.instances.Add(instance3.gameObject); } skillInfo.instances[0].SetActive(true); skillInfo.instances[0].transform.position = _mytransform.position; skillInfo.instances[1].SetActive(true); skillInfo.instances[1].transform.position = _mytransform.position + Vector3.up * 1f; skillInfo.instances[1].transform.rotation = _mytransform.rotation; skillInfo.instances[2].SetActive(true); skillInfo.instances[2].transform.position = _mytransform.position + Vector3.up * -0.1f; skillInfo.instances[2].transform.rotation = _mytransform.rotation; skillInfo.instances[2].GetComponent().mass = skillatk * _baseDamage * 0.01f; } private void Sk_19_(int damage, int[] args) { _scriptCha1.PlayAnimation("wing"); //temp = script_cha1.PlayAnimQueued("wing_i"); //temp.speed = 0.2f; } /// /// /// /// /// private async void Sk_20_Async(int damage, int[] args) { //script_cha1.PlayAnimation(EntityMainPlayer.Hash_Skill01); int index = 19; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var prefab = await LoadAssetAsync("sk_swordwind").Task; for (int i = 0; i < 4; i++) { var instance = Instantiate(prefab); instance.SetActive(false); skillInfo.instances.Add(instance); } } for (int i = 0; i < 4; i++) { var instance = skillInfo.instances[i]; if (!instance.activeSelf) { instance.GetComponent().mass = damage; instance.transform.SetPositionAndRotation(_mytransform.position, _mytransform.rotation); instance.SetActive(true); break; } } } /// /// 飞龙 /// /// /// private async void Sk_21_Feilong_Async(int damage, int swordCount, int swordType) { int index = 21 - 1; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); var prefab = await LoadAssetAsync("general_spiritsword").Task; for (int i = 0; i < 6; i++) { var instance = Instantiate(prefab); instance.SetActive(false); skillInfo.instances.Add(instance.gameObject); } skillInfo.isInit = true; _skillInfos[index] = skillInfo; } for (int i = 0; i < skillInfo.instances.Count; i++) { var go = skillInfo.instances[i]; if (!go.activeSelf) { var sword2 = go.GetComponent(); sword2.power = damage; sword2.swordCount += swordCount; sword2.maxHitCount = 12; go.transform.position = _mytransform.position + Vector3.up * 0.2f; go.transform.rotation = Quaternion.Euler(0f, GlobalUtils.RndAngle, 0f); go.SetActive(true); swordCount--; if (swordCount <= 0) { break; } } } if (swordType != 0) Sk_14_Async(damage, null); } private async void Sk_22_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill_chargesmash"); int index = 21; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_spinaxe").Task; var instance = Instantiate(load_skobj.transform, _chaRHand.position + _chaRHand.forward * 0.2f, _chaRHand.rotation); instance.parent = _chaRHand; skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); //skillInfo.instance.transform.GetChild(0).particleEmitter().emit = true; _ptOffDelay = 2.5f; StartCoroutine(Pt_Off(skillInfo.instance.transform.GetChild(0))); } private async void Sk_23_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 22; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_fly").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.1f, Quaternion.identity); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.1f; skillInfo.instance.SetActive(true); } private async void Sk_24_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 23; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_sister").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = skillatk; skillInfo.instance.transform.position = _mytransform.position; skillInfo.instance.transform.rotation = _mytransform.rotation; skillInfo.instance.SetActive(true); } private async void Sk_25_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 24; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; GameObject gameObject = await LoadAssetAsync("general_icebg").Task; var instance = Object.Instantiate(gameObject.transform, _mytransform.position + _mytransform.forward * 0.15f + Vector3.up * 0.01f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); var load_skobj = await LoadAssetAsync("general_ice_spear").Task; skillInfo.prefabs.Add(load_skobj); for (int i = 0; i < 5; i++) { instance = Object.Instantiate(load_skobj.transform, Vector3.zero, Quaternion.Euler(0f, Random.Range(0, 360), 0f)); skillInfo.instances.Add(instance.gameObject); } } //skillInfo.instance.transform.particleEmitter().emit = true; skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.15f + Vector3.up * 0.01f; skillInfo.instance.transform.rotation = _mytransform.rotation; _repeatAtk = skillatk; _ptOffDelay = 6f; StartCoroutine(Pt_Off(skillInfo.instance.transform)); Repeatskill(_skillIndex, 5, 0.12f); } private async void Sk_26_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 25; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_sworddance").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, Quaternion.identity); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.transform.position = _mytransform.position; skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); } private async void Sk_27_(int damage, int[] args) { _scriptCha1.PlayAnimation(EntityPlayer.Hash_WheelWind); int index = 26; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_axedance").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.transform.position = _mytransform.position; skillInfo.instance.SetActive(true); } private async void Sk_28_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill04"); int index = 27; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_arrowrain").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 1f - _mytransform.forward * 0.7f, _mytransform.rotation); instance.parent = _mytransform; skillInfo.instances.Add(instance.gameObject); load_skobj = await LoadAssetAsync("general_arrowrain_base").Task; instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * -0.03f + _mytransform.forward * 0.35f, _mytransform.rotation); instance.parent = _mytransform; skillInfo.instances.Add(instance.gameObject); } skillInfo.instances[0].SetActive(true); skillInfo.instances[0].transform.position = _mytransform.position + Vector3.up * 1f - _mytransform.forward * 0.7f; skillInfo.instances[0].transform.rotation = _mytransform.rotation; skillInfo.instances[1].GetComponent().mass = damage; skillInfo.instances[1].SetActive(true); skillInfo.instances[1].transform.position = _mytransform.position + Vector3.up * -0.03f + _mytransform.forward * 0.35f; skillInfo.instances[1].transform.rotation = _mytransform.rotation; } private async void Sk_29_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 28; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_risespear").Task; for (int i = 0; i < 7; i++) { var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } } skillInfo.instance.GetComponent().mass = damage; _repeatAtk = skillatk; Repeatskill(_skillIndex, 6, 0.1f); } private async void Sk_30_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill02"); int index = 29; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_meteo").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 4.2f - _mytransform.forward * 5.5f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 4.2f - _mytransform.forward * 5.5f; skillInfo.instance.transform.rotation = _mytransform.rotation; skillInfo.instance.gameObject.SetActive(true); } private async void Sk_31_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 30; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_mirage").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 4.2f - _mytransform.forward * 5.5f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; _repeatAtk = damage; Repeatskill(31, 6, 0.05f); StartCoroutine(Sk_Mirage()); _scriptCha1.entityView.Disappear(); _scriptCha1.StopControl(); } private async void Sk_32_(int damage, int[] args) { //script_cha1.PlayAnim("dodge"); //temp = script_cha1.PlayAnimQueued("attackex2"); //temp.speed = 0.28f; //temp.layer = 2; //temp = script_cha1.PlayAnimQueued("attackex2_impact"); //temp.speed = 0.25f; //temp.layer = 2; _scriptCha1.AddForwardForce(180f); int index = 31; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_edge_wheel").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.1f + _mytransform.forward * 0.2f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.1f + _mytransform.forward * 0.2f; skillInfo.instance.transform.rotation = _mytransform.rotation; skillInfo.instance.SetActive(true); } private async void Sk_33_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill04"); int index = 32; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_swamp").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.01f + _mytransform.forward * 0.5f, Quaternion.identity); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.01f + _mytransform.forward * 0.5f; skillInfo.instance.SetActive(true); } private async void Sk_34_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill04"); int index = 33; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_multispear").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.1f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.1f; skillInfo.instance.transform.rotation = _mytransform.rotation; skillInfo.instance.SetActive(true); } private async void Sk_35_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 34; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_fincanon").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position, _mytransform.rotation); instance.parent = _mytransform; skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = skillatk; skillInfo.instance.SetActive(true); skillInfo.instance.transform.position = _mytransform.position; skillInfo.instance.transform.rotation = _mytransform.rotation; skillInfo.instance.transform.parent = _mytransform; this.GetComponent().enabled = false; _scriptCha1.Invincibility(3f); } private async void Sk_36_(int damage, int[] args) { _scriptCha1.PlayAnimation(EntityPlayer.Hash_WheelWind); int index = 35; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_flowerfan").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + Vector3.up * 0.1f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.transform.position = _mytransform.position + Vector3.up * 0.1f; skillInfo.instance.transform.rotation = _mytransform.rotation; skillInfo.instance.SetActive(true); } private async void Sk_37_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 36; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_chain").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position - Vector3.up * 0.1f, Quaternion.identity); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); skillInfo.instance.transform.position = _mytransform.position - Vector3.up * 0.1f; } private async void Sk_38_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill03"); int index = 37; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_arrow_poison").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + _mytransform.forward * 0.05f + Vector3.up * 0.07f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.1f + Vector3.up * 0.07f; skillInfo.instance.transform.rotation = _mytransform.rotation; } private async void Sk_39_(int damage, int[] args) { _scriptCha1.PlayAnimation("rapidstab"); int index = 38; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_rapidthrust").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + _mytransform.forward * 0.15f + Vector3.up * 0.05f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.15f + Vector3.up * 0.05f; skillInfo.instance.transform.rotation = _mytransform.rotation; } private async void Sk_40_(int damage, int[] args) { _scriptCha1.PlayAnimation("skill04"); int index = 39; var skillInfo = _skillInfos[index]; if (skillInfo == null) { skillInfo = new SkillInfo(); _skillInfos[index] = skillInfo; var load_skobj = await LoadAssetAsync("general_elec_shock").Task; var instance = Object.Instantiate(load_skobj.transform, _mytransform.position + _mytransform.forward * 0.22f + Vector3.up * 0.06f, _mytransform.rotation); skillInfo.instances.Add(instance.gameObject); } skillInfo.instance.GetComponent().mass = damage; skillInfo.instance.SetActive(true); skillInfo.instance.transform.position = _mytransform.position + _mytransform.forward * 0.22f + Vector3.up * 0.06f; skillInfo.instance.transform.rotation = _mytransform.rotation; } private void UpdateSkill() { if (_skillIndex != -1) { _castingDelay += Time.unscaledDeltaTime; if (_castingDelay > 1f) { _scriptCha1.drag = 10f; Time.timeScale = 1f; //script_cha1.StopAnim(); //FireSkill(_skillIndex); _castingDelay = 0f; directionArrow.GetComponent().enabled = false; } } if (!_repeat || _currentDelay <= 0f) { return; } _currentDelay -= Time.unscaledDeltaTime; if (_currentDelay <= 0f) { _repeatTime--; if (_repeatTime > 0) { Repeatskill(_repeatKind, _repeatTime, _repeatDelay); } else { _repeat = false; } } } /// /// /// /// /// private AsyncOperationHandle LoadAssetAsync(string name) { string key = $"skill/{name}.prefab"; return AssetProxy.Instance.TryGetAssetAsync(key, nameof(Cha_Skill)); } /// /// 预加载 /// private void PreloadAsset() { StartCoroutine(PreloadAssetCO()); } /// /// /// /// private IEnumerator PreloadAssetCO() { yield return new WaitForSeconds(2f); //LoadAssetAsync("general_spiritsword"); } #endregion #region Unity private void Awake() { _mytransform = this.transform; } private void Start() { AssetProxy.Instance.CreateReleasePool(nameof(Cha_Skill)); _scriptCha1 = GetComponent(); _scriptSound = GetComponent(); _scriptRotfog = ef_rotfog.GetComponent(); pt_ki = _mytransform.Find("pt_ki"); directionArrow = _mytransform.Find("directionArrow"); this.PreloadAsset(); } private void OnDestroy() { AssetProxy.Instance.RemoveReleasePool(nameof(Cha_Skill)); } // Update is called once per frame private void FixedUpdate() { UpdateSkill(); } #if !UNITY_WEBGL && UNITY_EDITOR private void OnGUI() { if (KGMOptions.Instance != null && KGMOptions.Instance.技能开关) for (int i = 0; i < 40; i++) { if (GUILayout.Button($"{i + 1}", GUILayout.MinWidth(100), GUILayout.MinHeight(50))) { int[] args = new int[10]; FireSkill(i + 1, args); } } } #endif #endregion } }