發表文章

目前顯示的是有「第3章 Modifiers And Abilities」標籤的文章
Related Posts Plugin for WordPress, Blogger...

3-25 Section 3 Wrap Up

圖片
本章為第三章節的最後一章,讓我們來總結一下吧。未來大家開始製作其他的遊戲的時候,就會知道我們並不需要一開始就把所有的功能做到最完美,也不用寫一大堆複雜的遊戲文件。 而是快速製作這樣的一個遊戲雛形,然後讓我們玩玩看、測試看看,這時我們就會知道這遊戲是不是我想要的遊戲,我們可以畫出一個清單,寫上我們想要的功能,或是我們現在不想要的功能。 我們可以很早期就發現到,這個戰鬥的方式我不喜歡,這個功能不好應該要再改成其他的樣子。當基本玩法和要素都確定這是自己的遊戲以後,我們要從Level 1增加到Level 30,怪物從1隻增加到30隻,要壯大我們的遊戲內容時,都會更為容易,也不用怕製作到後期,還要回到前期修正基礎系統。 這是很適合慶祝你的遊戲已經快要完成的時刻,相信這時你的遊戲已經頗具有一個完整的雛形模樣,看起來很有趣、很好玩,接下來進入第四章以後,會教大家如何讓程式更具穩健性。將教大家如何將程式碼製作成framework,往後要新增更多遊戲內容時,只要用滑鼠簡單滑一下,點一下就可以輕鬆完成。 以下提供我製作到現階段的遊戲雛形試玩影片:

3-24 Finishing The AOE And Self Heal Particle Effect

圖片
本章要來做最後的技能效果美化啦,將會有絢麗的粒子特效跟技能音效,同時也會跟大家介紹下載位置跟匯入方式。首先先貼上下載的位址吧,若是有看過舊文章的人應該已經下載過了: Unity Particle Pack https://www.assetstore.unity3d.com/en/#!/content/73777 Fantasy SFX for Particle Distort Texture Effect Library https://www.assetstore.unity3d.com/en/#!/content/42146 如果不懂技能系統的話,大家可以從本網誌的標籤觀看一系列相關的文章唷! https://rpgcorecombat.blogspot.tw/search/label/Unity%20%E7%AF%84%E5%9C%8D%E6%94%BB%E6%93%8A%E6%8A%80%E8%83%BD OK!接下來進入正題吧。首先,我先從Unity Particle Pack中選擇了BigExplosionEffect,拉入場景中調整一下大小跟位置,先看看這個效果是不是我想要的。 設定完成後,拉進Project視窗內變成Prefab,並取名為Power Attack L1 VFX。 點選Power Attack L1的設定,將Power Attack L1 VFX拉進Particle Prefab的參數中,Audio Clip我挑選了msfx_explosion_1_explode。 執行遊戲試玩看看吧!哇,煙硝瀰漫、塵土飛揚,這個爆炸效果做得真好。 火焰都從煙霧中彈射出來了,很漂亮的效果。另外,因為我調整了Power Attack的Script,讓粒子系統可以綁定在Enemy身上,使得效果更炫也更合理,最下面會再提供修改後的完整程式碼給大家。 再來是治癒技能要使用的效果,由於在Unity Particle Pack挑選不到我喜歡的特效,所以我上網找了個教學自行製作,大概只要花20分鐘左右就可以做好。 Unity 5 - Game Effects VFX - Healing Spell https://www.youtube.com/watch?v=O8Qm8DQZv5A 滿推薦...

3-23 Trigger To Move Main Camera

