2016年10月2日 星期日

【Unity】轉珠系統專案

下載連結
解壓縮密碼:JL1002
前陣子製作轉珠系統的專案檔,先分享出來給各位研究看看。
如上圖看到的,和上次番外篇提到的差不多。
專案內包含:
Scene下的場景。
Resources/Image下的珠子圖檔和背景圖。
Resources/Prefabs下的珠子物件。
Script下的四個腳本。

以下是四個腳本的名稱和功能:
PuzzleSystem
負責盤面和珠子初始化、尋找珠子群組、連結Combo、消除Combo。
PuzzleControl
負責控制轉珠的各階段狀態及呼叫PuzzleSystem下的函式。
Orb
負責儲存珠子的資訊(如珠子類型、編號、群組)及處理珠子動畫。
Finger
負責處理轉珠時珠子的交換。

這次就到這裡。

2016年9月20日 星期二

【自製小遊戲】記憶九宮格

google play連結
記憶九宮格,挑戰你記憶力的極限。
跟著畫面上的提示,依序點擊九宮格。
每答對三次點擊次數就會增加,你的記憶力能到多少等級呢?
素材:
http://piposozai.blog76.fc2.com/

2016年8月19日 星期五

【Unity官方教學分享】Update和FixedUpdate

網頁連結

Update在Unity中是最常使用的函式,遊戲執行的每一個frame都會呼叫Update,通常用來處理以下幾種動作:
沒有物理的物件移動。
簡易的計時器。
接收滑鼠、鍵盤的輸入。
另外要注意的是,每次呼叫Update的間隔時間並不相同。

FixedUpdate類似Update,但不同的是FixedUpdate會在Unity的物理階段呼叫,所以有物理性質的動作都建議在FixedUpdate中處理。
另外呼叫FixedUpdate的間隔時間每一次都會相同,開發者可以在Edit -> Project Settings -> Time中的Fixed Timestep欄位調整。

2016年8月17日 星期三

【Unity官方教學分享】Awake和Start

網頁連結

Awake和Start是在讀取腳本時優先被呼叫的函式,但它們之間還是有些許的不同。
Awake函式即使腳本沒有啟用(enable)依然會執行,適合使用在設定參照與初始化。
Start會在Awake之後,但只會在腳本為啟用狀態時呼叫,所以當腳本啟用後,需要優先執行一次的動作,就適合在Start中處理

以下是Unity函式執行的順序,除了初始化時的Awake和Start之外,也包含其他階段函式執行的順序
https://docs.unity3d.com/Manual/ExecutionOrder.html

2016年8月16日 星期二

【Unity官方教學分享】範圍和權限修飾詞

網頁連結

在程式碼中宣告變數的位置,會決定該變數可以被使用的範圍,以下面的程式碼為例。
using UnityEngine;
using System.Collections;

public class ScopeAndAccessModifiers : MonoBehaviour
{
    ////(1)
    public int alpha;////(3)

    private int beta = 0;////(4)
    private int gama = 5;

    void Example(int pens, int crayons)////(2)
    {
        int answer;
        answer = pens * crayons * alpha;
        Debug.Log(answer);
    }

    void Start(){}

    void Update ()
    {
        Debug.Log("Alpha is set to:" + alpha);
    }
    ////
}
(1)這是一個名為ScopeAndAccessModifiers的類別, 在括號中所有內容都為該類別的區域(local)變數或函式。
(2)在Example函式中宣告的變數;pens、crayons、answer,則是Example函式的區域變數,無法在該函式以外的地方存取這些變數。

2016年8月12日 星期五

【Unity官方教學分享】迴圈

網頁連結

迴圈是程序中重複執行程式碼的方法,本篇會提到四種迴圈種類,分別是while、do-while、for、foreach,首先對這四種迴圈建立腳本。

2016年8月11日 星期四

【Unity官方教學分享】if條件式

網頁連結

如何開啟CC字幕?

