笨木头  2018-03-16 17:20     Unity3D,Game Framework     阅读(13519)     评论(11)
转载请注明,原文地址: http://www.benmutou.com/archives/2587
文章来源:笨木头与游戏开发
本文 Game Framework 版本:3.1.1

本文 Unity3D 版本:2017.3

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

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

实体是游戏里最重要的对象之一,本篇我们一起来看看怎么创建实体。

1.创建初始场景和实体预制体(Prefab

初始场景的创建就不多说,一个Demo6场景加上一个Demo6_ProcedureLaunch.cs流程脚本,并设置好初始流程,具体参考Demo1。

创建实体时,是从预制体创建的,所以我们需要建一个预制体,随便建,比如我建了一个很复杂的预制体——一个Cube。

我们把预制体命名为CubeEntity吧。

最终的目录结构是这样的:

2.实体逻辑处理类

一个实体预制体仅仅只是用来展现的,要让实体拥有生命,还需要一个负责处理逻辑的脚本。

新建一个脚本,命名为Demo6_HeroLogic.cs:
using GameFramework;
using UnityGameFramework.Runtime;

/// <summary> /// 英雄逻辑处理 /// </summary> public class Demo6_HeroLogic : EntityLogic { protected Demo6_HeroLogic() { }

protected override void OnShow (object userData) { base.OnShow (userData);

Log.Debug("显示英雄实体."); } }
 

只要让类继承EntityLogic,即可成为逻辑处理类,其中包含多个生命周期,大家可以自己进去EntityLogic.cs类查看。

这里仅重写OnShow函数,在实体被加载时打印一条日志。

3.加载实体

准备好预制体和逻辑处理类之后,就可以加载实体了,我们在初始流程里加载实体试试:
using GameFramework;
using GameFramework.Procedure;
using UnityGameFramework.Runtime;
using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>;

public class Demo6_ProcedureLaunch : ProcedureBase { protected override void OnEnter(ProcedureOwner procedureOwner) { base.OnEnter(procedureOwner);

// 获取框架实体组件 EntityComponent entityComponent = UnityGameFramework.Runtime.GameEntry.GetComponent<EntityComponent>();

// 创建实体 entityComponent.ShowEntity<Demo6_HeroLogic>(1, "Assets/Demo6/CubeEntity.prefab", "EntityGroup"); }

}

加载实体自然需要用到框架的实体组件,调用实体组件的ShowEntity即可加载实体。

其中需要指定逻辑处理类的类型、传入预制体路径和实体分组名称(随便写一个,没事的)。

4.运行测试

设置好初始流程之后,运行游戏,看看效果吧。

(旁白:报错了!你肯定挖坑了!)

 

是不是报错了?



没错,报错是正常的,因为你们在调用ShowEntity的时候随便填了一个实体分组名称。

那样是不道德的,因为根本就不存在这个分组。(旁白:刀在这,大家随意)

 

只要在Hierarchy视图里,给Entity组件增加分组就可以了:



 

最后再运行游戏,实体成功加载并显示(自己加光源,不然可能黑黑的):



11 条评论
  • 2019-06-28 11:00:56

    这种加载预制,包括前面的ui预制的路径写法,实际打包出来不是调不到了吗,真正用起来怎么写
    0回复
    • 博主 笨木头 2019-07-01 07:53:27

      调得到的,放心,我个人的游戏一直在用这个框架,没什么问题
      0回复
      • wj 2019-07-17 09:27:40

        如果打成Ab包呢,咋加载
        0回复
        • 博主 笨木头 2019-07-18 07:21:23

          一样的,开发的时候是怎么做的就是怎样的,打不打包都一样,框架已经处理了。
          0回复
          • BigQwe 2021-03-05 10:55:36

            大佬,如果给资源加密了怎么加载资源?
            0回复
            • 博主 笨木头 2021-03-05 11:52:43

              我也不太清楚,好久没研究了,抱歉
              0回复
  • 八嘎君 2018-12-12 21:51:40

    ShowEntity一定要写一个索引id吗?感觉这样做好麻烦,不好管理
    0回复
    • 博主 笨木头 2018-12-13 11:09:49

      目前来说,确实是需要的。
      0回复
  • 2018-07-18 09:59:07

    实体加载成功了,父类里面确实有调用onshow的方法。因该是onshow这方法是在实体被初始化时就被调用的。
    0回复
  • 2018-07-16 16:44:39

    有一个疑问就是herologic里面的onshow方法没有调用怎么运行的
    0回复
    • 博主 笨木头 2018-07-17 08:47:44

      实体有加载成功吗?应该要调用了才正常的
      0回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发