今天要介紹的遊戲是Lintrix
請多多支持購買願意分享開發經驗的好遊戲
Lintrix
這個系列的文章共有四篇,它會說明很多對開發者有價值的內容,我們要探討的是如何控制時間,可惜只能在遊戲裡實現XD。我們會用我們的遊戲當作範例來說明。
Lintrix是一款已發表的動作解謎 + 一點點塔防概念的遊戲,再我們要探討的內容之前你可以先看看遊戲影片。
像Lintrix這樣玩法的遊戲並不多見,所以本文會以Lintrix為例來說明如何在Unity裡實現這種功能以及有哪些應用。 我們會用Unity來展示這功能,當然概念也同樣適用於其他引擎。
章節介紹:
- 建立關卡
- 時間倒帶
- 遊戲設計應用
- 測試自動化
關卡建立工具
一開始我們設計時間控制這樣的功能是為了方便我們建立關卡(如果各位對我們用的關卡建立工具有興趣的話,我很樂意另外寫一篇來討論)
我們其中一位開發者對於開發這種動畫工具相當有經驗,值得一提的是它還有時間軸能夠查看場景任何時間的狀態。
所以我們認為這樣的功能加入遊戲中會有很多好處
基本構想是用Unity transform的狀態和屬性來紀錄時間現狀,一旦所有物件都有這種數值就能一起返回到同一個時間上。
就解謎遊戲而言,當場景裡的物件移來移去時,他們之間的相對位置是很重要的,時間軸這樣的工具可以幫助關卡企劃更容易了解關卡狀況,也能邊玩邊建立關卡。在多數情況下能很容易的編輯某個關卡時間點,讓所有的物件在某個具體時間點定住或旋轉,當時間設定為零或開始移動時,物件會自動重新計算位置。
我們還做了快速鍵方便對時間快轉和倒帶。然後關卡建立就不會只是擺擺物體後執行,而是快轉向前或倒帶向後做時間跳躍,所以這些物體在關卡的任意時刻都會保持在預先設計的位置。
實際上,在開發Lintrix遊戲的過程中,重疊是個很大的問題,因為當場景中大多數物件移動時,很難防止它們太早碰撞。 大部分時間會出現類似這種糟糕的效果:
為了理解物體如何移動,我們加了移動軌跡,讓晶體移動碰撞的問題更容易避免。
用在晶體位移可視化也很有用
我們在建立關卡時用時間控制來進行"計時"。 這裡的計時表示調整關卡某些部分的運動,使關卡執行時物體早點或晚點出現,有時也會來回移動所有的動作。 例如,在關卡開始時可以讓玩家看到將會發生的景象。然後用時間軸輕鬆地將時間移至負值,將此時間設為從零開始。
因為在編輯模式下更新時間的腳本被加到控制時間的物件,如果想要啟用或禁用物件上更改時間的效果,只需要啟用或禁用腳本,並使它們回應或忽略時間的更改。
實做方法
下面我們一起來看看如何在Unity中實現這個功能。
我們做了非常簡單的接口:
public interface ITimeChanging
{
void AddTime(float dt);
}
實現這個接口,我們需要隨時間變化的行為。
我們還有一個時間操控實體,它是一組ITimeChanging介面的物件呼叫這些方法。 程式如下:
public class TimeManager
{
float Time{get; set;}
IEnumerable<ITimeChanging> TimeDependants { get; set; }
void SetTimeBruteForce(float time);
}
在編輯模式裡,有一個可以讓使用者直接在執行模式控制時間的腳本。如下圖所示,你可以看到關卡控制器透過它的Update()來增加時間。
展示專案連結:https://github.com/alexander91/timelineExample
我們設了一個時間軸管理器允許跳轉到不同的時間。 以及幾個帶有線性運動(LineMovement)腳本的方塊,LineMovement腳本繼承自ITimeChaning,並監聽TimeManager中的時間改變(AddTime),可以在檢視介面設定這個方塊以給定速度朝預定方向移動,程式如下:
public class LineMovement : MonoBehaviour, ITimeChanging {
[SerializeField]
Vector3 direction = Vector3.up;
Vector3 direction = Vector3.up;
[SerializeField]
float speed = 0.2f;
float speed = 0.2f;
public void AddTime(float dt)
{
transform.position += dt * speed * direction.normalized;
}
}
綜上所述,編輯器自訂時間控制工具非常適用於有固定規則的遊戲,這讓整個工作流程變得很輕鬆。 另外如果遊戲中的動作很簡單,也可以在編輯器中加入各種選項。{
transform.position += dt * speed * direction.normalized;
}
}
希望本文介紹的時間控制關卡建立方法可以給你帶來啟發。之後我們還將繼續介紹如何使用時間控制功能來改善遊戲體驗,並幫助我們進行測試,敬請期待!
沒有留言:
張貼留言