2018年4月18日 星期三

【Unity官方教學分享】製作玩家物件的移動腳本

網頁連結

我們將在本教學中製作第一個像是遊戲的功能;在場景中移動玩家物件,這裡會用名為PlayerController的腳本來做到這一點。
PlayerController腳本在這次的教學中不會有任何關於網路的程式碼,所以這次的功能只能在單機的環境下執行。
  • 在Player prefab下新增名為PlayerController的腳本
  • 開啟PlayerController腳本並刪除所有內容
  • 將以下的腳本複製貼上到PlayerController中

using UnityEngine;

public class PlayerController : NetworkBehaviour
{
    void Update ()
    {
        float x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;
        float z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;

        transform.Rotate(0, x, 0);
        transform.Translate(0, 0, z);
    }
}
這個PlayerController腳本可以讓玩家控制畫面中的角色物件。
在預設的狀況下,Input.GetAxis(“Horizontal”)和Input.GetAxis(“Vertical”)讓玩家可以使用WASD和方向鍵輸入數值,來達到移動的效果,關於Input的更多資訊可以看這裡
最後編譯此腳本就完成角色的單機移動,可以試著把Player prefab拖曳到場景中,並執行Unity測試看看移動結果。
(測試完記得刪除場景中的Player prefab)

上一篇:註冊玩家預制物件
下一篇:測試連線時玩家物件的移動腳本

建立一個簡單的多人連線範例

2018年4月17日 星期二

【Unity官方教學分享】註冊Player prefab

網頁連結

要讓Player prefab能夠生成,就必須在網路系統上註冊。
Network Manager,也就是網路管理器,可以使用prefab來生成新的玩家物件,但在生成之前需要將prefab註冊在網路管理器中。

  • 選擇Hierarchy視窗下的NetworkManager物件
  • 在Network Manager元件下找到Spawn Info屬性並將它展開
  • 將預制物件拖曳上去

NetworkManager元件用於管理網路上的物件(也包含玩家操控的物件),由於大多數的遊戲都是以相同的prefab給所有玩家使用,所以NetworkManager特別為了玩家物件保留一個欄位,當玩家從客戶端登入伺服器時,就會生成該欄位的物件,也就是我們這次拖曳上去Player prefab。
關於NetworkManager的更多資訊,可以參考這裡

上一篇:建立Player prefab

【Unity官方教學分享】建立Player prefab

網頁連結

在本範例中所製作的Player prefab,將會在之後的教學中,成為使用者進入遊戲後操控的角色。
在預設的情況下,NetworkManager元件會幫每一個連上此網路遊戲的玩家,複製一個Player prefab並生成在遊戲中。網路的生成,及經由用戶端及伺服器同步玩家物件資料這兩件事,將在下一篇作介紹。
※補充:在Unity中,使用Instantiate()生成物件稱為"spawning",而在網路HLAPI中"spawn"一詞有更明確的定義,更多細節請看這裡,上面所提的"生成"可能無法完全的表達原意,請見諒。

在本範例中,我們會使用一個Capsule物件,加上辨識方向的"太陽眼鏡",作為Player prefab。製作完成後它在場景中大致上是長這樣:

【Unity官方教學分享】網路管理器

網頁連結

在本教學中,我們將會新增一個網路管理器。網路管理器將會控制這個多人連線專案的狀態;包含遊戲狀態管理、生成管理、場景管理、匹配及允許存取除錯資訊。
如果你是進階使用者,也可以繼承網路管理器衍生出子類別,自訂出新的功能元件,但這個部分本次的教學不會提到。

要生成新的網路管理器,我們需要新增一個物件,然後在該物件下新增NetworkManager和NetworjManagerHUD這兩個元件。

  • 新增一個空物件(Create Empty)
  • 將該物件重新命名為NetworkManager
  • 點選NetworkManager物件,在該物件下...
  • 新增Network > NetworkManager
  • 新增Network > NetworkManagerHUD

NetworkManager元件是用來管理網路狀態。
NetworkManagerHUD和NetworkManager配合使用,提供簡單的使用者介面,以便在遊戲執行時控制網路狀態。


現在可以試著執行看看Unity,NetworkManagerHUD應該會顯示以下的介面,另外關於NetworkManagerHUD和NetworkManager的更多細節,可以參照這裡

2018年4月16日 星期一

【Unity官方教學分享】多人連線範例簡介

網頁連結

多人連線技術本身是精密而且複雜的,多人連線通常會在不一樣的裝置上運行,而且它們可能位在世界上各個不同的地方,所以在同步和傳遞資料上有特殊的問題和困難。
在Unity中有內建的多人連線而且是高階的API,我們希望使用者在建立多人連線的專案時,可以輕鬆地使用它。
透過這個範例,我們將示範如何使用簡單的物件和腳本,建立一個多人連線專案。我們希望能在這個範例中,可以快速介紹Unity內建的多人連線系統和高階API的重要部分。
接下來將一步一步地示範如何使用Unity內建的多人連線系統和高階API,從頭開始建立一個多人連線的專案。本教學的步驟較為通用,目的在於傳達多人連線的基本概念,同時可用於各種不同的連線遊戲。
當本範例完成時,我們可以讓兩個玩家在不同的裝置中,操作自己的遊戲角色,而且伺服器會同步他們的操作結果,玩家應該可以互相攻擊對方或NPC角色,而當自己的角色死亡時,角色會在重生點復活。
本教學適合中階使用者,開始前最好稍微了解多人連線的內容,特別是網路概述高階API的部分。

下一篇:網路管理器

建立一個簡單的多人連線範例

2018年4月1日 星期日

非固定式虛擬方向鍵移動測試

其實我也不知道這東西的正式名稱叫什麼,總之就是之前任天堂告可樂普的那個。
因為一直對手機遊戲上人物移動操控頗有興趣,而且這方法應該可以用在不少東西上,就來實作看看了,效果就和白貓的移動相同。
另外要如何這篇不會提到要如何實作,只是結果的展示,製作過程下一篇再開始。
如上圖所示,用滑鼠或手指按著螢幕中任意位置然後拖曳,畫面中的角色就會朝著拖曳的方向移動。
而畫面中的兩個圓是UI的Image,人物則是2D物件,另外有針對解析度做移動速度的調整以及對移動速度最大值做限制,大概就是這樣,這次就到這裡。
任天堂不要告我。

2018年3月14日 星期三

將滑鼠座標轉換至UI座標的方法

如題,最近剛好遇到所以做個紀錄。
這裡我們需要做的是把滑鼠座標轉換成Unity內UI物件的2D座標,也就是把Input.mousePosition轉換成RectTransform下的anchoredPosition。

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

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