準備寫這篇時才發現
原來可以寫的內容不多"XDD
嘛基本就是個Animation Event啦
懂的人秒懂,不懂得看一眼大概也知道是甚麼了www
Anyway, 下圖就是執行的程式碼
腳本要掛在有Animator的物件上,不然讀取不到((好像
然後程式碼裡面的內容,就是更改攻擊判定的大小,以及Power的數值
這個Power,是把敵人擊退多遠的數值
因為第三下是重攻擊,所以Power就增加了一點
Attack_Tick的部分,設定上是對敵人「不會產生判定」,所以Power就沒作更改了
攻擊完後,攻擊判定當然要收回來,因此有個Reser的void
每下攻擊之後0.1秒,就會呼叫Reset,把判定大小重置,以防產生各色各樣的Bug
能更改範圍大小後,那甚麼時候才觸發更改呢?
那就是Animation Event的可怕之處(笑)
在攻擊動畫播放到合適的時段後,就呼叫程式執行動作
這樣明顯地節省了無敵多的時間來調整數值
總之就是個神器owob
當然這東西除了攻擊判定之外,還有一大堆天外飛仙的用法
比如掛掉的動畫播放完後轉換場景之類的
又比如動畫播放到特定位置後就開啟特效甚麼的
和動作、時間差有關的,好像都可以嘗試用一下Animation Event
所以上一篇才說發現新大陸www
然後……嗯,要說的說完了w
簡單直接的鞠個躬/
2018年4月27日 星期五
2018年4月24日 星期二
「傘之下」開發記錄—05
能跑能跳之後
當然是去打架啦不然幹嗎
就來到攻擊系統啦
因為整個系統分了兩個來寫
所以也分成兩篇來講
不然文章太長不想打
首先是最基本的「按下按鍵」觸發攻擊
遊戲裡用的按鍵是「Z」,然後最多連按三下達成一個3 combo
這部分程式碼,是上圖最低層的那段落
_ComboParams是一個string陣列(第二段中的第一句出現)
在Unity版面中可以更改名字(名字要等同於Animator中,對應Attack動作的Trigger的名字)
((超繞口的這句
接著每當攻擊時,便觸發「第一行名字的那條Trigger」(先假定叫Attack1),再按一下時變Attack2((ry
直到設置好的連擊都使出後,連擊數才停止增長
而用來偵察連擊數多寡的,則是「.Length」(查看陣列上限為多少的一個用法)
當連擊數「不少於」Length的時候,再按「Z」(攻擊鍵)也沒用
因為遊戲中不可能只使出一次連技,所以當然會有個重置系統
但在說重置之前,提及一下遊戲設置的「特殊技」
特殊技有它的固定按法,現時的技能只有「上+Z」
然後程式碼的做法是「按住上再按下Z」(往後可能會增加「按住Z再按下上」的按法)
之前有碰過一些遊戲,要幾乎同時按下才能發動某些指令
當時機錯過的話就不能發動……感覺這種做法有點不人性,所以在思考過後得出現在的做法
攻擊的按鍵講完,就來說說攻擊重置是什麼東東……之前((又之前
第一張圖中,有一句程式碼是「ComboAttack(int)」
所以先輕輕點一下這部分
當呼叫這個void時,會調整一些參數
較重要的是最下方被框起來那段
_AttackRate直接當成重置所需的時間is ok ww
因為每下攻擊的時間長度不一樣,才需要用不同的參數去調整
但是。很重要的,但是!
感覺用Animation Event去做調整會更省事
(不知道Animation Event的下一篇會提及,或是直接上YT找更專業的教學"XD)
之所以沒有那樣用,單純是因為,我在寫這段程式碼的時候,壓根不知那什麼東西www
當我聽說Animation Event之後,就像發現新大陸一樣XDD
所以啦所以,這段之後應該會改掉就是(笑)
最後真的是講攻擊重置啦
其實這個也只是交給電腦用時間去計算而已
當開始第一下攻擊時,_ResetTime會開始計時
_ResetTime > _AttactRate的話,就會呼叫ComboAttackReset
接著一切相關數值也跟著Reset
這兩個數值,_AttactRate上一段有提過,而_ResetTime亦在上一張圖裡
在攻擊的時候_ResetTime會歸零,間接延長它重置的時間
然後再一提:因為遊戲有「特殊技」,而我設定是按下特殊技後,攻擊就強制中止
因此在判斷式中才有(|| _SpecialAttack)這句子
感覺文章有越來越長的趨勢,是因為太多東西可以講,但我又懶得開太多文章的關係ww
所以嘛……我這種弱小程式的心得也就這樣啦
以上w/
就來到攻擊系統啦
因為整個系統分了兩個來寫
所以也分成兩篇來講
首先是最基本的「按下按鍵」觸發攻擊
遊戲裡用的按鍵是「Z」,然後最多連按三下達成一個3 combo
這部分程式碼,是上圖最低層的那段落
_ComboParams是一個string陣列(第二段中的第一句出現)
在Unity版面中可以更改名字(名字要等同於Animator中,對應Attack動作的Trigger的名字)
((超繞口的這句
接著每當攻擊時,便觸發「第一行名字的那條Trigger」(先假定叫Attack1),再按一下時變Attack2((ry
直到設置好的連擊都使出後,連擊數才停止增長
而用來偵察連擊數多寡的,則是「.Length」(查看陣列上限為多少的一個用法)
當連擊數「不少於」Length的時候,再按「Z」(攻擊鍵)也沒用
因為遊戲中不可能只使出一次連技,所以當然會有個重置系統
但在說重置之前,提及一下遊戲設置的「特殊技」
特殊技有它的固定按法,現時的技能只有「上+Z」
然後程式碼的做法是「按住上再按下Z」(往後可能會增加「按住Z再按下上」的按法)
之前有碰過一些遊戲,要幾乎同時按下才能發動某些指令
當時機錯過的話就不能發動……感覺這種做法有點不人性,所以在思考過後得出現在的做法
攻擊的按鍵講完,就來說說攻擊重置是什麼東東……之前
第一張圖中,有一句程式碼是「ComboAttack(int)」
所以先輕輕點一下這部分
當呼叫這個void時,會調整一些參數
較重要的是最下方被框起來那段
_AttackRate直接當成重置所需的時間is ok ww
因為每下攻擊的時間長度不一樣,才需要用不同的參數去調整
但是。很重要的,但是!
感覺用Animation Event去做調整會更省事
(不知道Animation Event的下一篇會提及,或是直接上YT找更專業的教學"XD)
之所以沒有那樣用,單純是因為,我在寫這段程式碼的時候,壓根不知那什麼東西www
當我聽說Animation Event之後,就像發現新大陸一樣XDD
所以啦所以,這段之後應該會改掉就是(笑)
最後真的是講攻擊重置啦
其實這個也只是交給電腦用時間去計算而已
當開始第一下攻擊時,_ResetTime會開始計時
_ResetTime > _AttactRate的話,就會呼叫ComboAttackReset
接著一切相關數值也跟著Reset
這兩個數值,_AttactRate上一段有提過,而_ResetTime亦在上一張圖裡
在攻擊的時候_ResetTime會歸零,間接延長它重置的時間
然後再一提:因為遊戲有「特殊技」,而我設定是按下特殊技後,攻擊就強制中止
因此在判斷式中才有(|| _SpecialAttack)這句子
感覺文章有越來越長的趨勢,是因為太多東西可以講,但我又懶得開太多文章的關係ww
所以嘛……我這種弱小程式的心得也就這樣啦
以上w/
2018年4月9日 星期一
「傘之下」開發記錄—04
左右移動之後,再來就是上下移動了呢(`・ω・´)
先直接上程式圖(?)
先是「跳起來」的部分,暫時用AddForce來呈現
但這種跳躍運作起來會比較單調
因為它是按下去時,就依固定力度來起跳,亦即每次基本上跳躍都是相同的
比較有趣的做法是「按越久跳越高(當然有上限)」
不過嘛……雖然知道理論,但還沒有時間實作(゚∀。)
整個遊戲現在都一堆bug了,寫個新功能增加風險可不是好事##
然後是「掉落」的部分
因為會構成「掉落」這狀態的情況,不只是起跳之後,一般走路時可能也會從斷崖之類的地方往下掉
所以這裡是計算主角的y值,少於0時就會播放動畫
至於那個IsOpenUmbrella(第一個藍框),則關係到遊戲的「雨傘系統」
那也是可以另開一篇文章了所以之後補充w
接著是「站在地上」
主要用來作動畫緩衝,亦可以說是「掉落」和「待機」之間的補間動畫
同時也重置起跳和掉落的動畫狀態
而那第二個藍色框框,是要防止玩家不斷按跳躍鍵,角色也不斷地跳起來
那時就不是起跳而是起飛
咦?那這樣的話,其實只要OnGround就好了吧?為甚麼還要有那個if判斷式?
在那之前要先說說OnGround的判定法
我是以Linecast的方式,判定主角有沒有站在地上
它的用法是,偵察A和B之間有沒有Collider,再回傳一個Y/N回來((好像是
而這裡的AB position是:主角自身的座標,和一個主角的子物件「GroundCheck」
GroundCheck的座標放在y = -0.1f (可自行調整)的地方
所以,它偵察的是「主角座標,主角座標-0.1f(-的數字等同玩家與GroundCheck之間的距離)」之間有沒有東西
這個「東西」,則是在說「Layer = Ground」的Collider,亦即地板
所謂的OnGround就是這樣判定的
那這個判定怎麼影響到跳躍呢?
就是:當起跳經過一些台階時,很可能會觸發到OnGround,但明明那時只是剛起跳不久而已。若在此情況再按下跳躍鍵,主角就會二段跳了ヽ(✿゚▽゚)ノ
對現階段來說這不是好情況ww
因此多加的這個if判斷,是讓主角在平地時(不論是在待機還是在走直路),才可以跳躍
嘛不過,我也不確定這方法對與否就是wwww
最後的最後啦
if(OnGround)那裡,有一行是gravityScale = 1.5f
那是在持續更改玩家的重力,但其實這東西只要改一次就好了
所以,這行其實有點不太妙XDDD
我也是打這篇文章時才發現這東西www
之後應該會改掉_(:3」
先直接上程式圖(?)
先是「跳起來」的部分,暫時用AddForce來呈現
但這種跳躍運作起來會比較單調
因為它是按下去時,就依固定力度來起跳,亦即每次基本上跳躍都是相同的
比較有趣的做法是「按越久跳越高(當然有上限)」
不過嘛……雖然知道理論,但還沒有時間實作(゚∀。)
整個遊戲現在都一堆bug了,寫個新功能增加風險可不是好事##
然後是「掉落」的部分
因為會構成「掉落」這狀態的情況,不只是起跳之後,一般走路時可能也會從斷崖之類的地方往下掉
所以這裡是計算主角的y值,少於0時就會播放動畫
至於那個IsOpenUmbrella(第一個藍框),則關係到遊戲的「雨傘系統」
那也是可以另開一篇文章了所以之後補充w
接著是「站在地上」
主要用來作動畫緩衝,亦可以說是「掉落」和「待機」之間的補間動畫
同時也重置起跳和掉落的動畫狀態
而那第二個藍色框框,是要防止玩家不斷按跳躍鍵,角色也不斷地跳起來
咦?那這樣的話,其實只要OnGround就好了吧?為甚麼還要有那個if判斷式?
在那之前要先說說OnGround的判定法
我是以Linecast的方式,判定主角有沒有站在地上
它的用法是,偵察A和B之間有沒有Collider,再回傳一個Y/N回來((好像是
而這裡的AB position是:主角自身的座標,和一個主角的子物件「GroundCheck」
GroundCheck的座標放在y = -0.1f (可自行調整)的地方
所以,它偵察的是「主角座標,主角座標-0.1f(-的數字等同玩家與GroundCheck之間的距離)」之間有沒有東西
這個「東西」,則是在說「Layer = Ground」的Collider,亦即地板
所謂的OnGround就是這樣判定的
那這個判定怎麼影響到跳躍呢?
就是:當起跳經過一些台階時,很可能會觸發到OnGround,但明明那時只是剛起跳不久而已。若在此情況再按下跳躍鍵,主角就會二段跳了ヽ(✿゚▽゚)ノ
對現階段來說這不是好情況ww
因此多加的這個if判斷,是讓主角在平地時(不論是在待機還是在走直路),才可以跳躍
嘛不過,我也不確定這方法對與否就是wwww
最後的最後啦
if(OnGround)那裡,有一行是gravityScale = 1.5f
那是在持續更改玩家的重力,但其實這東西只要改一次就好了
所以,這行其實有點不太妙XDDD
我也是打這篇文章時才發現這東西www
之後應該會改掉_(:3」
2018年4月7日 星期六
「傘之下」開發記錄—03
介紹完遊戲背景設定就來講實作的東西囉~
因為畫圖就真的只是畫圖,這種講求美感的東西我較少東西可以寫
所以接下來是「程式」和「整合」的主場((灑花
話說回來,整個專案都開始一年多了
這篇其實比較像開發回顧才對XDD
不過改標題很煩所以算了((喂
以我個人而言,剛開始新專案時,最先寫的程式是「主角移動」
(這裡先假設美術、動畫都已經調整好)
在腳本中抓取角色動畫控制和剛體後,讓他跑跑看,測試動畫有沒有正常播放、人物有沒有跟著跑等等
(還沒習慣Blog的插入圖片,圖片大小很難抓_(:3」 有點模糊抱歉了Orz)
在剛開始接觸C#時,一些更早期的專案中,其實我是以修改position的方式來移動的w
(即transform.position = new Vector3(0,0,0,); 之類的)
但這麼做的話,遇上Collider時會「彈回來」,形成一個不自然的抖動www
上網查了一下後才發現,那是因為直接修改position的話
它會「先移動,之後才偵察物理碰撞」
所以構成了「走進Collider裡面,才發現那是Collider而被迫出來」
一個天然呆的概念((才不是##
因此後來改用修改Velocity,問題就解決了((灑花
再來一個就是,移動是放在FixedUpdate裡面的
原本吶,我是放在Update裡的吶
但是呢,遊戲匯出後拿到別的電腦測試時,才發現
主角你跑太快了吧Σ(*゚д゚ノ)ノ ((驚
和我家筆電測試時,移動速度快了一倍有多(((゚д゚))) ((抖
明明數值是一樣的!?
後來啦,在估狗大神的協助下,才知道Update會因電腦性能差異而有不同
因為另一台測試機性能比我家的好,Update運行次數較多,所以跑的速度也增加
所以為免這種情況,改用「固定更新」的FixedUpdate,好像就解決掉了((
以此延伸,在「物理判定」時好像都在用FixedUpdate
不過這是聽回來的w
我只是個程式渣渣不能判定真偽
上面打了一大堆東西也未必是對的啦ww
((哭
因為畫圖就真的只是畫圖,這種講求美感的東西我較少東西可以寫
所以接下來是「程式」和「整合」的主場((灑花
話說回來,整個專案都開始一年多了
這篇其實比較像開發回顧才對XDD
以我個人而言,剛開始新專案時,最先寫的程式是「主角移動」
(這裡先假設美術、動畫都已經調整好)
在腳本中抓取角色動畫控制和剛體後,讓他跑跑看,測試動畫有沒有正常播放、人物有沒有跟著跑等等
(還沒習慣Blog的插入圖片,圖片大小很難抓_(:3」 有點模糊抱歉了Orz)
在剛開始接觸C#時,一些更早期的專案中,其實我是以修改position的方式來移動的w
(即transform.position = new Vector3(0,0,0,); 之類的)
但這麼做的話,遇上Collider時會「彈回來」,形成一個不自然的抖動www
上網查了一下後才發現,那是因為直接修改position的話
它會「先移動,之後才偵察物理碰撞」
所以構成了「走進Collider裡面,才發現那是Collider而被迫出來」
一個天然呆的概念((才不是##
因此後來改用修改Velocity,問題就解決了((灑花
再來一個就是,移動是放在FixedUpdate裡面的
原本吶,我是放在Update裡的吶
但是呢,遊戲匯出後拿到別的電腦測試時,才發現
主角你跑太快了吧Σ(*゚д゚ノ)ノ ((驚
和我家筆電測試時,移動速度快了一倍有多(((゚д゚))) ((抖
明明數值是一樣的!?
後來啦,在估狗大神的協助下,才知道Update會因電腦性能差異而有不同
因為另一台測試機性能比我家的好,Update運行次數較多,所以跑的速度也增加
所以為免這種情況,改用「固定更新」的FixedUpdate,好像就解決掉了((
以此延伸,在「物理判定」時好像都在用FixedUpdate
不過這是聽回來的w
我只是個程式渣渣不能判定真偽
上面打了一大堆東西也未必是對的啦ww
((哭
2018年4月2日 星期一
「傘之下」開發記錄—02
上一篇介紹了角色,今次就來說說世界觀:
*因時間關係,圖片來不及上色_(:3」
世界的設定就是這樣。
人類面對暴躁的魔物而苦惱著。
而主角卡尼為了能幫助那些苦惱的人們,踏上了旅途。
然後順手把路過的魔物「物理治療」掉
總之,世界觀和故事大綱大概「以上」/
基礎的遊戲簡介也說完了
下篇就進入「傘之下」的開發過程囉~((終於
「傘之下」的世界,是一個人類與魔物和平共處的地方
他們一直以來都和樂融融地一起生活
直至世界上出現了「暗之花」
當魔物接觸到暗之花後
會變得暴躁起來
並開始攻擊人類
迫於無奈之下,人類也只能選擇和魔物互相傷害
*因時間關係,圖片來不及上色_(:3」
世界的設定就是這樣。
人類面對暴躁的魔物而苦惱著。
而主角卡尼為了能幫助那些苦惱的人們,踏上了旅途。
總之,世界觀和故事大綱大概「以上」/
基礎的遊戲簡介也說完了
下篇就進入「傘之下」的開發過程囉~((終於
訂閱:
文章 (Atom)