关于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(原群已满员)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理