[GameFramework]Demo6-创建实体
本文 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组件增加分组就可以了:
最后再运行游戏,实体成功加载并显示(自己加光源,不然可能黑黑的):