menu Dark's Blog
法环解包 — 对FS社宝具库
2022-10-02 |0 条评论
解包相关工具工具功能相关链接需求UXM用于对游戏本体进行解包与打包https://github.com/JKAnderson/UXM.NET 4.7.2Yabber对文件进行解包,支持 .bnd...
动作游戏设计经验 - 其一
2022-08-20 |0 条评论
设计射击游戏有瞄准,射击,后坐力三个绕不开的部分,动作游戏也有一些天然要去设计的元素想象一个角色从玩家输入触发攻击按键,到角色执行攻击动画,再到敌人受到伤害做出受击动画这个过程可拆解分为:输入触...
message
2022-05-27 22:30:00

UE 通用解包工具

UE Viewer :https://github.com/gildor2/UEViewer

使用方法

解压后打开 umodel.exe ,在 Path to game files 中找到游戏路径,勾选 Override game detection
选择 UE4,并找到 ARK ,在 View / export object types 中可以选择想要查看和导出的文件类型
最后找到需要的文件点击 Export 即可导出

image2022-4-11_14-27-42.png

目前 UE Viewer 适配的游戏

image2022-4-11_14-32-57.png

Unity 通用解包工具

AssetStudio:https://github.com/Perfare/AssetStudio/releases
UnityAssetsExplorer:https://archive.org/download/UnityAssetsExplorer

使用方法

对 Bundles 文件进行解包,选中 .bundle 文件

image2022-4-11_10-38-52.png

点击 File → Load Folder,找到刚才解包的文件夹,选择 content.bundle_unpacked 文件夹

image2022-4-11_10-44-25 (1).png

找到想要的模型,点击 Model → Export selected objects 选择一个文件夹进行导出

image2022-4-11_11-8-31.png

【UE5】 Control Rig 对于 IK 的相关方法
2022-03-24 |0 条评论
Basic IK (Two Bone IK)优点:准确、快速、开销小缺点:不能作用与三根及以上的骨骼FARBIK基于位置的数值算法,从尾到头,再从头到尾进行位置迭代至目标距离阈值内,或达到迭代次...
【Unity | NetCode】使用 Ghost 方式传递信息
2021-04-03 |0 条评论
NetCode 官方搭建文档NetCode 0.1.0 文档翻译前期准备创建一个 GameObject 并添加 ConvertToClientSeverEntity 组件,用来负责在客户端与服务...
message
2021-03-27 10:26:00

当一个实体被删除时,会有以下几步操作

  • 查找引用该实体的所有组件
  • 删除这些组件
  • 回收实体的 ID 以供重新使用

但当存在 State 组件时,实体不会被删除,只会删除除了 State 组件以外的组件
当配合使用 StateComponentData 与 ComponentData 时可以实现观察实体当前的状态

Tag(ComponentData)State(StateComponentData)
Tag 存在,State 缺失实体刚被创建,未被初始化
Tag 存在,State 存在实体已被初始化,可以使用
Tag 存在,State 存在实体处于删除状态

例如:

Entities
    .WithAll<Tag>()
    .WithNone<State>()
    .WithStructuralChanges()
    .ForEach((Entity entity) =>{
        // Spawn
}).Run();

Entities
    .WithAll<Tag>()
    .WithAll<State>()
    .ForEach((Entity entity) =>{
        // Update
}).Run();

Entities
    .WithNone<Tag>()
    .WithAll<State>()
    .ForEach((Entity entity) =>{
        // Destroy
}).Run();
message
2021-03-26 16:24:00

( EntityCommandBuffer 以下简称 ECB)

ECB 主要解决了两个问题

  • 第一个问题,在使用 Schedule 和 ScheduleParallel 操作使用 Job 时,是无法直接使用 EntityManager 的
  • 第二个问题,在进行结构化改变时,需要等待所有 Job 完成后在同步点进行操作

结构化改变包括

  • 创建实体
  • 删除实体
  • 向实体中添加组件
  • 从实体中删除组件
  • 修改共享组件的值

同步点

  • 在同步点进行的操作,会导致 Job 无法工作,所以应该尽量减少结构化改变的操作
  • 使用 ECB 可以将分散的结构化改变操作同步在同一个同步点内

当我们在使用 Job 时,为了防止多线程运行时对同一个实体进行了冲突的操作时,同步点的存在是必要的
例如:当线程 A 对实体 a1 的组件进行了删除操作,线程 B 又去获取实体 a1 被删除的组件时,就会发生错误
所以当我们使用了 Job 的多线程时,需要使用 ECB 来延迟结构化改变操作,统一到同步点内再进行操作

【Unity】如何实现 AI 的视觉检测
2021-03-22 |0 条评论
1.RayCast只使用射线检测的好处是简单易用,但仅适用于 2D 或者对高度没有要求的俯视角游戏,很多场景并不适用2.角度判断 + RayCast判断看向目标的向量与自身正前方向量的角度,若小...
message
2021-03-07 18:06:00

留言系统我们肯定都不陌生,不止是在游戏里,很多地方都有留言系统的存在
视频上的评论信息,弹幕这些都是留言系统的一种,而游戏中的留言系统可以做的更加复杂
例如魂系列游戏中的建言,《尼尔:机械纪元》结尾的玩家留言以及保护你的小飞机,这些创新让人眼前一亮

