4-18 Create A Magic Wand And Spawn Fireball
今天要來製作魔法杖!這是要用來給大Boss使用的,但如果大家還記得我們製作的Weapon System的話,就知道製作的武器不但能給Enemy使用,也能給Player使用唷!
當玩家打完大Boss以後,就會掉落一根魔法杖在地上,玩家可以撿拾起來並更換成魔法杖,使用Boss的武器應該都是每個RPG要有的橋段吧!如果對玩家撿拾武器並跟換的系統不熟悉的話,請先參考以前的文章唷:
4-3 Weapon Pickup Points
https://rpgcorecombat.blogspot.tw/2018/01/4-3-weapon-pickup-points.html
另外魔法杖的製作,也牽涉到之前做的弓箭武器,也可以先複習這篇文章:
4-15 Finishing The Weapon System
接著,我再拉一個爆炸效果的粒子系統(BigExplosionEffect)到火球中。
記得在BigExplosionEffect的設定中,要將Looping跟Play On Awake關掉唷!
這個素材沒有太多的裝飾,拉進場景後可以修改成自己喜歡的配色。由於我要發射的是火球,所以將頂端的水晶體從藍色改成紅色,法杖本體改成黑色,也稍微修改了大小讓水晶體更明顯。
接著,建立魔法杖的Weapon Config跟Grip Position,這一步驟不懂的話請先將以前武器系統的文章都看完唷。
我的魔法杖設定如下,另外一提,我將Additional Damage設為0,是為了方便管理Enemy的攻擊力。因為我只想要設定Enemy的攻擊力,而不想要特地管理Enemy的武器的攻擊力。當然,如果要給玩家使用的話,就再複製一個Weapon Config並額外設定攻擊力即可。
然後,在Enemy的Weapon System上設定Current Weapon Config為魔法杖。
來執行遊戲試玩看看吧!哇!Boss發射火球了,效果好猛。
找到正確的發射時間來躲避火球吧!
好可怕!這樣有打Boss的感覺呢!
當玩家打完大Boss以後,就會掉落一根魔法杖在地上,玩家可以撿拾起來並更換成魔法杖,使用Boss的武器應該都是每個RPG要有的橋段吧!如果對玩家撿拾武器並跟換的系統不熟悉的話,請先參考以前的文章唷:
4-3 Weapon Pickup Points
https://rpgcorecombat.blogspot.tw/2018/01/4-3-weapon-pickup-points.html
另外魔法杖的製作,也牽涉到之前做的弓箭武器,也可以先複習這篇文章:
4-15 Finishing The Weapon System
首先,我用網球的3D模型當作火球的基底,這顆網球模型在Unity Standard Asset裡面有提供唷。
接著,我將Unity提供的粒子系統範例(FlamesParticleEffect)拉進火球中,效果如下圖。
接著,我再拉一個爆炸效果的粒子系統(BigExplosionEffect)到火球中。
記得在BigExplosionEffect的設定中,要將Looping跟Play On Awake關掉唷!
接著來修改Projectile.cs的程式碼吧!
using System.Collections; using System.Collections.Generic; using UnityEngine; using RPG.Core; using RPG.Character; namespace RPG.Weapons{ public class Projectile : MonoBehaviour { [SerializeField] AudioClip shotSound; [SerializeField] AudioClip collisionSound; [SerializeField] GameObject explosionParticle; [Header("If No Particle")] [SerializeField] float destroyDelayTime = 0.1f; GameObject shooter; AudioSource audioSource; float damageCaused; const float PARTICLE_CLEAN_UP_DELAY = 0.5f; void Start(){ audioSource = gameObject.AddComponent(); if (shotSound != null) { audioSource.PlayOneShot (shotSound); } } public void SetShooter(GameObject shooter){ this.shooter = shooter; } public void SetDamage(float damage){ damageCaused = damage; } void OnCollisionEnter(Collision collision){ int layerCollidedWith = collision.gameObject.layer; // 若被碰撞的物體所處的Layer跟shooter的Layer不同,才會觸發攻擊機制 // 如敵人就不會攻擊到敵人 if (shooter && layerCollidedWith != shooter.layer) { DamageIfDamageable (collision); PlayEffectAudio (); PlayParticleEffect (); if (explosionParticle == null) { Destroy(gameObject, destroyDelayTime); } } } private void DamageIfDamageable(Collision collision){ // 取得HealthSystem HealthSystem healthSystem = collision.gameObject.GetComponent (); if (healthSystem) { healthSystem.TakeDamage (damageCaused); } } void PlayEffectAudio(){ if (collisionSound != null) { // 使用PlayOnShot播放技能音效,可避免和其他技能音效重疊在一起 audioSource.PlayOneShot (collisionSound); } } void PlayParticleEffect(){ if (explosionParticle != null) { GameObject particlePrefab = Instantiate (explosionParticle, transform.position, Quaternion.identity, transform); particlePrefab.GetComponent ().Play (); StartCoroutine (DestroyGameObjectWhenFinished (particlePrefab)); } } IEnumerator DestroyGameObjectWhenFinished(GameObject particlePrefab){ while (particlePrefab.GetComponent ().isPlaying) { yield return new WaitForSeconds (PARTICLE_CLEAN_UP_DELAY); } Destroy (gameObject); yield return new WaitForEndOfFrame (); } } }
修改完以後,將Projectile.cs拉進Fireball中,Shot Sound是發射時的音效,Collision Sound是火球撞到東西時的音效,請大家自己設定唷,Explosion Particle則設定BigExplosionEffect。另外,大家可以將Rigidbody的Use Gravity關掉,這樣火球就不會受到重力的影響直直往目標的方向飛。
以上完成火球的設定了,接著來製作一根魔杖吧。我在網路上找到了一個不錯的免費3D模型:https://free3d.com/3d-model/frost-staff-98873.html
這個素材沒有太多的裝飾,拉進場景後可以修改成自己喜歡的配色。由於我要發射的是火球,所以將頂端的水晶體從藍色改成紅色,法杖本體改成黑色,也稍微修改了大小讓水晶體更明顯。
接著,建立魔法杖的Weapon Config跟Grip Position,這一步驟不懂的話請先將以前武器系統的文章都看完唷。
我的魔法杖設定如下,另外一提,我將Additional Damage設為0,是為了方便管理Enemy的攻擊力。因為我只想要設定Enemy的攻擊力,而不想要特地管理Enemy的武器的攻擊力。當然,如果要給玩家使用的話,就再複製一個Weapon Config並額外設定攻擊力即可。
然後,在Enemy的Weapon System上設定Current Weapon Config為魔法杖。
來執行遊戲試玩看看吧!哇!Boss發射火球了,效果好猛。
找到正確的發射時間來躲避火球吧!
好可怕!這樣有打Boss的感覺呢!
留言
張貼留言