乐趣区

关于ai开发:AI插件推荐

1)AI 插件举荐
​2)VideoPlayer 在 Android 上播放视频黑屏
3)Renderer.GetPropertyBlock 问题
4)RectMask2D 问题


这是第 257 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。

UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)

AI

Q:咱们新我的项目有些 AI,想用一些插件来实现,不知大佬们有没有什么 AI 插件举荐?据我所知有 Behavior Designer,Playmaker,Bolt 这些,求科普几款性能和性能都不错的,谢谢。

A1:举荐 NodeCanvas。
性能亮点:
● 三个可齐全切换的图形模块供你抉择。
● 具备所有预期业余性能的时尚且直观的可视化节点编辑器。
(全副撤销 / 重做、放大 / 放大、迷你地图、多选、复制、复制 / 粘贴、JSON 导入 / 导出、群组和正文等)
● 图形、GameObject 和全局黑板变量,以创立可重复使用和以智能体为核心的参数行为。
● 具备实例或动态属性和字段的数据绑定变量。
● 应用 UNET 的网络同步变量(Network Sync Variable)。
(因为现已弃用 UNET,所以会将其替换为新的网络解决方案)
● 预制件可笼罩的变量。
● 主动转换不同的变量数据类型。
● 反对所有变量类型开箱即用。
● 跨所有数量的智能体的可重复使用行为图。
● 所有三种图形模块之间的无缝子图形嵌套。
(行为子树、子状态机、子对话树)
● 残缺的子图变量参数化和贴图。
● 模块化动作和条件工作设计。
● 条件反馈行为树评估。
● 有条件和基于栈的 FSM 过渡。
● 丰富多彩和内容翔实的运行时可视化调试。
● 节点 / 工作浏览器,用以搜寻、珍藏和浏览内置文档。
● 首选类型配置器,以依据我的项目需要定制与类型相干的菜单。
● 图形迷你地图,以轻松浏览图形。
● 图形控制台,单击鼠标即可主动定位故障节点。
● 图形浏览器,用以搜寻和查找图中的节点、工作和参数。
● 图形重构器,以批量重构缺失的节点、工作和反射援用。
● 实时运行时编辑,以更疾速地实现设计指标。
● 通过优化的反射工作,以主动集成现有的代码 API。
● 内置事件零碎,以在图形中沟通和传输数据。
● 清晰且记录欠缺的 API,以扩大 NodeCanvas 框架并创立本人的动作、条件、节点,甚至全新的图形模块。
● 对象和属性绘制器,以所有可能的形式自定义查看器。
● 与大量第三方资源集成。
● 与 FlowCanvas flowScripts 无缝集成。
● 用户敌对,轻量级,无需设置。
● 性能稳固,初始化后零调配,异步图加载。
● 反对所有平台开箱即用。
● 蕴含全副 C# 源代码。

具体链接如下:
https://assetstore.unity.com/…

Behaviac 也不错,惋惜 TX 不怎么保护了:
https://github.com/Tencent/be…

感激郑骁 @UWA 问答社区提供了答复

A2:搬运一位大佬的举荐:Baracuda。
https://github.com/Unity-Tech…

感激芭妮妮 @UWA 问答社区提供了答复

A3:搬运一个对于游戏 AI 框架抉择的帖子:《What A.I technique is most suited to my game, FSM, BT, GOAP》

附一个 AI 相干 Blog:AI 分享站
http://www.aisharing.com/sitemap

感激羽飞 @UWA 问答社区提供了答复

A4:腾讯开源的我的项目:behaviac
https://www.behaviac.com/lang…

behaviac 是游戏 AI 的开发框架组件,也是游戏原型的疾速设计工具。反对全平台,实用于客户端和服务器,助力游戏疾速迭代开发。

编辑器能够在 PC 上运行,操作不便直观牢靠,反对实时和离线调试;编辑器能够导出 xml,bson 等多种格局,更能够导出 C ++、C# 源码,提供最高效率。

运行时反对全平台,有 C ++ 和 C# 两个版本,原生反对 Unity。

感激萧小俊 @UWA 问答社区提供了答复

Video

Q:这个问题只在 A 工程里呈现,把同样的视频、代码拷贝到一个新工程里,而后把视频文件放到 Addressables Group 并设置不压缩,构建到手机上是能够失常播放的。然而在 A 工程里,把视频放到 Addressables Group 里设置不压缩,还是无奈播放,并报错:

