首页 > 代码库 > Unity3D游戏开发之刀光剑影特效如何实现

Unity3D游戏开发之刀光剑影特效如何实现

更多精彩请到http://www.gopedu.com

2014-09-04 15:10:40

     

    可以看到,在这部游戏中,前两部是半即时制RPG,第三部则完全是即时制RPG。整个配乐大气磅礴,一招一式都有不错的打击感,而且武器的特效十分华丽。那么,到这里,就到了我们今天的主题:刀光剑影特效的制作。我们今天选择的PacketRPG插件,这个插件可以帮助我们快速地实现武器拖尾特效。好,下面我们开始:

         首先我们打开Unity3D、导入PocketRPG Trails。使用这个插件,我们首先要做的是需要和美工交流,以获得模型中武器的确切位置。如果不知道武器的确切位置,建议大家还是使用这个插件自带的模型吧。好,首先我们在项目中找到这个模型:

       下面我们将模型拖到场景中,展开模型,发现下面的结构:

         我们展开到left_hand_joint这是左手的关节,可以发现它的下面有两个节点,第一个是手指,第二个我们将其改名为Left_Weapon,这就是我们左手武器的位置,我们在它的下面创建一个LeftWeaponTrail,这是用来显示我们特效的组件,我们为其添加WeaponTrail脚本:

        完成该脚本的添加后,我们为其添加Mesh Renderer,选择特效材质,这里我们选择PocketRPG提供的默认材质:

        同样地,对于右手,我们采取相同的方法找到节点,为其添加特效组件,这里命名为RightWeaponTrail。接下来,我们将模型结构暂时合并到一起,我们选中真个模型,为其添加AnimationController脚本,这是PocketRPG提供的用于控制模型动画的一个脚本。好了,做好前面的基础后,我们来编写脚本,控制我们的角色:

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class ChangeAnim : MonoBehaviour {  
  5.       
  6.     //定义左手WeaponTrail  
  7.     public WeaponTrail mWeapTrailL;  
  8.     //定义右手WeaponTrail  
  9.     public WeaponTrail mWeapTrailR;  
  10.       
  11.     //定义攻击招式1  
  12.     private AnimationState State_Attack1;  
  13.     //定义攻击招式2  
  14.     private AnimationState State_Attack2;  
  15.     //定义攻击招式3  
  16.     private AnimationState State_Attack3;  
  17.     //定义攻击招式4  
  18.     private AnimationState State_Attack4;  
  19.       
  20.     //定义等待状态  
  21.     private AnimationState State_Wait;  
  22.       
  23.     //动画控制器  
  24.     private AnimationController mController;  
  25.       
  26.     void Start ()   
  27.     {  
  28.       //获取动画控制器  
  29.       mController=gameObject.GetComponent<AnimationController>();  
  30.           
  31.       //为每个招式设定对应的动画  
  32.       State_Attack1=animation["Attack1"];  
  33.       State_Attack2=animation["Attack2"];  
  34.       State_Attack3=animation["Whirlwind"];  
  35.       State_Attack4=animation["WhirlwindAttack"];  
  36.           
  37.       State_Wait=animation["Idle"];  
  38.       //为动画控制器添加武器拖尾脚本  
  39.       mController.AddTrail(mWeapTrailL);  
  40.       mController.AddTrail(mWeapTrailR);  
  41.         
  42.       //设置拖尾效果  
  43.       mWeapTrailL.SetTime (3.0f, 0, 1);//设置拖尾时间为3秒  
  44.       mWeapTrailR.SetTime (3.0f, 0, 1);//设置拖尾时间为3秒  
  45.     }  
  46.       
  47.     void OnGUI()  
  48.     {  
  49.       if(GUILayout.Button("翔龙斩",GUILayout.Height(30)))  
  50.       {  
  51.         mController.PlayAnimation(State_Attack1);  
  52.         StartCoroutine("ReSetToWait");  
  53.       }  
  54.           
  55.       if(GUILayout.Button("裂穹击",GUILayout.Height(30)))  
  56.       {  
  57.         mController.PlayAnimation(State_Attack2);  
  58.         StartCoroutine("ReSetToWait");    
  59.       }  
  60.           
  61.       if(GUILayout.Button("天罡伏魔",GUILayout.Height(30)))  
  62.       {  
  63.         mController.PlayAnimation(State_Attack3);  
  64.         StartCoroutine("ReSetToWait");    
  65.       }  
  66.           
  67.       if(GUILayout.Button("乱剑悬月",GUILayout.Height(30)))  
  68.       {  
  69.         mController.PlayAnimation(State_Attack4);  
  70.         StartCoroutine("ReSetToWait");    
  71.       }  
  72.           
  73.     }  
  74.       
  75.     //0.5秒后恢复到等待状态  
  76.     IEnumerator ReSetToWait()  
  77.     {  
  78.         yield return new WaitForSeconds(0.5F);  
  79.         mController.PlayAnimation(State_Wait);  
  80.     }  
  81. }  

       这里需要注意以几点:

       1、使用PacketRPG时,模型动画将不受模型自带的Animation组件的控制,我们需要使用Animation Controller来控制模型动画。具体方法是PlayAnimation(AnimtaionState mState)

       2、在PacketRPG中,通过SetTime()方法来设置武器拖尾的时间,通过StartTrail()和FadeOut()来实现特效的渐入渐出效果。当然,我们可以通过WeaponTrain脚本来设置,具体参数的意义大家可以查阅文档。

       3、该脚本中的两个WeapTrail对象分别指向我们实现定义好的LeftWeaponTrail、RightWeaponTrail。

       好了,我们来看看最终的效果吧:

       技能一:翔龙斩

         技能二:裂穹击

      技能三:乱剑悬月

        

Unity3D游戏开发之刀光剑影特效如何实现