有一个更有趣的设计,来自《Moirai》这款免费的像素游戏
简略的讲一下它的设计,在游戏里你会在洞穴里遇到一个满身的血,拿着刀的NPC
你上前对话,会有四个选项

  • 你身上为什么有那么多血?
  • 你为什么拿着一把刀?
  • 你做了什么?
  • 杀了这个NPC

你得到的回答可能完全不合逻辑,NPC看起来像在胡言乱语
你会感到疑惑,但当你玩到游戏结尾,当你满身是血,手里拿着刀,又遇到了一个NPC时
系统让你回答刚才那几个问题的时候你才明白,这是一个轮回
你的回答会变成别人游玩时,他们游戏中NPC的回答
同样,如果你注意到了第四个选项,你就会明白别人可以决定在他们游戏中,“你”的生死

你的操作会影响别人的游戏体验,这很有趣

如果这一类似机制被放在 MMORPG 中,不知道会产生怎样的效果

message
2021-02-27 18:56:00
方法/模式优点缺点
Convert  And Destroy转换后 删除 原有 GameObject1.转化为 Entity 后在 Hierarchy 面板将
2.无法调试部分无法被转化的组件将会被删除
Convert And Inject GameObject转换后 保留 原有 GameObject1.由于原 GameObject 没有被删除,会出现两个物体的情况
2.无法对子层级同时进行转化
Destroy & Inject 混合使用包含 Destroy 与 Inject 的优点1.转化为 Entity 后在 Hierarchy 面板将无法调试
2.由于原 GameObject 没有被删除,会出现两个物体的情况
Companion Game Object伴随方法可以指定 GameObject 组件不被转化为 Entity 的组件,兼容 Prefab 1.转化为 Entity 后在 Hierarchy 面板将无法调试
SubScene可以将整个场景直接转化为 Entity,且可以在 Hierarchy 面板直接进行调试

方法一 — 通过给 GameObject 挂载 Convert To Entity 组件来进行转换

挂载后,运行时将会自动转化为 Entity ,但并非所有组件都能被转化为 Entity 的 Component
可以通过更改 Conversion Mode 来更改转化的模式
Convert And Destroy 模式会将该 GameObject 的子层级一并转化,且保持父子级关系,但如遇到无法转化的组件时会直接删除
Convert And Inject Game Object 模式在转化时会保留原有组件,但会导致 Mesh Renderer 与 Hybrid Renderer 同时渲染,出现两个相同物体的情况,同时该模式无法转化子层级对象

方法二 — Destroy & Inject 混合使用

父物体与子物体同时挂载 Convert To Entity 组件
父物体为 Destroy 模式,子物体为 Inject 模式 (经测试,父物体为 Inject,子物体为 Destroy 时,子物体将不会进行转化)
此时将会同时获得两种模式的好处,在保持父子级关系的同时,子物体的组件会被保留

方法三 — 继承 IConvertGameObjectToEntity 接口,实现 Convert 方法

该方法通常用于编写 Authoring ,在 Convert 可以加入我们想要在转化时同时加入的 Component 信息
这样我们可以还在 Inspector 窗口更改参数,方便调试
注意:GameObject 依然需要挂载 Convert To Entity 组件
示例:

public struct CameraAimInfo : IComponentData {
    public float distance;
    public float theta;
}

public class CameraAuthoring : MonoBehaviour, IConvertGameObjectToEntity {
    public float distance;
    public float theta;

public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) {
        dstManager.AddComponentData(entity, new CameraAimInfo() {
            distance = distance,
            theta = theta
        });
    }
}

方法四 — Companion Game Object 伴随方法

它会创建一个新的 GameObject 来"伴随"(companion)被转换的数据,并用它来选择你想保留的组件

当我们的 GameObject 中有几个不想被转化或无法转化的组件时,可以使用 AddHybridComponent 这个方法

示例:

public class Test : MonoBehaviour, IConvertGameObjectToEntity {
    public Button button;
    public Image image;
    public Text text;
    public ParticleSystem particleCompanion;
    public ParticleSystemRenderer rendererCompanion;

public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) {
    conversionSystem.AddHybridComponent(button);
    conversionSystem.AddHybridComponent(text);
    conversionSystem.AddHybridComponent(image);
    conversionSystem.AddHybridComponent(particleCompanion);
    conversionSystem.AddHybridComponent(rendererCompanion);
    }
}

方法五 — [GenerateAuthoringComponent]

这个并不算转化方法,只是能够在转化的时候更方便的加上 Component
可以通过添加  [GenerateAuthoringComponent] 属性标签让 ComponentData 可以被直接挂载

注意:字段的访问类型必须为 public,且依然需要挂载 Convert To Entity

示例:

[GenerateAuthoringComponent]
public struct SpeedComponent : IComponentData {
    public float speed;
}

[GenerateAuthoringComponent]
public struct TagPlayer : IComponentData {}

GenerateAuthoringComponent测试.png

方法六 — 使用 SubScene 组件可以实现整个场景的 Entity 转化

通过 SubScene 转化的物体可以实现一边在 Hierarchy 中修改 GameObject,一边实时的同步到 LocalToWorld / Translation 中,并且不会出现两个物体的情况,仅由 Hybrid Renderer 负责渲染,尽管物体已经被转化为 Entity 并且 Destroy,但在 Hierarchy 中仍然可以选中物体并同步移动。

注意:在 Scene 窗口想要调试 Entity 场景需要勾选 SubScene 右侧的 Toggle

参考文章:Game Object Conversion and SubScene

加载中... 世界之底
加载更多