在程式碼中,經常會遇到某些條件達成才執行的內容,這時可以使用if條件式來完成,首先來看以下的程式碼。
using UnityEngine;
using System.Collections;

public class IFStatements : MonoBehaviour
{

    public float coffeeTemperature = 85.0f;
    private float hotLimitTemperature = 70.0f;
    private float coldLimitTemperature = 40.0f;

 void Update ()
    {
        if (Input.GetKeyDown(KeyCode.Space))
            TemperatureTest();
        coffeeTemperature -= 5.0f * Time.deltaTime; 
 }
    void TemperatureTest()
    {
        if (coffeeTemperature > hotLimitTemperature)////(1)
        {
            Debug.Log("Coffee is too hot.");
        }
        else if (coffeeTemperature < coldLimitTemperature)////(2)
        {
            Debug.Log("Coffee is too cold.");
        }
        else////(3)
        {
            Debug.Log("Coffee is just right.");
        }
    }
}

2016年8月10日 星期三

【Unity】轉珠系統製作番外篇 - 進度報告和告知


影片中看到的就是目前進度,轉珠結束後的消珠、落珠到沒combo為止,以及交換、消除及落下的動畫。
但過程中為了bug以及追加動畫,更動了不少專案內容,下一篇可能就不會那麼快。
APK連結點這裡,可以裝來轉轉看。
這次就到這裡。

素材:
http://www.fordesigner.com/maps/3813-0.htm
http://blog.goo.ne.jp/ari1192jp_001

2016年8月9日 星期二

【Unity】轉珠系統製作Part.5 - 珠子移動和交換

Part.4    進度報告和告知

上次說到了珠子的消除、落下和生成,接下來就要進入珠子的移動與交換,以下是這次的目標。
使用滑鼠或手指按著珠子,接著拖曳珠子移動可以與其他位置的珠子交換,直到放開珠子或指定時間到時結束。

2016年8月6日 星期六

【Unity】轉珠系統製作Part.4 - 珠子消除、落下和生成

Part.3    Part.5

在上一篇中我們建立了combo陣列,同時也標記了要消除的珠子,接下來要實際做珠子消除、落下和生成,下面是分階段顯示這次的目標。
上圖動作做完後,再回到分群組的步驟直到沒combo為止,就可以得到以下結果。
可以生成一個無combo的初始化盤面,這就是本篇的目標。

2016年8月5日 星期五

【Unity】轉珠系統製作Part.3 - 珠子消除判斷與Combo建立

Part.2    Part.4

在上一篇我們做了同屬性珠子的相連判斷並建立群組,接下來要在各群組中找到符合消除條件的珠子並做上記號,下圖是這次的目標。
將同群組中行或列相連大於3顆的珠子標記消除,同時儲存該combo的屬性及珠子數。

2016年8月3日 星期三

【Unity】轉珠系統製作Part.2 - 珠子相連判斷

Part.1    Part.3

在上一篇我們生成了盤面上的珠子,並且隨機給了珠子屬性,接著我們需要把同屬性且相連的珠子分成同群組,方便日後計算combo,下圖是這次的目標。
將同屬性相連的珠子分成同一個群組,並且附上編號。

2016年8月2日 星期二

【Unity】轉珠系統製作Part.1 - 產生盤面

             Part.2

這次要來做轉珠遊戲中的關鍵要素─轉珠系統,全部完成可能需要六到七篇左右,第一篇就從產生盤面開始吧,下圖為這次的目標。
按下執行時,依照盤面的行列數產生相同數量的珠子,並且隨機賦予珠子屬性(不考慮消除)。

2016年7月28日 星期四

【Unity官方教學分享】C#和Javascript語法比較

網頁連結

如何開啟CC字幕?

