unityhtml5游戏开发教程,unityTinyMode⼊门教程
⼀、介绍
Tiny Mode是Unity 2018.3新出的⼀个模块,提供了全新的运⾏时和编辑器模式,可以创建⼩巧轻便的HTML5游戏和应⽤程序,⽬前预览版仅⽀持2d。⽬前仅⽀持Typescript语⾔,官⽅⽂档中介绍正在开发C#⽀持。
⼆、安装
下载unity,本教程使⽤的版本Unity 2018.3.0f2 (64-bit)。安装后,新建项⽬后,
从菜单中,选择Window> Package Manager以打开包管理器。在包管理器中,选中“Advanced”下拉列表并确保启⽤“Show Preview
Packages”。从左侧窗格的包列表中,选择Tiny Mode,安装。⽬前版本:0.13.4
安装完成后可以通过菜单Tiny > Import Samples导⼊⽰例⼯程学习
三、使⽤(1)新建Tiny Mode Projects
Tiny > File
> New Project
⽬录结构如下
可见Tiny project是包含在普通unity project⾥的并且可以新建多个。同时会有三个⽂件夹Components组件:
Entities实体
Scripts代码
同时会在uinty⼯程⽬录TinyExport下⽣成同名⽂件夹,⾥⾯则是编译运⾏和导出发布的⽂件。
在新建项⽬后会⾃动添加⼀个Entity Groups,类似于普通⼯程⾥的Scene。也可以通过菜单⼿动创建。可以同时存在多个Entity Groups,但是必须有⼀个默认启动的Startup
Group,如何设置下⾯会讲到。
(2)ESC及其在Tiny Mode中使⽤
ESC(Entity Component
System)是unity2018新出的功能。在普通unity⼯程中可以选择使⽤,在Tiny Mode中强制使⽤。
Entity:类似于GameObject
Component:仅包含数据
Tiny本⾝⾃带了很多组件
还可以Sturct、Enum、Configuration类型的组件,其中Enum字段类型强制为int32不可修改。
在编辑器中创建组件时,会⾃动⽴即在IDE中获得对它的TypeScript⽀持。Unity⾃动创建⼀个以项⽬默认命名空间中的组件命名的组件类,它扩展了基础的ut.Component类。,会同时在TinyExport\NewProject\html5\development\bind-generated.d.ts⽂件内,作者本⼈测试,此⽂件在组件新建删除运⾏会更新,修改或重命名不更新。(所以我只是添加⼀个字段后代码中并没有⽴即加上name字段)。在字段类型右侧按钮可以切换字段是单个值还是数组,眼睛图标则可以切换字段是否显⽰,如果只是在代码逻辑中使⽤则可以以关闭显⽰。
System:仅是逻辑处理
system不需要挂在在object上才会启动,只要在项⽬⾥,项⽬启动时就会⾃动启动,这是和uinity project的区别。在system中使⽤Component可以使⽤以下代码:
@ut.st)(3)代码编写
这⾥继续上⾯代码
新建system FirstSystem
新建了⼀个sprite和camera,并给sprite添加了之间新建的Component test,补充system代码。
代码主要功能获取名叫Sprite的sprite⾝上的test Component的值,并且遍历获取所有实体的名字。
namespace game {
@ut.st)
unity 教程/** New System */
export class FirstSystem extends ut.ComponentSystem {
OnUpdate():void {
console.log(ComponentData(EntityByName("Sprite"),st).name)
this.world.forEach([ut.Entity], (entity) => {
console.log(EntityName(entity));
});
}
}
}
打印输出
⾸先新建的System都继承了ut.ComponentSystem基类。
/** Base class for user-defined Systems.*/
abstract class ComponentSystem {
/** Scheduler executing this system.*/
readonly scheduler: ut.Scheduler;
/** World on which this system operates on.*/
readonly world: ut.World;
/** Override this method to define your system update function.*/
abstract OnUpdate():void;
}
world:世界,主要⽤于管理实体,组件
this.world.forEach(filter, callback)是可以迭代匹配该世界中给定组件集的每个实体。第⼀个参数为组件类型数组过滤器,过滤出所有符合条件的实体。例如在过滤器中添加ut.Entity允许您访问循环中的实体句柄。第⼆个参数为回调函数,其参数与过滤器⼀⼀对应。⽰例代码也可以修改为:
namespace game {
@ut.st)
/** New System */
export class FirstSystem extends ut.ComponentSystem {
OnUpdate():void {
this.world.forEach([ut.st], (entity,test) => {
console.log(EntityName(entity));
console.log(test.name)
});
}
}
}
输出
只有sprite没有camera,并且也获取到了test组件的值,更为⽅便。
filter也可以⾃定义⼀个过滤类
namespace game {
/** New System */
export class FirstFilter extends ut.EntityFilter {
entity: ut.Entity;
test: st;
}
}
namespace game {
/** New System */
export class FirstSystem extends ut.ComponentSystem {
filter: game.FirstFilter = new FirstFilter();
OnUpdate():void {
this.filter.ForEach(this.world, (entity) => {
console.log(EntityName(entity));
console.log(ComponentData(st).name)
});
}
}
}
输出
这样获取组件的值⿇烦点。
scheduler:调度器。上⾯的代码帧期间的任何时间运⾏。也就是说,它可能是第⼀个被执⾏的也可能是最后⼀个。如果需要控制不同system执⾏的顺序,则需要使⽤装饰器来检测代码:@ ut.executeAft
er和@ ut.executeBefore。参数为⾃定义的system类型
例:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。