/// <summary> /// 使用指定编号的技能 进行攻击 /// </summary> /// <param name="skillId">技能编号</param> /// <param name="isBatter">连续攻击:连攻</param> public void AttackUseSkill(int skillId, bool isBatter) { //如果是连续攻击,获取下一个技能编号 if (isBatter && currentUseSkill != null) { skillId = currentUseSkill.nextBatterId;// } //1 通过编号准备 出 对应的技能数据对象 currentUseSkill = skillMgr.PrepareSkill(skillId); if (currentUseSkill == null) { return; } //2 播放技能 对应的 攻击动画【技能施放 由动画事件调用】 chAnim.PlayAnimation(currentUseSkill.animationName);//**!!! //3 找出受攻击的目标 var selectedTarget = SelectTarget(); if (selectedTarget == null) { return; //!!! } //4 显示选中的目标效果(模型 上 红圈) //让上一个目标 隐藏红圈,让当前目标 显示红圈 ShowSelectedFx(false); currentAttackTarget = selectedTarget;//将刚刚找出的目标作为当前目标 ShowSelectedFx(true); //5 面向目标 transform.LookAt(selectedTarget.transform); }
/// <summary> /// 使用某个技能进行攻击 /// </summary> /// <param name="skillId">技能编号</param> /// <param name="isBatter">是否连续攻击</param> public void AttackUseSkill(int skillId, bool isBatter = false) { //1根据技能吧编号 找出技能数据对象 currentUseSkill = skillMgr.PrepareSkill(skillId); if (null == currentUseSkill) { return; } //2播放技能对应的攻击动画 chAnim.PlayAnimation(currentUseSkill.animationName); //3找出受击目标 var selectedTarget = SelectTarget(); if (null == selectedTarget) { return; } //4显示选择目标效果【红圈】 ShowSelectedFx(false); // 前一个目标 选中效果 隐藏 currentAttackTarget = selectedTarget; // 更新当前目标 ShowSelectedFx(true); // 当前目标 选中效果 显示 //5面向目标 transform.LookAt(selectedTarget.transform); transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0); }
/// <summary> /// 移动 =经验!方法多 /// </summary> public void Move(float x, float z) { if (x != 0 || z != 0) { //1转向 前往的方向 LookAtTarget(new Vector3(x, 0, z)); //2向目标运动:核心 调用 内置组件提供的方法【角色控制器的 运动的方法】 //-1 表示,模拟重力:保证主角贴在地面上,不会飘起来! Vector3 motion = new Vector3(transform.forward.x, -1, transform.forward.z); chController.Move(motion * Time.deltaTime * moveSpeed); //3播放运动动画 chAnim.PlayAnimation("run"); } else { chAnim.PlayAnimation("idle"); } }
/// <summary> /// 移动 游戏场景中的移动的做法=积累 经验 /// </summary> public void Move(float h, float v) { if (h != 0 || v != 0) { //1转向前往的方向 TransformHelper.LookAtTarget(new Vector3(h, 0, v), transform, rotationSpeed); //2生成一个移动的方向 //山地:凹凸不平,y=-1 模拟重力 =试一试 Vector3 dir = new Vector3(transform.forward.x, -1, transform.forward.z); //3调用角色控制器的Move的方法 chController.Move(dir * Time.deltaTime * moveSpeed); //4播放运动动画 chAnim.PlayAnimation("move"); } else { //播放闲置动画 chAnim.PlayAnimation("idle"); } }
/// <summary> /// 移动 /// </summary> public void Move(float x, float z) { if (x != 0 || z != 0) { //1.转向 //LookAtTarger(new Vector3(x, 0, z)); TransformHelper.LookAtTarger(new Vector3(x, 0, z), transform, rotationSpeed); //2.向目标运动:调用角色控制器的运动方法 //-1表示模拟重力,贴地走路 Vector3 motion = new Vector3(transform.forward.x, -1, transform.forward.z); chController.Move(motion * Time.deltaTime * moveSpeed); //3.播放动画 chAnim.PlayAnimation("run"); } else { chAnim.PlayAnimation("idle"); } }
/// <summary> /// 使用指定编号的技能进行攻击 /// </summary> /// <param name="skill">技能编号</param> /// <param name="Bool">是否连续攻击</param> public void AttackUseSkill(int skillID, bool isBatter) { //如果是连击,获取下一个技能编号 if (isBatter && currentUseSkill != null) { skillID = currentUseSkill.nextBatterId; } //1 通过编号 获取技能 currentUseSkill = skillMgr.PrePareSkill(skillID); //2 播放技能对应的攻击动画,技能释放 由动画事件调用 if (currentUseSkill == null) { print("播放攻击动画"); return; } chAnim.PlayAnimation(currentUseSkill.animationName); //3 找出受攻击的目标 var objTarget = SelectTarget(); if (objTarget == null) { return; } //4 显示选中的目标效果 ShowSelectedFx(false); //将刚找出的目标作为攻击目标 currentAttackTarget = objTarget; ShowSelectedFx(true); //5 面向目标 //transform.LookAt(objTarget.transform.position); Vector3 euler = Quaternion.LookRotation(objTarget.transform.position - transform.position).eulerAngles; transform.eulerAngles = new Vector3(0, euler.y, 0); }
/// <summary> /// 撤销动画播放 /// </summary> public void OnCancelAnim(string animName) { anim.PlayAnimation("idle"); }