如何在同一个脚本中处理两种游戏模式?

时间:2017-02-14 21:59:01

标签: c# unity3d unity5

例如,如果我有一个只包含一个场景的游戏,那么我会让用户在正常游戏模式或教程游戏模式之间进行选择。游戏有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();
}

2 个答案:

答案 0 :(得分:3)

我们对你的游戏一无所知,所以很难回答。但作为经验法则:你输入的越少越好。还要考虑如果您需要为游戏添加新功能会发生什么,您是否需要返回并更改代码中的吨数? 如果是这样,您很可能不会编写好的代码。

作为尝试给出一个具体的答案我会说你应该做一个继承,创建一个类Level并创建子类TutorialFreePlay或者类似的,继承自Level

然后,您可以在基类中添加所有“常规”功能,并在子类中添加特定内容

答案 1 :(得分:1)

通过在if语句中构造这些行为,它使代码难以理解和使用。想象一下,如果您决定想要其中一个方块来增加玩家得分并显示教程箭头,那将会是什么样子。

将行为拆分为单独的对象。对于广场,它可能类似于TutorialCollisionHandlerScoreCollisionHandlerHazardCollisionHandler。然后,您只需更改添加了哪些碰撞处理程序即可创建不同的方块,您甚至不需要编写任何代码!

现在,根据用户选择的模式,您可以使用不同的方块组合。同样的原则可以与其他教程或游戏特定行为一起使用。