[Unity3D]Unity3D游戏开发之刀光剑影特效的实现

摘要:
好,以下我们開始:首先我们打开Unity3D、导入PocketRPGTrails。接下来,我们将模型结构临时合并到一起,我们选中真个模型,为其加入AnimationController脚本,这是PocketRPG提供的用于控制模型动画的一个脚本。详细方法是PlayAnimation2、在PacketRPG中,通过SetTime()方法来设置武器拖尾的时间,通过StartTrail()和FadeOut()来实现特效的渐入渐出效果。

大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei

我实在不明确有的人为什么不喜欢武侠/仙侠类游戏,也许是因为武侠/仙侠类游戏身上被永远烙上的国产标签吧!博主近期在玩一部叫做《雨血》的游戏,博主不禁感慨:在这样一个流星蝴蝶不再闪烁、网游成风、国产双剑兴许创新不足的后国产时代,竟然还能够有这样一部再次让博主热血沸腾的游戏。博主最早接触过的游戏是《流星蝴蝶剑》,因为这部游戏的上手难度本身非常高,所以博主基本上没有通关过,如今偶尔拿出来一个人怀念一下。据说《雨血》系列堪称第一部走出国门的国产RPG,博主一直有一个梦想,就是有一天我们能够用RPG来演绎中国古代最为绚丽夺目的文学经典《西游记》。博主是一个相对传统的人,喜欢中国的传统文化,所以对于国外的文化找不到一种归属感,我实在没有认为国外游戏中的魔法会比中国的仙术、武功、五行、暗器、蛊术来得简单。假设说仙剑、古剑是仙侠背景下的武侠,轩辕剑是历史背景下的武侠,那么《血雨》就是古龙武侠风格下的武侠。博主非常喜欢这种画风,因为每个画面都让人认为这是在赞赏一件艺术品,我们来看几张图片吧:

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第1张

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第2张

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

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

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第3张

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

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第4张

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

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第5张

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

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第6张

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

using UnityEngine;
using System.Collections;

public class ChangeAnim : MonoBehaviour {
	
    //定义左手WeaponTrail
	public WeaponTrail mWeapTrailL;
	//定义右手WeaponTrail
	public WeaponTrail mWeapTrailR;
	
	//定义攻击招式1
	private AnimationState State_Attack1;
	//定义攻击招式2
	private AnimationState State_Attack2;
	//定义攻击招式3
	private AnimationState State_Attack3;
	//定义攻击招式4
	private AnimationState State_Attack4;
	
	//定义等待状态
	private AnimationState State_Wait;
	
	//动画控制器
	private AnimationController mController;
	
	void Start () 
	{
	  //获取动画控制器
	  mController=gameObject.GetComponent<AnimationController>();
		
	  //为每个招式设定相应的动画
	  State_Attack1=animation["Attack1"];
	  State_Attack2=animation["Attack2"];
	  State_Attack3=animation["Whirlwind"];
	  State_Attack4=animation["WhirlwindAttack"];
		
	  State_Wait=animation["Idle"];
	  //为动画控制器加入武器拖尾脚本
	  mController.AddTrail(mWeapTrailL);
	  mController.AddTrail(mWeapTrailR);
	  
	  //设置拖尾效果
	  mWeapTrailL.SetTime (3.0f, 0, 1);//设置拖尾时间为3秒
	  mWeapTrailR.SetTime (3.0f, 0, 1);//设置拖尾时间为3秒
	}
	
	void OnGUI()
	{
	  if(GUILayout.Button("翔龙斩",GUILayout.Height(30)))
	  {
		mController.PlayAnimation(State_Attack1);
	    StartCoroutine("ReSetToWait");
	  }
		
	  if(GUILayout.Button("裂穹击",GUILayout.Height(30)))
	  {
		mController.PlayAnimation(State_Attack2);
	    StartCoroutine("ReSetToWait");	
	  }
		
	  if(GUILayout.Button("天罡伏魔",GUILayout.Height(30)))
	  {
		mController.PlayAnimation(State_Attack3);
	    StartCoroutine("ReSetToWait");	
	  }
		
	  if(GUILayout.Button("乱剑悬月",GUILayout.Height(30)))
	  {
		mController.PlayAnimation(State_Attack4);
	    StartCoroutine("ReSetToWait");	
	  }
		
	}
	
	//0.5秒后恢复到等待状态
	IEnumerator ReSetToWait()
	{
		yield return new WaitForSeconds(0.5F);
		mController.PlayAnimation(State_Wait);
	}
}

这里须要注意以几点:

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

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

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第7张

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

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

技能一:翔龙斩

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第8张

技能二:裂穹击

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第9张

技能三:乱剑悬月

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第10张

好了,这就是今天的博客了,希望对大家实用、希望大家喜欢!

每日箴言:有两样东西,愈是常常和持久地思考它们,对它们日久弥新和不断增长之魅力以及崇敬之情就愈加充实着心灵:我头顶的星空,和我心中的道德法则——康德

[Unity3D]Unity3D游戏开发之刀光剑影特效的实现第11张

喜欢我的博客请记住我的名字:秦元培,我的博客地址是:blog.csdn.net/qinyuanpei

转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/24388765

免责声明:文章转载自《[Unity3D]Unity3D游戏开发之刀光剑影特效的实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Javaweb学习笔记--分层设计C#下内存管理--垃圾收集下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Unity3D】点击交互——简单工厂

实现一个很简单的点击小游戏,学习交互相关的内容,在不实时创建销毁的情况下,使用简单工厂创建、管理、回收、复用标记。 游戏概述:点击出现标记,两秒内自动消失 游戏展示: 1.1实现点击效果。   1.1.1用 Plane 或其他物体做地面, tag 为“Finish”     先创建Plane,并选择tag为Finish。   1.1.2点击地面后,...

Unity3D教程宝典之Shader篇

教程目录基础讲:Shader学习方法基础讲:基础知识特别讲:常见问题解答特别讲:CG函数第一讲: Shader总篇第二讲: Fixed Function Shader 第三讲: Vertex&Fragment Shader基础 第四讲: 制作一个美丽的地球第五讲:LOGO闪光效果 第六讲:TexGen第七讲:流程图第八讲:Why CG?第九讲:R...

Unity3D之如何将包大小减少到极致

Unity3D之如何将包大小减少到极致,图片是游戏app里最最占空间的资源,所以请各位还没有理解u3d对图片文件存储方式理解的请看《unity3d-texture图片空间和内存占用分析》。因为u3d对资源的压缩并不阐述的十分详细,所以很多项目在遇到包大小瓶颈时非常头疼。我也不是神仙,也同样痛苦过,但经历几个项目的折腾,最终能梳理出一套能将u3d包大小减少到...

Unity3D 原生Android结合UnityPlayerActivity开发遇到的问题

需求是原生Android 的Activity启动UnityPlayerActivity,按Back键后返回原来的Activity 1、在AndroidManifest.xml中的UnityPlayerActivity标签中加入 android:process=":unityplayer" 2、在C#代码里可以直接掉Application.Quit()...

Unity3d 跑酷游戏 之Character Controller篇

                                              unity3d  Character Controller                                                                                       @by  广州小龙       ...

UNITY3D编辑器插件编写教程

如何让编辑器运行你的代码如何让编辑器运行你的代码 Unity3D 可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码。 [MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数。触发函数里 可以编写任何合法的代码,可以是一个资源批处理程...