Unity 3D游戏循环逻辑和跨脚本访问数据
我是Unity3d的新手。我正在努力开发一个简单的unity3d游戏的结构的理解。我有一个基本的游戏,我在屏幕上有多个对象&我必须计算用户在它们上面点击了多少次。就像我会有杀死敌人的总数。 我的问题是实施游戏循环&计算总分的事情的最佳做法是什么。我们是否可以拥有可以在所有脚本中更新的全局变量,或者我们需要在脚本或游戏对象之间传递数据。Unity 3D游戏循环逻辑和跨脚本访问数据
问候, 哈桑伊姆蒂亚兹
没有直接回答这个,它取决于与建筑多角度。我喜欢Event聚合模式,我们在游戏中使用它。
当消息发布时,实例上的Handle方法将触发,您可以通过实现IHandle来描述事件。
在你的情况下每当敌人死亡时发布EnemyKilled事件。你的记分牌可以听这个事件并更新
是的,我希望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设置。从脚本实例化预制件也是一个不错的功能。