在新增腳本時,C#會顯示類別,如以下程式碼的CSharpSyntax類別。
using UnityEngine;
using System.Collections;
public class CSharpSyntax : MonoBehaviour {
    void Start () 
    {
    }
    void Update ()
    {
    }
}
而Javascript的類別則是隱藏,開發者輸入的程式碼會自動在此類別之下。
另外第一行的#pragma strict會強制使用者輸入變數型別。
#pragma strict
function Start () 
{
}
function Update () 
{
}

2016年7月27日 星期三

【Unity官方教學分享】規則和語法

網頁連結

如何開啟CC字幕?

本篇文章要介紹規則(Conventions)和語法,程式語法是一種有結構性的語言,加上一些必要的規則就可以閱讀並且撰寫程式。
舉例來說,點符號運算子(dot operator)。
點符號運算子輸入時為英文的句號 ".",如下面程式碼看到的,它在兩個單字之間。
using UnityEngine;
public class BasicSyntax : MonoBehaviour 
{
    void Start () 
    {
        Debug.Log(transform.position.x);
    }
}
撰寫方式就像寫地址一樣,假設把Debug當作是國家,打上 . 後接著Log就是在Debug之下的城市。
再以transform為例,transform是國家,position是城市,而x就是position之下的某個區。

2016年7月25日 星期一

【Unity官方教學分享】變數與函式

網頁連結


這次的內容是變數(Variables)函式(Functions)
變數可以看成用來裝資料的箱子,不同類型的資料,需要不同類型的箱子來裝,以下是宣告變數的例子。
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    int myInt, newInt;

    float myFloat = 5.0f;
}
首先看到 int myInt, newInt; 那一行。
(1) int代表此變數的型別,意思是接下來宣告的變數將會是整數(Integer)。
(2) myInt是此變數的名稱用來辨認此變數的名稱。
(3) 如果要同時宣告多個相同型別的變數,用逗點 , 將各個變數隔開,如myInt, newInt。
(4) 最後以分號 ; 做結尾,名為myInt及newInt的變數就宣告完成。
接著看到下一行的 float myFloat = 5.0f; ,如果依上述的規則,就是一個名為myFloat的浮點數(float),但多了= 5.0f是?
(5) = 5.0f 表示在宣告myFloat的同時,給它一個5.0的浮點數數值,後續如果呼叫myFloat時,它就會是5.0,以下面程式碼為例
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    float myFloat = 5.0f;

    void Start() {
        Debug.Log(myFloat);
    }
}
Start函式會在遊戲專案運行最初,執行一次函式裡的內容,
這裡為 Debug.Log(myFloat); ,會在Console視窗顯示myFloat的數值,結果如下。
變數與函式 Variables and Functions

2016年7月23日 星期六

【Unity官方教學分享】分析器資訊

網頁連結


Unity內建的分析器(profiler)讓開發者可以快速而且準確的評估遊戲效能,分析器資訊可以讓遊戲執行的平順而且有效率。

點擊Window -> Profiler開啟分析器視窗。
分析器資訊 Introduction to the Profiler
分析器視窗就像其他Unity編視窗一樣,可嵌入任意位置,讓開發者可以方便使用。
當分析器視窗開啟,往後執行相同專案時,分析器就會預設為開啟的狀態。

2016年7月22日 星期五

【Unity官方教學分享】腳本行為元件

網頁連結

如何開啟CC字幕?

程式腳本在Unity內建議使用行為元件(Component),就像其他元件掛載在物件上,顯示於檢視(Inspector)中。
以下是簡單的元件範例。
腳本行為元件 Scripts as Behaviour Components
上圖中的Cube被添加了Rigidbody元件,這代表它被賦予物理的質量,所以專案運行時,Cube會受到重力而往下掉。

2016年7月21日 星期四

【Unity】使用導航網格(NavMesh)實踐滑鼠點擊地板的人物移動

本文章會提到的‧
滑鼠點擊地板的人物移動3D與2D射線中提到的射線(Ray)。
Unity導航系統前三篇。
Mecanim動畫系統Part1Part3Part4

