例如,如果我有一个只包含一个场景的游戏,那么我会让用户在正常游戏模式或教程游戏模式之间进行选择。游戏有4个不同的对象:一个球,4个方块和一个方形控制器。在教程模式中,我希望在暂停游戏时为用户提供指向箭头,并在用户按下被指向的对象后继续。我应该为正常模式创建一个脚本而为教程模式创建另一个脚本,制作一个脚本并检查每个函数中的教程布尔值是true还是false(如果用户按下教程按钮,则布尔值应为true)或者执行某种操作预处理
在squarecript中例如:
void OnCollisionEnter2D () {
if (isTutorial) {
PauseGame();
arrow.position = GetRelativePosition();
arrow.setActive(true);
} else {
if (canCollide) {
score++;
} else {
GameOver();
}
}
在ballcript中:
void OnMouseDown () {
if (!isTutorial) {
return;
}
ResumeGame();
}
答案 0 :(得分:3)
我们对你的游戏一无所知,所以很难回答。但作为经验法则:你输入的越少越好。还要考虑如果您需要为游戏添加新功能会发生什么,您是否需要返回并更改代码中的吨数? 如果是这样,您很可能不会编写好的代码。
作为尝试给出一个具体的答案我会说你应该做一个继承,创建一个类Level
并创建子类Tutorial
和FreePlay
或者类似的,继承自Level
。
然后,您可以在基类中添加所有“常规”功能,并在子类中添加特定内容
答案 1 :(得分:1)
通过在if语句中构造这些行为,它使代码难以理解和使用。想象一下,如果您决定想要其中一个方块来增加玩家得分并显示教程箭头,那将会是什么样子。
将行为拆分为单独的对象。对于广场,它可能类似于TutorialCollisionHandler
,ScoreCollisionHandler
和HazardCollisionHandler
。然后,您只需更改添加了哪些碰撞处理程序即可创建不同的方块,您甚至不需要编写任何代码!
现在,根据用户选择的模式,您可以使用不同的方块组合。同样的原则可以与其他教程或游戏特定行为一起使用。