2017-05-08 88 views
0

我是Unity3d的新手。我正在努力開發一個簡單的unity3d遊戲的結構的理解。我有一個基本的遊戲,我在屏幕上有多個對象&我必須計算用戶在它們上面點擊了多少次。就像我會有殺死敵人的總數。 我的問題是實施遊戲循環&計算總分的事情的最佳做法是什麼。我們是否可以擁有可以在所有腳本中更新的全局變量,或者我們需要在腳本或遊戲對象之間傳遞數據。Unity 3D遊戲循環邏輯和跨腳本訪問數據

問候, 哈桑伊姆蒂亞茲

回答

2

沒有直接回答這個,它取決於與建築多角度。我喜歡Event聚合模式,我們在遊戲中使用它。

當消息發佈時,實例上的Handle方法將觸發,您可以通過實現IHandle來描述事件。

在你的情況下每當敵人死亡時發佈EnemyKilled事件。你的記分牌可以聽這個事件並更新

0

是的,我希望Unity中有一個更容易的變量傳遞系統,如果你在任何腳本的開始處聲明'global.MyVariable1',GameMaker4有一個很好的方法,它來自任何其他腳本只是把'global.MyVariable1'。

爲了在Unity中得到這個功能,我發現一個簡單的方法是製作一個'MainController'對象,並將它放在遊戲中的第一個場景中,並且不要破壞腳本,該對象將處理所有遊戲變量,遊戲場景變化,保存/加載等等。因爲它沒有被破壞,所以它會在任何場景中攜帶變量。

要訪問它,請使用GameObject.GetComponent函數。所以是的,我們需要在遊戲對象上的腳本之間傳遞數據。其他人使用大型,多類,複雜的遊戲狀態系統,但這些系統很難調試/更新,特別是如果您忘記了一段時間後如何設置它們。 遊戲結構:

  • 已有INT變量MODE,保持遊戲狀態的軌道(例如,MODE = 0; // 前奏或主菜單,MODE = 1; // PlayerSelectMenu, MODE = 2; // GameTypeA_Level1,MODE = 3; // GameTypeB_Level1等

  • 有暫停/未暫停

一個BOOL的對象你點擊計數:

//put this on object to click on 
using UnityEngine; 
using System.Collections; 

public class MouseClick : MonoBehaviour 
{ 
public MainController mcont;//reference to the MainController Object 
void Start() 
{ 
    mcont = GetComponent<MainController>(); 
} 
//now to access any MainController var's use 'mcont.VARIABLE' 
void OnMouseDown() 
{ 
    mcont.ObjClicked += 1; 
} 
} 

還有其他內置團結鼠標功能: OnMouseEnter()OnMouseOver()OnMouseExit()

我不知道那個傢伙在說什麼,'沒有直接的答案'?我習慣於使用編譯器,但非常喜歡拖放式Unity設置。從腳本實例化預製件也是一個不錯的功能。