本文開始。
這次要做的是,使用滑鼠點擊地板的人物移動操控。
移動路徑規劃使用導航網格(NavMesh),移動目標位置使用射線(Ray)指定,人物動畫則是使用Mecanim動畫系統
成果如下圖。
使用導航網格(NavMesh)實踐滑鼠點擊地板的人物移動

【Unity官方教學分享】建構與播放器設定

網頁連結


建構(Build)是將專案輸出成可執行的格式,因為Unity支援多平台,輸出的格式會因平台而不同。
建構設定可以從File -> Build Settings...開啟視窗來調整。
Build and Player Settings 建構與播放器設定

2016年7月20日 星期三

2016年7月19日 星期二

【Unity官方教學分享】專案面板和匯入

網頁連結

如何開啟CC字幕?

專案(Project)是用來管理專案內的所有資源(Assets),專案建立或匯入的資源會存放在本視窗。

點擊左上角生成按鈕(Create),可以在專案中建立資源。
專案面板和匯入 The Project Panel and Importing
 或是在專案中右鍵點擊Import New Asset...,匯入外部的資源。
專案面板和匯入 The Project Panel and Importing

【Unity官方教學分享】階層與物件父子關係

網頁連結

如何開啟CC字幕?

階層( Hierarchy)是用來顯示場景中物件的列表,排序可依Transform字母順序。
排序依據可以點擊搜尋欄右邊的按鈕切換。
階層與物件父子關係 The Hierarchy and Parent-Child relationships

2016年7月18日 星期一

【Unity官方教學分享】NavMesh障礙物

網頁連結

如何開啟CC字幕?

使用NavMesh障礙物元件,可以做出可移動的障礙物,例如門、倒塌的牆、突然掉落擋住去路的石頭等等。
NavMesh Obstacles NavMesh障礙物
如上圖所看到的,帶有NavMesh障礙物元件的物件擋住原先路徑時,正在做導航的物件會重新規畫路徑。


【Unity官方教學分享】分離網格連結

網頁連結

如何開啟CC字幕?

這次要談的是分離網格連結(Off-mesh Links),可以用來實作導航過程中,需要跳躍的地方。
分離網格連結:
Off-mesh Links分離網格連結
 分離網格連結:
Off-mesh Links分離網格連結

2016年7月15日 星期五

【Unity官方教學分享】NavMesh烘焙

網頁連結

如何開啟CC字幕?

Unity導航系統中的移動範圍,會依照NavMesh導航網格來決定,所以在讓物件移動前需要生成NavMesh,而在Unity中生成NavMesh是透過烘焙。
首先點擊Window -> Navigation開啟導航系統視窗開啟導航視窗後可以看到三個標籤,分別是ObjectBakeAreas
NavMesh烘焙 NavMesh Baking
在烘焙出NavMesh之前,我們必須告訴Unity那些物件是navigation static
被設定navigation static的物件,代表著它具有不能移動而且可以行走的特性,通常是地板、牆壁或障礙物。

2016年7月13日 星期三

【Unity官方教學分享】導航系統概要

網頁連結

如何開啟CC字幕?

在Unity中,開發者可以使用內建的導航系統,讓角色可以更聰明且精確的移動。
導航系統概要 Navigation Overview
使用本系統,開發者可以讓角色即時在3D環境中移動。

2016年7月12日 星期二

【Unity官方教學分享】遊戲視圖

網頁連結

如何開啟CC字幕?

遊戲視圖會在按下播放按鈕後運行。
遊戲視圖 The Game View
遊戲視圖會顯示遊戲執行的情況,開發者可以在此視窗檢視遊戲運行的結果。

2016年7月9日 星期六

【Unity官方教學分享】場景視圖

網頁連結

如何開啟CC字幕?

以下是大略的內容,由於和影片中使用的Unity版本不同,多少會有些差異。
首先是右上角的控制按鈕:
場景視圖 The Scene View
可以透過滑鼠點擊,或是鍵盤快速鍵切換,對應鍵盤由左至右依序是Q、WERT。

