[GameFramework]Demo1-如何创建一个GameFramework项目

笨木头  2018-03-2 17:45   Game Framework,Unity3D   阅读(2,035)   3条评论

本文 Game Framework 版本:3.0.9

本文 Unity3D 版本:2017.3

更多GF教程和实例:https://github.com/mutouzdl/gameframework_demo.git

 

转载请注明,原文地址:http://www.benmutou.com/archives/2535
文章来源:笨木头与游戏开发

 

为了弥补官方文档的严重缺失,同时也希望Game Framework这个框架能稍微流行开来(不管它优不优秀,代码是绝对值得学习的),木头我就自愿帮框架作者写一些基础的Demo教程吧。

噢,天呐,我真伟大(注意,这不是一篇翻译的文章!)

这一篇,我们先从创建一个GameFramework项目开始。

1.下载GameFramework Package

首先要到框架的官网下载资源包:http://gameframework.cn/download

资源包里包含了GameFramework框架的Dll(源码可以到github获取)、UnityGameFramework源码、空项目示例。

目前最新的源码是3.1.0,但是,最新的资源包是3.0.9,木头很懒的,既然只有3.0.9版本的包,那我就只下载这个版本好了。

2.新建项目,导入资源包

接下来要怎么做,就不用我说了,否则你应该要学习的不是框架,而是Unity3D入门教程。

好吧,顺便说一下,新建一个空项目,然后导入资源包就可以了:

3.我们的HelloWorld

基于历史原因,教程的第一步,当然是要来个HelloWorld了。

资源导入之后,新建一个场景,然后新建一个脚本(Demo1_ProcedureHelloWorld.cs),如:

进入我的Demo1场景,然后,重点来了,把GameFramework/Prefabs目录下的GameFramework预制体拖到Hierarchy视图里,然后变成这样:

是的,这个预制体包含了框架的基本组件,虽然作者文档奇缺,但是,框架用起来还是挺方便的(目前来看)。

最后,打开Demo1_ProcedureHelloWorld.cs脚本,写入如下代码:

using GameFramework;

using GameFramework.Procedure;

using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>;

/// <summary>

/// Demo1-HelloWorld

/// </summary>

public class Demo1_ProcedureHelloWorld : ProcedureBase {

    protected override void OnEnter (ProcedureOwner procedureOwner) {

        base.OnEnter (procedureOwner);

        string welcomeMessage = “HelloWorld!”;

        Log.Info (welcomeMessage);

        Log.Warning (welcomeMessage);

        Log.Error (welcomeMessage);

    }

}

如果大家有看过我的StarForce系列教程的话,应该很清楚,这是一个流程,也是GameFramework框架的基础。游戏的大部分的逻辑都是基于各个流程的,以下是作者的原话:

流程 (Procedure) – 是贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用。

 

由于是HelloWorld,就不深入讲解了,然后回到我们的Hierarchy视图,选中procedure对象,将我们的Demo1_ProcedureHelloWorld流程勾上,并且在Entrance Procedure(入口流程)下拉列表里选中它:

最后,运行游戏,看看日志输出:

随着三个帅气的HelloWorld输出,我们这篇教程,也就结束了。

旁白:等等!就结束了?我还没出场啊混蛋!

3 评论

  1. 兄弟我左看右看上看下看 总觉得你的理解有问题
    你代码里ProduceOwner这个类型 并不是实际表示此状态的持有者啊 而是这个状态所在的状态机啊
    我看作者源码里的一些函数签名比如 是这样的一个 protected internal virtual void OnInit(IFsm fsm)
    fsm在注释里是状态机的引用 而不是状态的owner 的这个意思

    1. 我看了一下那个飞机大战的例子 他里面也是这么写的,所以我又研究了一下。。
      发现如下。。
      状态和 状态机 都有owner
      状态的owner是他的状态机
      而状态机的owner就是他后面泛型跟的类型…

发表评论

电子邮件地址不会被公开。 必填项已用*标注