1. 程式人生 > >[Unity3D]Unity3D遊戲開發之刀光劍影特效的實現

[Unity3D]Unity3D遊戲開發之刀光劍影特效的實現

        我實在不明白有的人為什麼不喜歡武俠/仙俠類遊戲,或許是由於武俠/仙俠類遊戲身上被永遠烙上的國產標籤吧!博主最近在玩一部叫做《雨血》的遊戲,博主不禁感慨:在這樣一個流星蝴蝶不再閃爍、網遊成風、國產雙劍後續創新不足的後國產時代,居然還能夠有這樣一部再次讓博主熱血沸騰的遊戲。博主最早接觸過的遊戲是《流星蝴蝶劍》,由於這部遊戲的上手難度本身很高,所以博主基本上沒有通關過,現在偶爾拿出來一個人懷念一下。據說《雨血》系列堪稱第一部走出國門的國產RPG,博主一直有一個夢想,就是有一天我們可以用RPG來演繹中國古代最為絢麗奪目的文學經典《西遊記》。博主是一個相對傳統的人,喜歡中國的傳統文化,所以對於國外的文化找不到一種歸屬感,我實在沒有覺得國外遊戲中的魔法會比中國的仙術、武功、五行、暗器、蠱術來得簡單。如果說仙劍、古劍是仙俠背景下的武俠,軒轅劍是歷史背景下的武俠,那麼《血雨》就是古龍武俠風格下的武俠。博主很喜歡這樣的畫風,因為每一個畫面都讓人覺得這是在欣賞一件藝術品,我們來看幾張圖片吧:



         可以看到,在這部遊戲中,前兩部是半即時制RPG,第三部則完全是即時制RPG。博主尤其喜歡這部遊戲的配樂,整個配樂大氣磅礴,一招一式都有不錯的打擊感,而且武器的特效十分華麗。那麼,到這裡,就到了我們今天的主題:刀光劍影特效的製作。我們今天選擇的PacketRPG外掛,這個外掛可以幫助我們快速地實現武器拖尾特效。好,下面我們開始:

         首先我們開啟Unity3D、匯入PocketRPG Trails。使用這個外掛,我們首先要做的是需要和美工交流,以獲得模型中武器的確切位置。如果不知道武器的確切位置,建議大家還是和博主一樣使用這個外掛自帶的模型吧。好,首先我們在專案中找到這個模型:


       下面我們將模型拖到場景中,展開模型,發現下面的結構:


         我們展開到left_hand_joint這是左手的關節,可以發現它的下面有兩個節點,第一個是手指,第二個我們將其改名為Left_Weapon,這就是我們左手武器的位置,我們在它的下面建立一個LeftWeaponTrail,這是用來顯示我們特效的元件,我們為其新增WeaponTrail指令碼:


        完成該指令碼的新增後,我們為其新增Mesh Renderer,選擇特效材質,這裡我們選擇PocketRPG提供的預設材質:


        同樣地,對於右手,我們採取相同的方法找到節點,為其新增特效元件,這裡命名為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指令碼來設定,具體引數的意義大家可以查閱文件。


       3、該指令碼中的兩個WeapTrail物件分別指向我們實現定義好的LeftWeaponTrail、RightWeaponTrail。

       好了,我們來看看最終的效果吧:

       技能一:翔龍斬


         技能二:裂穹擊


      技能三:亂劍懸月


         好了,這就是今天的部落格了,希望對大家有用、希望大家喜歡!    

        每日箴言:有兩樣東西,愈是經常和持久地思考它們,對它們日久彌新和不斷增長之魅力以及崇敬之情就愈加充實著心靈:我頭頂的星空,和我心中的道德法則——康德


        喜歡我的部落格請記住我的名字:秦元培,我的部落格地址是:blog.csdn.net/qinyuanpei

        轉載請註明出處,本文作者:秦元培,本文出處:http://blog.csdn.net/qinyuanpei/article/details/24388765