2017-05-08 138 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设置。从脚本实例化预制件也是一个不错的功能。