圖片
我的遊戲中的攝影機雖然是第三人稱固定視角,但並不是每一個角度都很好看。尤其是場景設計的時候,偏偏就覺得某些角度看過去的風景比較漂亮,比較符合我心目中的感覺,當然會希望玩家玩遊戲時也能看見相同角度的風景。從另一方面來說,玩家看不見的角度,就可以節省一些設計,專注在遊戲畫面中看得見的地方就好。 本章要來教大家如何在特定位置改變攝影機角度,由於遊戲仍然是第三人稱固定視角,所以不是讓玩家自己改變角度唷,而是將攝影機的角度改成設計師指定的角度。 首先在場景中建立一個Empty GameObject,取名為CameraTrigger。 拉到Project視窗中變成Prefab,然後再建立一個Script名稱為CameraTrigger。 將CameraTrigger的Script拉進同樣名為CameraTrigger的Prefab底下。 然後在CameraTrigger底下在建立一個Empty GameObject,名稱為Camera Socket。這個Camera Socket會用來記錄關卡設計師希望的鏡頭角度,當玩家經過Trigger後,程式便以Camera Socket中的Transform設定來移動鏡頭。 然後開始來撰寫CameraTrigger的程式碼吧! CameraTrigger.cs: using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraTrigger : MonoBehaviour { [SerializeField] int layerFilter = 0; [SerializeField] float triggerRadius = 5f; [SerializeField] float stopMoveDistance = 0.05f; [SerializeField] Transform cameraSocket; bool startMoveMainCamera = false; void Start () { SphereCollider sphereCollider = gameObject.AddComponent (); sp...

3-22 Critical Hit And Weapon Bonus

圖片
本章要來替Player的武器增加攻擊力的計算,以及增加發動致命一擊的機率。致命一擊是指普通攻擊之中,有機率揮出超強攻擊的一擊,為普通攻擊的好幾倍,又可以稱為會心一擊、爆擊等等。 首先,將我們想要用在致命一擊的粒子效果放到Player之下。 然後讓我們調整一下粒子系統運作的位置、大小。 記得將Looping跟Play On Awake都關掉。 且有些從Asset Store下載的粒子系統同時包含火焰、煙霧等等,所以在子階層的部分還會有其他粒子系統,記得這邊也要關掉Loop。 然後將調整好的Critical Hit Particles拉進Project變成Prefab。 程式碼主要修改在Player跟Weapon,來看看Player主要修改計算攻擊值的部分。使用Random.Range方法計算是否會出現致命一擊,再將傷害值乘以criticalHitMultiplier,並播放特效。 以下提供完整程式碼。 Player.cs: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Assertions; using UnityEngine.SceneManagement; using RPG.CameraUI; // TODO consider re-wiring using RPG.Core; using RPG.Weapons; namespace RPG.Character{ public class Player : MonoBehaviour, IDamageable { [SerializeField] float maxHealthPoints = 100f; [SerializeField] float baseDamage = 50f; [SerializeField] AnimatorOverrideController animatorOverrideController; [SerializeField] Weapon weaponInUse; [SerializeField] SpecialAbilityConfi...

3-21 Add An Effect Audio On Special Abilities

圖片
本章要介紹如何在發動技能時播放音效,實作方式還滿簡單的。首先,請大家下載免費音效,或是自己在網路上找也可以。 Fantasy SFX for Particle Distort Texture Effect Library https://www.assetstore.unity3d.com/en/#!/content/42146 我挑選sfx_chrono_gale當作發動範圍技的音效。 接著修改SpecialAbilityConfig.cs及AreaEffectBehaviour.cs。我們會在SpecialAbilityConfig中新增一個AudioClip用來存放該技能的音效,並在AreaEffectBehaviour的Use方法中取得該音效並播放。 SpecialAbilityConfig.cs: using System.Collections; using System.Collections.Generic; using UnityEngine; using RPG.Core; namespace RPG.Character{ public struct AbilityParams{ public IDamageable target; public float baseDamage; public AbilityParams(IDamageable target, float baseDamage){ this.target = target; this.baseDamage = baseDamage; } } public abstract class SpecialAbilityConfig : ScriptableObject { [Header("Special Ability General")] [SerializeField] float energyCost = 10f; [SerializeField] GameObject particlePrefab = null; [SerializeField] AudioClip audioClip = null; abstract public ISpecialAbility ...

3-20 Triggering Special Abilities From Keys

圖片
本章要來製作快捷鍵發動技能嘍!首先先讓我們修改一下介面吧,選擇GameObject/UI/Image來新增圖片資源。 將之前提供的圖片檔案Icon Special Ability Power Attack放置上去,如果不知道怎麼指定圖片資源以及排版,可以先參考以前的文章: 3-16 Using Image Fill In UI https://rpgcorecombat.blogspot.tw/2018/01/3-16-using-image-fill-in-ui.html 接著將剛剛新增好的Image多複製幾份,分別取名為Special Slot (0)、Special Slot (1)、Special Slot (2)。 然後將圖片資源都放進去,排列整齊,如下圖的樣子。 接著,在Game Canvas按右鍵,Create Empty,取名為Keyboard Affordances。 於Keyboard Affordances按右鍵選擇UI/Text,新增文字框。 將文字框移動到技能圖片上面,文字寫1,自己調整Font Size跟Color,Alignment可以如下圖那樣設定,數字就會在技能圖片的右下角。 然後將文字框再複製一份。 將複製的文字框移動到旁邊的技能圖片上,文字改成2。這樣,我們就把UI的部分都設定好了! 主要修改Player.cs,如下圖,我們在Update撰寫方法來實時感應鍵盤的事件,先是撰寫條件式確保Player的血量不為0,以免Player死了以後還能透過快捷鍵發動技能。再來是撰寫ScanForAbilityKeyDown方法,當使用者按下的數字鍵為已存在技能中的其中一項,就呼叫AttemptSpecialAbility發動技能。 以下提供Player.cs完成程式碼: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Assertions; using UnityEngine.SceneManagement; using RPG.CameraUI; // TODO consider re-wiring usi...

3-19 Self Heal Special Ability Challenge

圖片
今天要來製作補血技能啦!本章先簡單帶大家製作能發動的補血技能,後面會再補上粒子特效跟快捷鍵的教學。首先,在觀看本章之前,要先有其他文章的積累才行,有需要的話請先看看下列文章唷: 3-9 Special Abilities System Overview  https://rpgcorecombat.blogspot.tw/2017/12/3-9-special-abilities-system-overview.html 3-10 Create An Area Of Effect Ability  https://rpgcorecombat.blogspot.tw/2017/12/3-10-create-area-of-effect-ability.html 首先在Special Abilities資料夾中新增一個資料夾,取名為Self Heal。 於Self Heal資料夾內新增兩個Script,SelfHealBehaviour跟SelfHealConfig。 SelfHealBehaviour.cs: using System.Collections; using System.Collections.Generic; using UnityEngine; using RPG.Core; namespace RPG.Character{ public class SelfHealBehaviour : MonoBehaviour, ISpecialAbility { SelfHealConfig config; Player player; void Start(){ player = GetComponent (); } public void SetConfig(SelfHealConfig config){ this.config = config; } public void Use(AbilityParams useParams){ player.AdjustHealth (-config.GetExtraHealth ()); } } } SelfHealConfig.cs: using System.Coll...