發表文章

目前顯示的是有「第4章 Finished Demo」標籤的文章
Related Posts Plugin for WordPress, Blogger...

4-19 Congratulation

圖片
恭喜大家,RPG Core Combat大概至此告一個段落了!感謝一同看這個網誌的同伴,陪伴著我一起度過這段學習遊戲製作的時光,課程到這個階段就結束了。相信跟著前四章一起學習用Unity製作遊戲都獲得不少收穫吧,至少可以做得出以下這樣的遊戲了。 接下來,就是屬於我自己努力的階段啦!目前計劃是將遊戲改成行動平台,也會改成適合手機螢幕的戰鬥方式,還要接著製作遊戲介面跟背包管理的功能等等.....後面還有很多大工程。以下幫大家整理列出所有1~4章的文章: 1-1 Set Up A Combat Sandbox https://rpgcorecombat.blogspot.tw/2017/12/set-up-combat-sandbox.html 1-2 A Simple DIY Follow Camera  https://rpgcorecombat.blogspot.tw/2017/12/a-simple-diy-follow-camera.html 1-3 Pan And Tilt Camera Options https://rpgcorecombat.blogspot.tw/2017/12/1-3-pan-and-tilt-camera-options.html 1-4 Using Raycasts To Query Click  https://rpgcorecombat.blogspot.tw/2017/12/1-4-using-raycasts-to-query-click.html 1-5 Click Mouse To Move  https://rpgcorecombat.blogspot.tw/2017/12/1-5-click-mouse-to-move.html 1-6 Organizing Project For Teamwork  https://rpgcorecombat.blogspot.tw/2017/12/1-6-organizing-project-for-teamwork.html 1-7 Using Cursor Affordances  https://rpgcorecom...

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 https://rpgcorecombat.blogspot.tw/2018/01/4-15-finishing-weapon-system.html 首先,我用網球的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 explo...

4-17 Wandering NPCs

圖片
前一章我們完成了簡單的NPC系統,但是NPC在場景中亂跑,這樣的感覺很奇怪對吧?所以本章要教大家製作走路的NPC。 首先,請大家看看NPC使用的ThirdPersonAnimatorControl。 在Animator視窗點擊Grounded狀態。 從Inspector視窗會看見Motion的部分使用的Blend Tree,請點兩下開啟。 開啟後會看見如下圖的視窗,當紅點在中央下方時,角色的狀態是不會動的Idle狀態。 當紅點調整到最上面,就會發現角色開始跑起來了。 如果將紅點慢慢移到下方,角色的動作又會變得緩慢,像是在走路一樣。 所以,根據以上介紹的機制,透過調整Forward數值,可以控制角色的動作是偏向走路或者跑步。程式碼中在Character.cs中的UpdateAnimator方法,於forwardAmount中乘以一個參數,名為animatorForwardCap,這個參數會設為SerializeField。 修改後的Character.cs如下: using System; using UnityEngine; using UnityEngine.AI; using RPG.CameraUI; namespace RPG.Character{ [SelectionBase] public class Character : MonoBehaviour { [Header("Audio")] [Range(0.0f, 1.0f)][SerializeField] float spatialBlend = 1f; [Header("Capsule Collider")] [SerializeField] Vector3 colliderCenter = new Vector3(0, 1, 0); [SerializeField] float colliderRadius = 0.3f; [SerializeField] float colliderHeight = 1.5f; [Header("Animator")] [SerializeField] RuntimeAnimatorCo...

4-16 NPCs That Don't Hit

圖片
本章要來製作NPC!終於到了這一步了,而且製作起來非常簡單,只要善用我們已經寫好的Enemy AI來製作即可。如果不清楚以下的製作過程,請先將第四章的文章都看過唷!因為牽扯到許多重構後的細節,所以就不再一一列出相關的文章了。 首先,我沿用跟Player一樣的3D模型製作NPC,所以我在場景中選擇Player後使用Duplicate複製一個一樣的物件,然後將此複製出來的Player改名為NPC。 我不希望NPC被攻擊,所以將Layer從原本的Player改成Ignore Raycast,如此一來我的鼠標就碰不到NPC了。當然大家也可以設計出可以被攻擊的NPC,然後發出聲音說:喔!請不要打我,如果真的太過頭的話,NPC就會反擊,甚至有可能打死玩家。 Tag的部分也必須從Player改成Untagged,Main Camera才不會看錯地方唷!  再來需要將屬於玩家才會用到的功能移除,如Player Movement。 移除Special Abilities。  新增Enemy AI。 然後拉入Project視窗變成新的Prefab。 在場景中建立新的巡邏點,這是給NPC用的。如對建立巡邏點的方式不熟悉,請先看以前的文章唷。 4-12 Enemy AI Behaviour https://rpgcorecombat.blogspot.tw/2018/01/4-12-enemy-ai-behaviour.html 然後建立一個新的武器,取名為NPC None,如果有人對這一步驟不清楚,也請先將武器系統的文章都看完唷! NPC None的設定可如下,將Weapon Prefab以及Grip Transform都設定為NPCNoneGripPosition,這樣就不會在NPC手上顯示任何武器了。Attack Animation選擇None,或者大家也可以選擇其他動畫,如『說話』時使用的動畫,NPC走到玩家面前後就會自動變成說話的動畫,這也滿不錯的不是嗎? Max Attack Range設為0,Additional Damage設為0。Projectile都不用設定。  然後回到NPC的Weapon System的設定,Base...

4-15 Finishing The Weapon System

圖片
本章節要在Weapon System上實作遠距離攻擊的武器,當裝備的武器為『弓』的時候,必須可以射箭,當裝備的武器為『劍』的時候,則必須為近距離攻擊。實作概念為於Weapon Config中設置Projectile,如有Projectile存在時會將其發射,如不存在則會直接令目標受傷。由於WeaponConfig中有AttackRange參數,所以不管武器是近戰武器或是遠距離武器,都可以共用AttackRange的設定。 實作前,需要先解決『撿拾武器』的Bug,如下圖於OnTriggerEnter時呼叫了FindObjectOfType來尋找WeaponSystem,這段程式碼於重構WeaponSystem前撰寫的,所以當時並不會出問題。但重構後的程式碼,讓Enemy也可以共用WeaponSystem,所以更換武器時有可能更換Enemy的武器。 請如下圖進行修改,將FindObjectOfType的對象改成PlayerMovement,並再使用GetComponent取得WeaponSystem,即可解決這個Bug。 如對撿拾武器的機制不熟悉,可先閱讀之前的文章: 4-3 Weapon Pickup Points https://rpgcorecombat.blogspot.tw/2018/01/4-3-weapon-pickup-points.html 接著要修正攻擊的Delay時間,如下圖於AttackTargetOnce方法中,我們直接指定delay時間為0.25秒,正確做法應該要從WeaponConfig中取得。 請如下圖在Weapon中定義damageDelay參數,然後再請大家自行於AttackTargetOnce方法中,從Weapon取得damageDelay。如不會修改,後面會再提供完整程式碼給大家參考。 接著要進入正題啦!首先請大家準備好弓跟弓箭的模型。如果沒有的話也沒關係,用把劍,然後用之前製作Projectile時的球球也可以,就當作揮劍的時候會發射劍氣吧!如不清楚Projectile的部分,可以先參考以下文章: 2-15 Enemy Attack Spheres And Spawning Enemy Projectile https://rpgcorecombat.blogspot.tw/201...