void recoveryBreath() //恢复气息 { if (CharacterAttribute.GetInstance().Breath_real < CharacterAttribute.GetInstance().MaxBreath&& (CharacterControl.instance.currentState == state.normal || CharacterControl.instance.currentState == state.walk) && !Scene.instance.isInit) //初始化中不可回复 { CharacterAttribute.GetInstance().Breath = CharacterAttribute.GetInstance().Breath_real + (CharacterAttribute.GetInstance().isOverLoad_breath? CharacterAttribute.GetInstance().Speed_recovery_overload : CharacterAttribute.GetInstance().Speed_recovery) * Time.deltaTime; } }
bool shoot() //射击 { if (MyInput.instance.isGetShoot() && isEnable[(int)state.shoot] && isGetInput) { if (isJump) { if (JumpShootTimes < MaxJumpShootTimes && !CharacterAttribute.GetInstance().isOverLoad_breath) { currentState = state.jumpshoot; //CharacterObjectManager.instance.arrow_2(); YJumpSpeed = 0; rig.velocity = new Vector2(0, 0); //停滞在空中 JumpShootTimes++; CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_jumpshoot; //气息消耗 } } else { if (!CharacterAttribute.GetInstance().isOverLoad_breath) { currentState = state.shoot; CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_shoot; //气息消耗 Invoke("arrow", 0.2f); } } return(true); } return(false); }
public bool hurt(int Damage, Attribute attribute, Vector3 CollCenter) //受伤调用函数 { float hurt_contined_time = 1; //无敌持续时间 if (!isHurt) { //方向 if (CollCenter.x > transform.position.x) { Dir = dir.right; } else { Dir = dir.left; } if (Event_hurt != null) { Event_hurt(); } CharacterAttribute.GetInstance().reduce_HP(Damage); isHurt = true; currentState = state.hurt; _dashTime = 0; Invoke("end_invincibility", hurt_contined_time); CharacterObjectManager.instance.BeHurt(); //开启图片动画 return(true); } return(false); }
private void opneNewGemGroove(int i) //开启一个新的武器槽 { int currentNum = 0; i -= 1; switch (armsInfo[currentArms].name) //更新人物数据 { case "swords": CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].currentGemNum++; currentNum = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].currentGemNum; break; case "arrow": CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].currentGemNum++; currentNum = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].currentGemNum; break; case "spear": CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].currentGemNum++; currentNum = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].currentGemNum; break; } StartCoroutine(IE_openNewGroove(currentNum - 1)); GemGroove[currentNum - 1].GetComponent <Button>().enabled = false; //禁用按钮 Bag.getInstance().ConsumeFragment(PerGrooveFragNum); //消耗碎片 }
private void OnEnable() { CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].GemWork(); //结晶作用 rig.velocity = new Vector2(CharacterControl.instance.Dir == dir.left ? -speed : speed, 0); SRenderer.flipX = CharacterControl.instance.Dir == dir.left ? true : false; boxCol.enabled = true; trailRenderer.enabled = true; particle.enabled = true; isTrigger = false; Vector3 characterPosition = CharacterControl.instance.transform.position; transform.parent = null; // 防止物体跟随主角 transform.localPosition = CharacterControl.instance.Dir == dir.left ? new Vector3(characterPosition.x - 1.3f, characterPosition.y + 1.37f, characterPosition.z - 9) : new Vector3(characterPosition.x + 1.3f, characterPosition.y + 1.32f, -9); //初始化位置 //根据属性改变颜色 Material a = trailRenderer.material; a.SetColor("_Color", GameData.Attribute2Color(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.arrow])); //颜色减淡 SR.color = GameData.Attribute2Color(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.arrow]); //获取当前属性和伤害 currentAttribute = CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.arrow]; damage = CharacterAttribute.GetInstance().Attack[(int)Arms.arrow]; ElementTrigger.element = currentAttribute; }
void work() { //增加血量 CharacterAttribute.GetInstance().add_HP(SoulAmout); StartCoroutine(IE_effect()); }
virtual public bool Take(Arms arms) //返回是否操作成功 { if (CharacterAttribute.GetInstance().ArmsGemGroove[(int)arms].getLeftGrooveNum() <= 0) //是否有空出的槽 { return(false); } attachArms = arms; return(true); } //佩戴
private void OnTriggerEnter2D(Collider2D collision) { if (t == false) { CharacterAttribute.GetInstance().add_HP(add_num); sRenderer.color = new Color(sRenderer.color.r, sRenderer.color.g, sRenderer.color.b, 0.5f); t = true; } }
bool Throw() //扔 { if (MyInput.instance.isGetThrow() && CharacterAttribute.GetInstance().isEnable[(int)state.Throw] && !CharacterAttribute.GetInstance().isOverLoad_breath&& isGetInput) { currentState = state.Throw; CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_throw; return(true); } return(false); }
public override bool TakeOff() { if (base.TakeOff() == false) { return(false); } CharacterAttribute.GetInstance().ArmsAttribute[(int)attachArms] = Attribute.normal; return(true); }
public void putOnGem(int ItemIndex) { if (Bag.getInstance().GemItem[ItemIndex] != null) //当前格子是否有物品 { switch (armsInfo[currentArms].name) //更新人物数据 { case "swords": if (Bag.getInstance().GemItem[ItemIndex].Take(Arms.swords)) { int i = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].takeOn(Bag.getInstance().GemItem[ItemIndex]); //装备结晶 Bag.getInstance().GemItem[ItemIndex] = null; //该格子变为空 updateGemGroove(); //更新显示 updateGemItemShow(); InfoBoxRect.gameObject.SetActive(false); StartCoroutine(Animation_putonGem(i)); return; } break; case "arrow": if (Bag.getInstance().GemItem[ItemIndex].Take(Arms.arrow)) { int i = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].takeOn(Bag.getInstance().GemItem[ItemIndex]); //装备结晶 Bag.getInstance().GemItem[ItemIndex] = null; updateGemGroove(); //更新显示 updateGemItemShow(); InfoBoxRect.gameObject.SetActive(false); StartCoroutine(Animation_putonGem(i)); return; } break; case "spear": if (Bag.getInstance().GemItem[ItemIndex].Take(Arms.spear)) { int i = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].takeOn(Bag.getInstance().GemItem[ItemIndex]); //装备结晶 Bag.getInstance().GemItem[ItemIndex] = null; updateGemGroove(); //更新显示 updateGemItemShow(); InfoBoxRect.gameObject.SetActive(false); StartCoroutine(Animation_putonGem(i)); return; } break; } } StartCoroutine(Animation_shake(GemItem[ItemIndex].transform)); //播放无法穿戴动画 }
private void OnTriggerEnter2D(Collider2D collision) { if (collision.tag.CompareTo("Player") == 0 && isEnable) { isEnable = false; bloom_SR.color = GameFunction.Transparent; coin_SR.color = GameFunction.Transparent; bl_SR.color = GameFunction.Transparent; CharacterAttribute.GetInstance().coinNum++; //加钱 StartCoroutine(animation_getCoin()); } }
private void OnEnable() { CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].GemWork(); //结晶作用 try { ElementTrigger.element = CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.swords]; } catch { } animator.SetTrigger(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.swords].ToString()); //根据属性更改动画 isContact = false; }
bool dash() { if (MyInput.instance.isGetDash() && isEnable[(int)state.dash] && !CharacterAttribute.GetInstance().isOverLoad_breath&& dashTimes < 1 && isGetInput) { dashTimes++; currentState = state.dash; //冲刺 CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_dash; CharacterObjectManager.instance.dash(); Timer_dashScale = 0; return(true); } return(false); }
// Update is called once per frame void Update() { if (CharacterAttribute.GetInstance().isOverLoad_breath) { Img.color = Color.Lerp(overload_min, overload_max, CharacterAttribute.GetInstance().Breath_real / CharacterAttribute.GetInstance().MaxBreath); } else { Img.color = normal; } rTrans.sizeDelta = GameFunction.getVector2(CharacterAttribute.GetInstance().Breath_real * 183 / CharacterAttribute.GetInstance().MaxBreath, 18); }
private void FixedUpdate() { //过载 if (CharacterAttribute.GetInstance().Breath_real <= 0) { CharacterAttribute.GetInstance().isOverLoad_breath = true; } //是否恢复 if (CharacterAttribute.GetInstance().Breath_real >= CharacterAttribute.GetInstance().MaxBreath) { CharacterAttribute.GetInstance().isOverLoad_breath = false; } recoveryBreath(); }
IEnumerator IE_getSoul() { isNone = true; Halo.GetComponent <TrailRenderer>().enabled = true; float _time0 = 0; Vector3 t_originPos_Halo = Halo.transform.position; Vector3 p1, p2; Vector3 _dir = Halo.transform.position - CharacterControl.instance.transform.position; Vector3 _dir_2 = Vector3.Cross(_dir, Vector3.back); _dir.z = 0; _dir_2.z = 0; p1 = Halo.transform.position + _dir * 2f; p2 = (CharacterControl.instance.transform.position + Halo.transform.position) / 2.0f + _dir_2 * 1f; p1.z = 0; p2.z = 0; while (_time0 < animation_duration) { _time0 += Time.deltaTime; float t = _time0 / animation_duration; Halo.transform.position = BezierLine(t_originPos_Halo, CharacterControl.instance.transform.position + Vector3.up, p1, p2, t); yield return(null); } CharacterAttribute.GetInstance().add_HP(CharacterAttribute.GetInstance().MaxHP); _time0 = 0; Soul.SetActive(false); SpriteRenderer t_SR = Halo.GetComponent <SpriteRenderer>(); while (_time0 < duration_expand) { _time0 += Time.deltaTime; float t = _time0 / duration_expand; Halo.transform.localScale = Vector3.Lerp(Halo.transform.localScale, Vector3.one * 6f, t); t_SR.color = Color.Lerp(t_SR.color, new Color(1, 1, 1, 0), t); yield return(null); } Particle.SetActive(false); Halo.SetActive(false); }
private void OnTriggerEnter2D(Collider2D collision) { if (collision.tag.CompareTo("enemy") == 0) //攻击敌人 { CharacterControl.instance.add_Velocity(new Vector2(CharacterControl.instance.Dir == dir.left ? backVelocity_enemy: -backVelocity_enemy, 0)); //击退并加特效 if (!isContact) { GameObject t = CharacterObjectManager.instance.getHitPoint(); t.SetActive(true); t.transform.position = collision.bounds.center; t.transform.rotation = Quaternion.Euler(0, 0, Random.Range(0, 360)); CharacterObjectManager.instance.PlaySwordHurtParticle(collision.bounds.center); isContact = true; } CharacterObjectManager.instance.sendHurt(CharacterAttribute.GetInstance().Attack[(int)Arms.swords], CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.swords], collision.gameObject.GetInstanceID(), CharacterControl.instance._collider.bounds.center); } }
private void OnCollisionStay2D(Collision2D collision) { Collider.isTrigger = true; //碰到物体变为触发器 HitPoint = collision.contacts[0]; //获取碰撞点 if (collision.gameObject.layer.CompareTo(LayerMask.NameToLayer("terrain")) == 0) { if (!isContact) { GameObject t = CharacterObjectManager.instance.getHitPoint(); t.SetActive(true); t.transform.position = HitPoint.point; t.transform.rotation = Quaternion.Euler(0, 0, Random.Range(0, 360)); CharacterObjectManager.instance.PlaySwordHurtParticle(HitPoint.point); isContact = true; } CharacterObjectManager.instance.sendHurt(0, CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.swords], collision.gameObject.GetInstanceID(), Vector2.zero); } }
void Start() { startPoint = GameObject.Find("startPoint").transform; current_HP = CharacterAttribute.GetInstance().HP; MaxHP = CharacterAttribute.GetInstance().MaxHP; Icon = new ArrayList(); for (int i = 0; i < MaxHP; i++) { GameObject t = Instantiate(soulIcon, position: (Vector2)startPoint.position + new Vector2(soul_space_width * i, soul_space_height * (i % 2 == 0?-1:1)), rotation: new Quaternion(0, 0, 0, 0)) as GameObject; t.transform.SetParent(this.transform, true); t.transform.localScale = new Vector3(1, 1, 1); //改回原来的比例 Icon.Add(t); if (i >= current_HP) // 对空灵魂槽的操作 { t.GetComponent <Image>().color = new Color(1, 1, 1, 0.2f); } } }
public bool hurt(int Damage, Attribute attribute) //受伤调用函数(不指定方向) { float hurt_contined_time = 1; //无敌持续时间 if (!isHurt) { if (Event_hurt != null) { Event_hurt(); } CharacterAttribute.GetInstance().reduce_HP(Damage); isHurt = true; currentState = state.hurt; _dashTime = 0; Invoke("end_invincibility", hurt_contined_time); CharacterObjectManager.instance.BeHurt(); //开启图片动画 return(true); } return(false); }
void Update() { if (CharacterAttribute.GetInstance().HP > current_HP) //HP已增加 { int num = CharacterAttribute.GetInstance().HP - current_HP; current_HP = CharacterAttribute.GetInstance().HP; add_soul(num); } if (CharacterAttribute.GetInstance().HP < current_HP) //HP已减少 { int num = current_HP - CharacterAttribute.GetInstance().HP; current_HP = CharacterAttribute.GetInstance().HP; reduce_soul(num); } if (CharacterAttribute.GetInstance().MaxHP > MaxHP) //最大HP已增加 { int num = CharacterAttribute.GetInstance().MaxHP - MaxHP; MaxHP = CharacterAttribute.GetInstance().MaxHP; add_MaxSoul(num); } }
public void TakeOffGem(int i) //卸下结晶 { //放入背包 //从武器槽脱下 //属性重设 if (Bag.getInstance().getLeftItem() <= 0) { return; //背包空间不足 } Arms type = name2type(armsInfo[currentArms].name); CharacterAttribute.GetInstance().ArmsGemGroove[(int)type].GemItem[i].TakeOff(); int t = Bag.getInstance().putGemIntoBag(CharacterAttribute.GetInstance().ArmsGemGroove[(int)type].GemItem[i]); CharacterAttribute.GetInstance().ArmsGemGroove[(int)type].GemItem[i] = null; //更新显示 updateGemGroove(); updateGemItemShow(); StartCoroutine(Animation_putoffGem(t)); //动画 return; }
bool attack() //封装攻击 { if (MyInput.instance.isGetAttack() && isEnable[(int)state.attack1] && !CharacterAttribute.GetInstance().isOverLoad_breath&& isGetInput) { if (isAttack && _DoubleAttackSpaceTime < DoubleAttackSpaceTime) { currentState = state.attack2; isAttack = false; _DoubleAttackSpaceTime = 0; CharacterObjectManager.instance.attack2(Dir); } else { currentState = state.attack1; isAttack = true; _DoubleAttackSpaceTime = 0; CharacterObjectManager.instance.attack1(Dir); } CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_attack; //气息消耗 return(true); } return(false); }
private void OnEnable() { CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].GemWork(); //结晶作用 rig.velocity = new Vector2(CharacterControl.instance.Dir == dir.left ? -1 : 1, tan) * speed; //初始速度 boxCol.enabled = true; trailRenderer.enabled = true; particle.enabled = true; isTrigger = false; transform.parent = null; // 防止物体跟随主角 //根据属性改变颜色 Material t = trailRenderer.material; t.SetColor("_Color", GameData.Attribute2Color(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.spear])); //颜色减淡 SR.color = GameData.Attribute2Color(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.spear]); currentAttribute = CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.spear]; //获取当前属性 damage = CharacterAttribute.GetInstance().Attack[(int)Arms.spear]; //获取当前伤害 ElementTrigger.element = currentAttribute; }
void Init() //重新读取人物属性 { JumpTimes = CharacterAttribute.GetInstance().JumpTimes; MaxJumpShootTimes = CharacterAttribute.GetInstance().MaxJumpShootTimes; isEnable = CharacterAttribute.GetInstance().isEnable; }
private void Start() { headOutline = GameObject.Find("Head").GetComponent <Outline>(); HeadOriginPos = headOutline.gameObject.transform.position; GemInfo = readInfo(); //读取结晶信息 //--初始化 point = new RectTransform[3]; point[2] = GameObject.Find("arms_point_left").GetComponent <RectTransform>(); point[0] = GameObject.Find("arms_point_middle").GetComponent <RectTransform>(); point[1] = GameObject.Find("arms_point_right").GetComponent <RectTransform>(); //初始化各个武器的位置 if (CharacterAttribute.GetInstance().isEnable[(int)state.attack1]) //检查当前有哪些武器 { ArmsList.Add(sword); } else { sword.gameObject.SetActive(false); } if (CharacterAttribute.GetInstance().isEnable[(int)state.shoot]) { ArmsList.Add(arrow); } else { arrow.gameObject.SetActive(false); } if (CharacterAttribute.GetInstance().isEnable[(int)state.jumpshoot]) { ArmsList.Add(spear); } else { spear.gameObject.SetActive(false); } armsInfo = new ArmsInfo[ArmsList.Count]; for (int i = 0; i < ArmsList.Count; i++) { ((RectTransform)ArmsList[i]).position = point[i].position; armsInfo[i].rectTrans = ((RectTransform)ArmsList[i]); armsInfo[i].name = ((RectTransform)ArmsList[i]).name; armsInfo[i].pos = i; armsInfo[i].image = ((RectTransform)ArmsList[i]).gameObject.GetComponent <Image>(); if (i == 0) //改变样式 { ((RectTransform)ArmsList[i]).localScale = new Vector2(maxArmsScale, maxArmsScale); armsInfo[i].image.color = Color.white; currentArms = i; } else { ((RectTransform)ArmsList[i]).localScale = new Vector2(1, 1); armsInfo[i].image.color = backArmsColor; } } updateGemGroove(); //更新当前武器槽的显示 updateGemItemShow(); //更新所携带的结晶 updateArmsFragNum(); //更新武器槽碎片数量 }
void updateGemGroove() //更新武器槽的显示 { ArmsGemGroove currentGemGroove; for (int i = 0; i < Gem.Length; i++) //初始化武器上结晶的大小 { Gem[i].transform.localScale = new Vector3(1, 1, 1); } switch (armsInfo[currentArms].name) //获取当前武器槽的信息 { case "swords": currentGemGroove = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords]; break; case "arrow": currentGemGroove = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow]; break; case "spear": currentGemGroove = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear]; break; default: currentGemGroove = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords]; break; } for (int i = 0; i < GemGroove.Length; i++) { if (i < currentGemGroove.currentGemNum) { GemGroove_Disable[i].gameObject.SetActive(false); GemGroove[i].GetComponent <Image>().color = Color.white; GemGroove[i].GetComponent <Button>().enabled = false; if (currentGemGroove.GemItem[i] == null) //有格子无物品 { GemGroove_None[i].gameObject.SetActive(true); Gem[i].gameObject.SetActive(false); } else// 添加当前所镶嵌宝石的图片 有格子有物品 { Gem[i].color = Color.white; GemGroove_None[i].gameObject.SetActive(false); Gem[i].gameObject.SetActive(true); switch (armsInfo[currentArms].name) { case "swords": Gem[i].sprite = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].GemItem[i].sprite; break; case "arrow": Gem[i].sprite = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].GemItem[i].sprite; break; case "spear": Gem[i].sprite = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].GemItem[i].sprite; break; } } } else //无格子 { GemGroove_Disable[i].gameObject.SetActive(true); GemGroove_None[i].gameObject.SetActive(false); Gem[i].gameObject.SetActive(false); GemGroove[i].GetComponent <Image>().color = GemGrooveDisableColor; GemGroove[i].GetComponent <Button>().enabled = true; } } }
private void OnEnable() { if (isInt) { ArmsList.Clear(); //初始化各个武器的位置 if (CharacterAttribute.GetInstance().isEnable[(int)state.attack1]) //检查当前有哪些武器 { ArmsList.Add(sword); } else { sword.gameObject.SetActive(false); } if (CharacterAttribute.GetInstance().isEnable[(int)state.shoot]) { ArmsList.Add(arrow); } else { arrow.gameObject.SetActive(false); } if (CharacterAttribute.GetInstance().isEnable[(int)state.jumpshoot]) { ArmsList.Add(spear); } else { spear.gameObject.SetActive(false); } armsInfo = new ArmsInfo[ArmsList.Count]; for (int i = 0; i < ArmsList.Count; i++) { ((RectTransform)ArmsList[i]).position = point[i].position; armsInfo[i].rectTrans = ((RectTransform)ArmsList[i]); armsInfo[i].name = ((RectTransform)ArmsList[i]).name; armsInfo[i].pos = i; armsInfo[i].image = ((RectTransform)ArmsList[i]).gameObject.GetComponent <Image>(); if (i == 0) //改变样式 { ((RectTransform)ArmsList[i]).localScale = new Vector2(maxArmsScale, maxArmsScale); armsInfo[i].image.color = Color.white; currentArms = i; } else { ((RectTransform)ArmsList[i]).localScale = new Vector2(1, 1); armsInfo[i].image.color = backArmsColor; } } headOutline.effectDistance = Vector2.zero; //初始化徽章的状态 isPlayAnimation_0 = false; headOutline.gameObject.transform.position = HeadOriginPos; InfoBoxRect.gameObject.SetActive(false); for (int i = 0; i < Dirty.Length; i++) { Dirty[i].SetActive(false); //防止重复播放 } //初始化开启武器槽动画 for (int i = 0; i < Frags.Length; i++) { Frags[i].transform.position = Frag_icon.transform.position; Frags[i].SetActive(false); } Frags[0].GetComponent <TrailRenderer>().enabled = true; Frags[0].transform.GetChild(0).gameObject.SetActive(true); Frags[0].transform.localScale = Frags[1].transform.localScale; //提示框隐藏 OpenNewGroove_MessageBox.SetActive(false); isAnimation_openGroove = false; updateGemGroove(); //更新当前武器槽的显示 updateGemItemShow(); //更新所携带的结晶 updateArmsFragNum(); //更新武器槽碎片数量 } else { isInt = true; } }
private void Update() { isJump = !OnGround(); //测试 isInRain = checkIsInRain(); //是否在雨中 if (isHorizontalBounce) { rig.velocity = new Vector2(rig.velocity.x, rig.velocity.y); } else { rig.velocity = new Vector2(0, rig.velocity.y); } switch (currentState) { case state.normal: changeDir(); // 行走 if ((isDoubleKeyDown() != 0 || MyInput.instance.isGetRun()) && isEnable[(int)state.run] && !CharacterAttribute.GetInstance().isOverLoad_breath) { currentState = state.run; //双击变为奔跑 } if (MyInput.instance.isGetJumpDown() && isEnable[(int)state.jump] && isGetInput) { currentState = state.jump; //跳跃 XJumpSpeed = Walkspeed + 2.5f; } attack(); // 攻击 shoot(); //射击 Throw(); //扔 dash(); //冲刺 if (OnGround() == false) { currentState = state.fall; //落下 XJumpSpeed = Walkspeed + 2.5f; YJumpSpeed = 0; } break; case state.walk: currentState = state.normal; //闲置 changeDir(); if ((isDoubleKeyDown() != 0 || MyInput.instance.isGetRun()) && isEnable[(int)state.run] && !CharacterAttribute.GetInstance().isOverLoad_breath) { currentState = state.run; //奔跑 } if (MyInput.instance.isGetJumpDown() && isEnable[(int)state.jump] && isGetInput) { currentState = state.jump; //跳跃 XJumpSpeed = Walkspeed + 2.5f; } dash(); //冲刺 Throw(); //扔 attack(); // 攻击 shoot(); //射击 if (OnGround() == false) { currentState = state.fall; //落下 XJumpSpeed = Walkspeed + 2.5f; YJumpSpeed = 0; } break; case state.run: if ((CharacterAttribute.GetInstance().isOverLoad_breath)) { currentState = state.normal; break; //如果气息不够则退回站立状态 } CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_run *Time.deltaTime; //奔跑气息消耗 if (MyInput.instance.isGetLeft() && isGetInput) { rig.velocity += new Vector2(-RunSpeed, 0); Dir = dir.left; } if (MyInput.instance.isGetRight() && isGetInput) { rig.velocity += new Vector2(RunSpeed, 0); Dir = dir.right; } if (MyInput.instance.isGetLeftUp() || MyInput.instance.isGetRightUp() && isGetInput) { currentState = state.normal; //闲置 } attack(); // 攻击 shoot(); //射击 Throw(); //扔 dash(); //冲刺 if (MyInput.instance.isGetJumpDown() && isEnable[(int)state.jump] && isGetInput) { currentState = state.jump; //跳跃 XJumpSpeed = RunSpeed + 1; } if (OnGround() == false) { currentState = state.fall; //落下 XJumpSpeed = RunSpeed + 1; YJumpSpeed = 0; } break; case state.jump: if (JumpAccelerateTime < 0.01f) { _Timer_JumpScale = 0; } isDoubleKeyDown(); //计时 currentState = state.fall; //下落 if (isPlatJump) //连跳 { isPlatJump = false; JumpAccelerateTime = 0; YJumpSpeed = JumpSpeed; rig.velocity = Vector2.zero; _jumpTimes++; canJump = false; Time_pressJumpKey = 0; } //是否在跳跃(按键) if (MyInput.instance.isGetJump() && isGetInput) { Time_pressJumpKey += Time.deltaTime; canJump = true; } else { canJump = false; } if (Time_pressJumpKey > MaxJumpTime * (XJumpSpeed < RunSpeed ? 0.92f : 1.0f) * 0.6f) //剩余50%时间自动跳跃 { canJump = true; } if (JumpAccelerateTime < MaxJumpTime * (XJumpSpeed < RunSpeed ? 0.92f : 1.0f) && !CharacterAttribute.GetInstance().isOverLoad_breath&& canJump) { CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_jump *Time.deltaTime; //气息消耗 JumpAccelerateTime += (Time.deltaTime * jumpTimeFactor); //YJumpSpeed = YJumpSpeed - Mathf.Pow(Yacceleration * Time.deltaTime,3); YJumpSpeed = ((-JumpSpeed / Mathf.Pow(MaxJumpTime * (XJumpSpeed < RunSpeed ? 0.92f : 1.0f), 2)) * Mathf.Pow(JumpAccelerateTime, 2) + JumpSpeed); if (YJumpSpeed < 0) { YJumpSpeed = 0; } rig.velocity = GameFunction.getVector2(rig.velocity.x, YJumpSpeed); currentState = state.jump; } JumpMove(); //跳跃时移动 //跳跃形变 _Timer_JumpScale += (Time.deltaTime * jumpTimeFactor); float t_jumpScale = _Timer_JumpScale / (jumpScale_Time); transform.localScale = Vector3.Lerp(Dir == dir.right?jumpScale:GameFunction.getVector3(-jumpScale.x, jumpScale.y, jumpScale.z), Dir == dir.right?originScale:GameFunction.getVector3(-originScale.x, originScale.y, originScale.z), t_jumpScale); if (attack()) //攻击 { rig.velocity = GameFunction.getVector2(rig.velocity.x, 0); YJumpSpeed = 0; } shoot(); //射击 if (Throw()) //扔 { rig.velocity = GameFunction.getVector2(rig.velocity.x, 0); YJumpSpeed = 0; } if (dash()) //冲刺 { dashTimes = 1; } if (AtTop()) //判断是否顶到墙 { currentState = state.fall; YJumpSpeed = 0; } if (currentState == state.fall) //使动作更加自然 { YJumpSpeed = 0; } break; case state.dash: isDoubleKeyDown(); //计时 if (attack()) //攻击 { YJumpSpeed = 0; _dashTime = 0; } if (shoot()) //射击 { YJumpSpeed = 0; _dashTime = 0; } _dashTime += Time.deltaTime; Timer_dashScale += Time.deltaTime; float t_dashScale = Timer_dashScale / (proportion_dashScale * DashTime); transform.localScale = Vector3.Lerp(Dir == dir.right ? dashScale : GameFunction.getVector3(-dashScale.x, dashScale.y, dashScale.z), Dir == dir.right ? originScale : GameFunction.getVector3(-originScale.x, originScale.y, originScale.z), t_dashScale); rig.velocity = new Vector2(Dir == dir.left ? -DashSpeed : DashSpeed, 0); if (_dashTime > DashTime) { currentState = isJump ? state.fall : state.endDash; YJumpSpeed = 0; _dashTime = 0; //完全冲刺后产生惯性 if (isJump) { StartCoroutine(IE_dashInertia()); } else { _Timer_dash = 0; } } break; case state.attack1: // 空中攻击移动----------------- if (isJump) { //JumpMove(); YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime; if (YJumpSpeed > JumpSpeed) { YJumpSpeed = JumpSpeed; } rig.velocity = new Vector2(rig.velocity.x, -YJumpSpeed); } //--------------------------------- if (!isPlayAnimation()) { if (isJump) { currentState = state.fall; } else { currentState = state.normal; } } break; case state.attack2: // 空中攻击移动----------------- if (isJump) { //JumpMove(); YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime; if (YJumpSpeed > JumpSpeed) { YJumpSpeed = JumpSpeed; } rig.velocity = new Vector2(rig.velocity.x, -YJumpSpeed); } //--------------------------------- if (!isPlayAnimation()) { if (isJump) { currentState = state.fall; } else { currentState = state.normal; } } break; case state.jumpshoot: if (isJumpShootBack) { _time3 += Time.deltaTime; //后退效果 if (_time3 < jumpshoot_backTime) { rig.velocity = new Vector2(Dir == dir.left ? 20 : -20, 18); } else { rig.velocity = Vector2.zero; } if (!isPlayAnimation()) { isJumpShootBack = false; _time3 = 0; currentState = state.fall; } } break; case state.shoot: if (!isPlayAnimation()) { currentState = state.normal; } break; case state.hurt: int t = 20; _hurtTime += Time.deltaTime; rig.velocity = new Vector2((Dir == dir.left ? (-t / HurtTime * _hurtTime + t) : -(-t / HurtTime * _hurtTime + t)), 0); YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime; //为Y轴添加重力 if (YJumpSpeed > JumpSpeed) { YJumpSpeed = JumpSpeed; } rig.velocity = new Vector2(rig.velocity.x, -YJumpSpeed); if (_hurtTime > HurtTime) { currentState = isJump == true ? state.fall : state.normal; _hurtTime = 0; } break; case state.fall: isDoubleKeyDown(); //计时 if (!isHorizontalBounce) { JumpMove(); //水平弹飞中不能移动 } YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime * jumpTimeFactor; if (YJumpSpeed > JumpSpeed) { YJumpSpeed = JumpSpeed; } if (!isBounce) { rig.velocity = GameFunction.getVector2(rig.velocity.x, -YJumpSpeed); } if (isBounce) { AtTop(); } if (MyInput.instance.isGetAttack() && isEnable[(int)state.attack1] && !CharacterAttribute.GetInstance().isOverLoad_breath&& isGetInput) //攻击 { CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_attack; currentState = state.attack1; //攻击 CharacterObjectManager.instance.attack1(Dir); } if ((MyInput.instance.isGetJumpDown() && _jumpTimes < JumpTimes && isEnable[(int)state.jump] && isGetInput) || isPlatJump) //连跳 { isPlatJump = false; currentState = state.jump; JumpAccelerateTime = 0; YJumpSpeed = JumpSpeed; rig.velocity = Vector2.zero; _jumpTimes++; canJump = false; Time_pressJumpKey = 0; } shoot(); //射击 Throw(); //扔 if (dash()) //冲刺 { dashTimes = 1; } if (OnGround()) // 判断是否落地 { currentState = state.normal; } break; case state.endDash: //惯性 _Timer_dash += Time.deltaTime; float t_endDash = _Timer_dash / DashInertiaTime; rig.velocity = Vector2.Lerp((Dir == dir.left ? Vector2.left : Vector2.right) * DashSpeed, Vector2.zero, t_endDash); if (_Timer_dash > DashInertiaTime) { currentState = state.normal; //播放粒子特效 if (!isJump) { CharacterObjectManager.instance.PlayFallParticle(isInRain); } } break; case state.Throw: // 空中移动----------------- if (isJump) { YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime; if (YJumpSpeed > JumpSpeed) { YJumpSpeed = JumpSpeed; } rig.velocity = new Vector2(rig.velocity.x, -YJumpSpeed); } //--------------------------------- if (!isPlayAnimation()) { currentState = isJump? state.fall:state.normal; } break; } if (isAttack) // 为双击计时 { _DoubleAttackSpaceTime += Time.deltaTime; if (_DoubleAttackSpaceTime > DoubleAttackSpaceTime) { isAttack = false; _DoubleAttackSpaceTime = 0; } } if (isHurt) //受伤 { flash(); // 人物闪烁 } rig.velocity += additionalVelocity; //计算额外的速度 additionalVelocity = Vector2.zero; if (lastDir != Dir) // 翻转图片 判断减少运算量 { //SpriteRenderer.flipX = SpriteRenderer.flipX == false ? true : false; GameFunction.t_Vector3 = transform.localScale; GameFunction.t_Vector3.x *= -1; transform.localScale = GameFunction.t_Vector3; } lastDir = Dir; changeAnimation(); //改变当前动画 CharacterObjectManager.instance.changeDustParticle(currentState, lastState, isJump, isInRain, Dir); //改变尘土粒子效果 correctJumpScale(); //修正跳跃形变 correntDashScale(); //修正冲刺形变 lastState = currentState; }