2016年7月6日 星期三

【Unity官方教學分享】介面概要

網頁連結

如何開啟CC字幕?

大略提一下影片教學內容,首先是各主要視窗:
介面概要 Interface Overview
這裡大致介紹了Unity內的五大視窗;場景視窗遊戲視窗階層專案檢視
場景視窗讓開發者可以視覺化建構自己的遊戲。
遊戲視窗可以即時顯示遊戲運行的結果,當按下播放時會執行。
階層中含有場景內所有的物件。
專案中包含本專案所有的資源。
檢視會顯示物件或資源的資訊,當點擊物件或資源時會顯示。

2016年7月4日 星期一

【Unity】使用3D與2D射線(Ray)來判斷物件

今天來提判斷被點擊物件的方式,射線(Ray)。
這次會分3D射線及2D射線,首先從比較常看到的3D射線開始吧。
Unity Ray

2016年6月25日 星期六

【Unity】Random - 隨機產生值

今天來記一下每次要用都會忘記的功能;Random隨機值。

using UnityEngine;
public class RandomTest : MonoBehaviour {
    void Start () {
        Random.seed = System.Guid.NewGuid().GetHashCode();
        int i = Random.Range(0, 10);
        float f = Random.Range(0.0f, 10.0f);
        float v = Random.value;
    }
}

Random.seed可以設定隨機值的種子值,若不做更動是依照系統時間。
Random.Range可以隨機出整數或浮點數,需要給最大和最小值,
Random.Range(0, 10)為例;就是隨機出0以上,未滿10的數值,範圍最小值,不含最大值。
Random.value會隨機出介於0到1之間的浮點數,可以用於color的RGB這類介於0到1之間的值。

Random API連結:http://docs.unity3d.com/ScriptReference/Random.html

當中還有一個隨機HSV色彩空間,這裡就不多提。

2016年5月23日 星期一

【自製小遊戲】指示!顏色或文字?

遊戲連結:
https://play.google.com/store/apps/details?id=com.jerrardliu.clickcolor

遊戲玩法:
開始遊戲後,畫面會隨機出現"依顏色"或"依文字"的指示,
以及帶有不同顏色的文字敘述,
玩家要依畫面的指示,點擊正確的顏色,
回答完九題結束,
回答時間越短,會在排行榜越前面,
盡全力刷新自己的排名吧。

2016年4月18日 星期一

【Unity】Mecanim動畫系統Part5 - 使用Any State狀態立刻播放某段動畫

Part4
這次要來談Mecanim動畫系統下預設的動畫狀態─Any State,就如它的命名方式,Any State可以在達成條件時,立刻進入某一個動畫片段。
Any State在Animator視窗中是一個淺藍色狀態,可建立連結到其他動畫,但不可被其他動畫連結。
Unity Mecanim

2016年4月8日 星期五

【Unity】Mecanim動畫系統Part4 - 使用腳本做動畫轉換

Part3
這次要來談使用腳本轉換Animator下的動畫,首先看到Animator的編輯視窗,點擊Parameters,按下+按鈕可以建立變數。
Unity Mecanim
可建立的變數有Float、Int、Bool和Trigger,變數右邊欄位可以設定初始值,之後會透過改變這裡的變數數值,做動畫的轉換。
Unity Mecanim

2016年4月5日 星期二

【Unity】Mecanim動畫系統Part3 - 動畫轉換的建立和屬性設定(1)

Part2
這次要來談Animator編輯視窗中,動畫轉換的建立和屬性設定,在編輯視窗中需要兩個以上動畫,這次會使用下面連結內的動畫檔。
https://dl.dropboxusercontent.com/u/90403802/Animations.unitypackage
Animator編輯視窗放入動畫後,在初始動畫元件上右鍵->Make Transition。
Unity Mecanim

2016年3月31日 星期四

【Unity】5.0版本後的Skybox和舊版本材質下載