AndroidVideoMedia::OpenExtractor could not translate archive:/CAB-abafc77eff58910e7bc5f69ce62a4ed7/CAB-abafc77eff58910e7bc5f69ce62a4ed7.resource to local file. Make sure file exists, is on disk (not in memory) and not compressed.

请问大家有没有遇到相似问题?

A:尽管在 Addressables Group 里设置了不压缩,但在手机上还是播不了视频。所以想到是不是有什么中央压缩了 Bundle,最初在 build.gradle 里找到,须要把‘.bundle’增加到 gradle 的 noCompress 里,如下:

aaptOptions {noCompress‘.unity3d’,‘.ress’,‘.resource’,‘.obb’,‘.meta’,‘.wem’,‘.bnk’,‘.txt’,‘.xml’,’.bundle’//ADD_NoCompress_TAG}

感激题主 wenzhao@UWA 问答社区提供了答复

Rendering

Q:从代码打印日志来看,GetPropertyBlock 一开始获取的是什么?仿佛没什么用:

public MeshRenderer mr;
    [Button]
    void DOTest()
    {MaterialPropertyBlock block = new MaterialPropertyBlock();
        mr.GetPropertyBlock(block);
        Debug.Log(block.isEmpty);      // 打印 true
        Color baseColor = block.GetColor("_Color");
        Debug.Log(baseColor.ToString());      // 原始是红色 打印 (0,0,0,0) 也就是没有获取到

        block.SetColor("_Color", Color.red);    // 设置色彩
        mr.SetPropertyBlock(block);

        mr.GetPropertyBlock(block);        // 再次获取
        Debug.Log(block.isEmpty);  // 打印 false
        baseColor = block.GetColor("_Color");
        Debug.Log(baseColor.ToString());    // 打印 (1,0,0,1)

    }

原先我认为通过 Renderer.GetPropertyBlock(block);会把这个 Renderer 的材质属性都存到这个 Block 外面,而后我再批改外面的值,可是事实并不是这样,例如我只想批改 Alpha,然而无奈获取原始色彩:

MaterialPropertyBlock block = new MaterialPropertyBlock(); 
meshRenderer.GetPropertyBlock(block); 
Color baseColor = block.GetColor("_Color"); 
block.SetColor("_Color", new Color(baseColor.r, baseColor.g, baseColor.b, alpha)); 
meshRenderer.SetPropertyBlock(block);

A1:首先你没有往 Property 外面增加属性,所以它必定是 Empty,也就是你的属性表单外面是个空列表;而后通过 Setcolor,这样其实应该是往属性表单外面增加了一个属性字段,这样列表就不为空了。至于为何打印出红色,应该是默认值吧,即你拜访一个不存在的属性时为了防止返回 null,所以给了你一个默认值(这里猜测的)。

想获取原始色彩,间接从材质上拿:

var mat = renderer.material;//renderer.sharedMaterial; Color c = mat.GetColor("_Color"); Debug.Log(c.ToString());

感激李星 @UWA 问答社区提供了答复

A2:Renderer.HasPropertyBlock() 能够用来判断一个 Renderer 是否曾经有 PropertyBlock 了,通常没有调用 SetPropertyBlock 之前,GetPropertyBlock 失去的都是“空”的后果。有一个状况比拟非凡,在动画外面用来管制材质球后(比方管制材质球的色彩),应用 GetPropertyBlock 去获取 MaterialPropertyBlock,这样失去的后果是非“空”的,实践上应该是动画管制材质球应用的就是 SetPropertyBlock 来实现色彩变动的。

感激 Xuan@UWA 问答社区提供了答复

UGUI

Q:我在带有 RectMask2d 的 Scrollview 节点下动态创建一些图标,发现关上页面时图标无奈失常显示,滑动一下才显示进去,查看图标对象不可见时曾经创立进去,同时对应的 Inspector 窗口短少了 Default UI Shader 组件,请问有大佬晓得是什么起因吗?

Debug 发现图标对象能失常退出到 RectMask2d 的裁剪 Hashset 中,查看 Frame Debug 中图标不显示时与显示时少了一个 Batch。

A:能够试试动态创建实现后调用 Canvas.ForceUpdateCanvases,这个接口是让所有的 UI 元素及时刷新。
https://docs.unity3d.com/Scri…

感激 Xuan@UWA 问答社区提供了答复

封面图来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)

退出移动版