Unity中的游戏逻辑编程

时间:2017-03-22 22:47:44

标签: c# unity3d blender

我对Unity游戏编程有一些疑问,我对游戏编程很新。

我的一个问题:如何在Untiy中编写“游戏逻辑”?我正在使用Visual Studio与C#,Unity和Blender for Models。我假设我会有类似“主”的方法,我的完整游戏开始,我在哪里加载动画/字符/地图等等,还可以包含逻辑,比如什么时候显示菜单,过场动画,介绍,会发生什么游戏点等等。

但我在教程中看到的是一些.cs脚本,它们控制着一些GameObject的动画。但是,我如何管理完整的游戏逻辑(如上所述)与所有属于完整视频游戏?

我缺少什么?

我认为我将拥有类似数据库/文件的东西,用于保存游戏,配置,高分等...我该如何管理?

谢谢!

4 个答案:

答案 0 :(得分:1)

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

您可以拥有的方法就是创建一个游戏对象GameController,其中包含名为GameController.cs的脚本

GameController.cs有Awake,Start,Update等方法 您可以在该课程中创建游戏规则,游戏逻辑等。

附加在Player游戏对象上的其他脚本(如PlayerController.cs)将访问GameController以获取其得分等内容

PlayerController.cs脚本中,您将拥有

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

gameController.score++

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

答案 1 :(得分:0)

你可以制作Do not Destroy GameObject而不是附加你的“主”脚本。

答案 2 :(得分:0)

Unity倾向于使用通过反射方法(通常与单例结合)来控制自身的组件。

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

有关更多https://docs.unity3d.com/ScriptReference/MonoBehaviour.html的信息,请参见MonoBehaviour

这并不意味着您不能将Unity用于更传统的自上而下的方法。只有1个脚本附加到1个GameObject上,并且在该主对象上实现了上述方法。然后,您可以使用资源或资产捆绑包动态加载内容

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

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

您还将发现确实需要创建对象,但仍由主脚本以某种形式对其进行控制。

答案 3 :(得分:0)

回答老问题,但如果您需要为游戏放置全局变量或方法,我遇到了一个好主意。

首先创建一个 C# 脚本作为资产,但不要将其附加到任何游戏对象。在你刚刚创建的脚本中创建这样的类

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();       
    }

我发现这是一种在游戏对象之间共享方法和变量的优雅方式。