今天要加天空包的時候遇到兩個問題,一個是在熟悉的地方找不到Skybox的設定,查了一下才發現5.0之後移動了位置。
開啟Window->Lighting,就可以找到Skybox的設定。

【Unity】Mecanim動畫系統Part2 - 動畫檔製作

Part1
接續上一篇,這次來提動畫檔的製作,會繼續使用Part1中做動畫的Cube物件。
在Project右鍵新增Animation。
Unity Mecanim

2016年3月30日 星期三

【Unity】Mecanim動畫系統Part1 - 開啟動畫編輯器並播放第一個動畫

這次想花點時間把Mecanim動畫系統提的完整一點,一方面補足以前沒提過,或是沒講完整的部分,另一方面看看自己有那些沒理解的。
Mecanim是Unity 4.0版本後釋出的動畫系統,在動畫控制,特別是3D人物上提供許多方便的功能,官方有提供完整範例Mecanim Example Scenes,可以在Asset Store中搜尋到,大略的介紹就到這,接著就開始這次的主題
開啟Unity專案,在場景新增要做動畫的物件,基本上能想像到的物件都可以使用Mecanim系統,3D的Object、2D的Sprite、Light或是UI物件,這裡就簡單的使用Cube物件。
點選場景中的Cube物件,增加Animator Component到物件下。
Unity Mecanim

2016年3月25日 星期五

【Unity】Animator2D動畫切換 - 待機>行走>跑步

成品(不含按鍵D):https://dl.dropboxusercontent.com/u/90403802/AnimatorRun/AnimatorRun.html
這次來提animator動畫切換,要做的是人物待機、行走和跑步動畫切換,動畫使用UnityChan的2D圖製作,在以下的連結可以找到:
http://unity-chan.com/
Unity animator sprite
Unity animator sprite
將下載好的package匯入專案中,找好一組待機、行走和跑步的圖片。

2016年3月24日 星期四

【Unity】使用Scrollbar做音量調整

這次來談談音量調整,這次會使用Scrollbar作為音量的控制器。
首先新增GameObject->UI->Scrollbar以及Button,分別做音量控制條和是否靜音按鈕。
Unity Volume Control

2016年3月23日 星期三

【Unity】Shadow UI物件陰影

前篇:Unity - Outline UI物件外框
前陣子提到過物件外框,之後才發現有另一個UI效果可以用,這次來稍微提一下。

Shadow效果可以在UI物件(Text、Button等)上,加入Compontent上找到。
UI Shadow

【Unity】可讀檔寫擋的路徑

Application.dataPath:
與遊戲資料相同的資料夾,例如在Unity編輯環境下執行的話,就會指向Assets資料夾。

Application.persistentDataPath
ios和android平台使用的讀寫檔路徑,此路徑的資料不會因為遊戲更新而消除。

Unity編輯環境:
dataPath persistentDataPath
C:/Users/jerrard-liu/Documents是專案資料夾的路徑,UIMoveTest是專案資料夾,dataPath路徑為專案資料夾下的Assets資料夾。
persistentDataPath路徑則是在AppData下,路徑就不會因為專案資料夾移動而改變。

2016年3月4日 星期五

【自製小遊戲】海賊桶

家喻戶曉的海盜桶小遊戲。
連結:https://play.google.com/store/apps/details?id=com.Jerrardliu.PirateBucket#details-reviews
遊玩方式:
1.決定遊玩人數以及桶子上洞的數量。
2.開始後選擇桶子上的洞,把劍插進去。
3.畫面顯示safe的話,交給下一位玩家。
4.如果out的字樣出現,該玩家為輸家。

2016年1月8日 星期五

【Unity】Outline UI物件外框

後篇:Unity - Shadow UI物件陰影
許久沒發文了,這次來提一個輕鬆修飾UI的組件 ─ Outline,可以讓物件增加外框的效果。
首先來看下面這張圖:

這是一個UI->Text物件,在這個物件下新增Outline,接著調整一下Effect Color參數:

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...