纳金网

标题: Unity3D角色连招脚本 [打印本页]

作者: 狂风大尉    时间: 2014-6-26 20:05
标题: Unity3D角色连招脚本

找了很久都找不到相关的角色连招脚本,唯有自己苦想,功夫不负有心人,今天花了一个下午写了段角色连招,效果还不错,特分享一下。有需要的同学可以拿去使,大鸟可以顺便帮我修改下不足的地方······用c#写的
  1. using UnityEngine;
  2. using System.Collections;

  3. public class PlayerAttackController : MonoBehaviour {
  4.         //记录当前攻击动画;
  5.         AnimationClip currentAttack;
  6.         //获取人物动画组件;
  7.         Animation playerAnimation;
  8.         //动画标签;
  9.         public enum ActionState
  10.         {
  11.                 Attack_0,
  12.                 Attack_1,
  13.                 None
  14.         }
  15.         //记录当前动画标签;
  16.         private ActionState actionState = ActionState.None;
  17.         
  18.         /**
  19.          * 攻击的逻辑
  20.          */
  21.         void AttackLogic(){
  22.                 if (Input.GetButtonDown("Fire1")){
  23.                         if (actionState != ActionState.Attack_0 && actionState != ActionState.Attack_1) {
  24.                                 actionState = ActionState.Attack_0;
  25.                         }else if (actionState == ActionState.Attack_0 && playerAnimation[currentAttack.name].time > 1.0f){
  26.                                 actionState = ActionState.Attack_1;
  27.                         }
  28.                 }
  29.         }
  30.         
  31.         /**
  32.          * 攻击套路选择
  33.          */
  34.         void Attacks (){
  35.                 float delayTime =0.0f;
  36.                 switch (actionState){
  37.                         case ActionState.Attack_0:
  38.                                 delayTime = -0.1f;
  39.                                 playerAnimation.CrossFade("Attack", 0.15f);
  40.                                 currentAttack = playerAnimation["Attack"].clip;
  41.                                 break;
  42.                                 
  43.                         case ActionState.Attack_1:
  44.                                 delayTime = -0.1f;
  45.                                 playerAnimation.CrossFade("Attack01", 0.15f);
  46.                                 currentAttack = playerAnimation["Attack01"].clip;
  47.                                 break;
  48.                                 
  49.                         case ActionState.None:
  50.                                 break;
  51.                 }
  52.                
  53.                 //Switch to default if an animation is almost over
  54.                 if (playerAnimation[currentAttack.name].time > (playerAnimation[currentAttack.name].length +delayTime)){
  55.                         actionState = ActionState.None;
  56.                         currentAttack = playerAnimation["Idle"].clip;
  57.                 }
  58.         }
  59.         
  60.         void Awake(){
  61.                 //程序开启前,获取人物动画组件;
  62.                 playerAnimation = GetComponent <Animation>() as Animation;
  63.         }
  64.         
  65.         void Start () {
  66.                 if (playerAnimation.clip) {
  67.                         currentAttack = playerAnimation.clip;
  68.                 } else {
  69.                         currentAttack = playerAnimation["Idle"].clip;
  70.                 }
  71.         }
  72.         
  73.         // Update is called once per frame
  74.         void Update () {
  75.                 if (currentAttack != null){
  76.                         AttackLogic();
  77.                         Attacks();
  78.                 }
  79.         }
  80. }
复制代码

作者: hyui    时间: 2014-6-26 21:21
感谢分享这个!
作者: HIDEOKOJIMA    时间: 2014-6-26 22:40
感谢分享这个!
作者: wucnj    时间: 2014-6-27 13:20
感谢分享!!!




欢迎光临 纳金网 (http://c-www.narkii.com/club/) Powered by Discuz! X2.5