Unity中的游戏逻辑编程

5
我有一些关于Unity游戏编程的问题,我对游戏编程非常陌生。
我的一个问题是:如何在Untiy中编写“游戏逻辑”?我正在使用C#、Unity和Blender进行模型制作。 我以为我会像有一个“主”方法,我的完整游戏从这里开始,我可以在这里加载动画/角色/地图等,并且还可以包括逻辑,例如何时显示菜单、切换场景、介绍,什么时候发生什么事件等等。
但是,所有的教程中只是一些控制某些GameObject动画的.cs脚本。 那么,如何管理整个游戏逻辑(如上所述),以及所有其他与完整视频游戏相关的内容?
我错过了什么东西吗?
我认为我需要像数据库/文件之类的东西,用于保存游戏进度、配置、高分等... 我该如何处理这些?
谢谢!

看一下这个教程,它会帮助你入门。 - I.B
Unity的模型与您预期的略有不同 - 您没有要实现的单个Main()方法。相反,您可以在任何MonoBehaviour类中实现Awake()或Start()方法。大多数资源管理都是自动完成的 - 通常您只需将对象放入场景中,然后加载即可。我鼓励您寻找一些教程(Unity网站上的视频是相当不错的介绍 - 寻找脚本部分)。 - apk
请仔细阅读文档,您将获得许多有用的信息:创建游戏玩法 + 创建和使用脚本。Unity使用组件化架构 - Hellium
4个回答

5

每个Unity脚本只有附加到游戏对象后才能运行。 没有主方法,因为Unity已经处理了它。

您可以通过创建一个名为GameController的游戏对象来实现此目标,该游戏对象具有名为GameController.cs的脚本。

GameController.cs具有诸如Awake、Start、Update等方法,您可以在该类中创建游戏规则、游戏逻辑等。

其他脚本(例如附加在Player游戏对象上的PlayerController.cs)将访问GameController以将其分数和其他信息放入其中。

PlayerController.cs脚本中,您将拥有:

GameController gameController = GameObject.findGameObjectWithTag("GameController");

gameController.score++

这只是一个简单工作流程的示例


0

你可以创建一个不被销毁的游戏对象,然后将你的“主”脚本附加在上面。


0
回答一个老问题,但我发现了一个好主意,如果你需要为你的游戏提供全局变量或方法的地方。
首先创建一个C#脚本作为资产,但不要将其附加到任何GameObject上。在你刚刚创建的脚本中创建这样的类。
sing System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CommonWorld 
{
    public static AppState _instance = null;

    public CommonWorld() {
        // Your constructor here if needed one
    }

    // this makes this singleton
    public static CommonWorld Instance() {
        if (_instance == null) 
        {
            _instance = new CommonWorld();
        }
        return _instance;
    }
}

然后在您的GameObject中,您可以像这样获取CommonWorld实例

    public void start() 
    {
        CommonWorld world = CommonWorld.Instance();       
    }

我认为这是一种优雅的方法,可以在游戏对象之间共享方法和变量。


0

Unity 偏爱使用组件,每个组件都使用反射方法自我控制(通常与单例一起使用),例如:

private void Awake() {}
private void Start() {}
private void Update() {}

请参阅MonoBehaviour以获取更多信息https://docs.unity3d.com/ScriptReference/MonoBehaviour.html

这并不意味着您不能使用Unity进行更传统的自上而下方法。在只有一个脚本附加到一个游戏对象且该主对象上实现了上述方法的情况下,您可以使用资源或资产包动态加载内容。

https://docs.unity3d.com/ScriptReference/Resources.html https://docs.unity3d.com/Manual/AssetBundlesIntro.html

使用更传统的方法可能会使设计和调试更加困难,但从长远来看通常应该更加优化。

您还会发现对象确实需要被创建,但仍然以某种形式由主脚本控制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接