0x00 前言

在这篇文章中,我们选择了过去几周Unity官方社区交流群以及UUG社区群中比较有代表性的几个问题,总结在这里和大家进行分享。主要涵盖了** StreamingAssets、Profiler、Playable、Particle、Spine、Launcher、Scripting 、Shader、 Shader Graph**等领域,其中会着重介绍一下是用一个workaround的方式在ShaderGraph中获取_CameraDepthTexture。

同时,也欢迎大家加入我们这个讨论干货的官方技术群,交流看法分享经验。

Unity官方社区交流群:629212643

0x01 StreamingAssets

Q:请问一下,在Unity2018.2版本里,Unity会将放在StreamingAssets文件夹下的js文件当作Unity的UnityScript进行编译,但是我的资源里面有html页面,需要用到这个js文件。

A:我们分别在2018.2和2018.1上进行了测试。在Unity2018.2中,的确会将StreamingAssets文件夹下的js文件当作UnityScript进行编译,这应该是2018.2之后出现的一个Bug。



这个Bug已经提交,相关链接可以查看这里:

https://issuetracker.unity3d.com/issues/non-unity-javascript-files-inside-the-streamingassets-folder-are-being-compiled-as-unityscript-files。

0x02 Profiler

Q:请问使用Profiler.BeginSample去标识代码块或者方法以便在Profiler性能分析工具中查看对应代码块的资源消耗,在unity2017.4.5版本将标识写在脚本的start无法成功标识,然而一样的代码在unity5.4版本却可以标识出来,但在标识写在unity2017.4.5的Update方法貌似也可以标识代码块。这个问题是版本问题吗?在2017.4.5的版本在某些初始化时应该怎样成功呢?

A:嗯。查了一下2017.3之后的版本修改了profiler数据的发送方式,从以前的frame base变成了stream base,在第一帧engine向editor发送的profiler数据丢掉了很多sampler,所以导致没有显示出来。

但是beginsample并不是不会在start方法中生效,游戏启动之后开启脚本的话还是可以看到的。启动时sampler不全的问题应该在2018上进行了修改。



所以,简单的说,没有显示BeginSample去标识代码块的原因是在2017.3-2017.4时有的sampler被丢弃了。并不是针对某个特定的方法。

0x03 Playable

Q:在使用Playable的api时遇到了一些问题,下面第一张图是正常的情况。第二张图是调用:

	mixerPlayable.SetInputWeight(0, 1.5f);

将input0的权重设置为1.5之后的情况。整个模型被不正确的拉伸,并且动作表现错误。

A: playerable mixer的混合是这样的机制:Weight1 * animation1 + Weight2 * animation2+Weight3 * animation3。因此在权重总和大于1的时候会出现问题。建议对传入的权重进行归一化。

0x04 Particle

Q: 我有这样一个结构,刚刚创建是正常的。



现在把它Disable掉后调转180度。



再激活,黄色部分的发射器是正常的,红色是子粒子,发射错误。

A: 经过测试,这是一个Bug,即在play mode的情况下,disable掉parent对象并修改其transform数据后,subemitter并没有正确继承其parent的transform数据。

该问题已经向开发人员提交了Bug,可以在此查看:

https://issuetracker.unity3d.com/issues/particle-subemitters-dont-inherit-parents-rotation-correctly-while-the-parent-object-is-disabled-in-play-mode

0x05 Spine

Q:请问大家,当spine导出图片是两张时,unity编辑器里播放的动画就是乱的。有什么解决办法吗?

A: 导出设置里的“缩放”选项的scale缩小一下,比如改成0.8,导成一张。(成都-树林)

Q:还是不够放到一张,可以再缩小吗?

A:去掉空白处,图集小很多。(成都-树林)

0x06 Launcher

Q:我遇到了启动界面白屏的问题,5.6.0和2018最新版本都有,而且网上讲的办法都试过了,都不行,试了一整天了。

A:白屏的问题解决了,怀疑是双显卡导致的,Unity的快捷方式右键可以选择运行的显卡,我来回切了两次就可以了。(深圳~刘彦)

A:这种并非卡在loading页面的白屏,很多时候是DX的驱动不兼容造成的,可以尝试切换运行的显卡,也可以尝试一下在命令行强制使用GL启动。相关命令行参数可以参考这个文档:https://docs.unity3d.com/Manual/CommandLineArguments.html

Q:无限卡Loading…有人遇到过么?

A:卡Loading的问题,很多时候可以看看editor.log里面的相关输出。

例如下面这样的log:

No sufficient permissions while processing request "https://core.cloud.unity3d.com/api/login", HTTP error code 401

一般卡loading基本都是网络原因的多。可以试试断网,进入离线模式。有vpn的话也可以先去掉vpn这些,有的时候是因为vpn的各种奇葩的配置导致的,当然还可以查看一下防火墙的设置。

还有另外一种情况,例如下面这样的Log:

COMMAND LINE ARGUMENTS:

D:\u2017.1\Editor\Unity.exe [CEF] undefined in file:///C%3A%2FUsers%2Falex%2FAppData%2FRoaming%2FUnity%2FPackages%2Fnode_modules%2Funity-editor-home%2Fdist/assets/unity-editor-home.js at line 39 Error loading https://api.unity.com/v1/oauth2/authorize?client_id=launcher&display=launcher&locale=en_US&response_type=code&redirect_uri=launcher://unity/C%3A%2FUsers%2Falex%2FAppData%2FRoaming%2FUnity%2FPackages%2Fnode_modules%2Funity-editor-home%2Fdist/index.html#/login

此时可以考虑移除"C:\Users\XXXXXX\AppData\LocalLow\Unity"文件夹,因为该文件夹会缓存一些登陆信息,移除之后再尝试启动Editor。

0x07 Scripting

Q:刚学u3d不久,想问几个问题:

1.公司里是怎么生成json文件的

2.数据库的增删改,是直接在数据库文件里修改,还是写代码修改,如果公司有自己的服务器,

怎么拿到服务器里的数据.

求经验大佬来指教.

A:绝大多数编程语言都有生成json的方法,直接调用即可,比如java可以使用gson包。

数据库操作可以使用第三方框架,java的后台可以考虑hibernate或者mybatis。安卓端本地的sqlite可以使用content provider来调用数据库。Unity也有自己的使用sqlite的方法,不过我没用过。(南京-科穆宁)

Q:话说开发手机ARCore要测试好不方便,每次都要打包出来.....请问大家有碰到过这个问题吗?有好的测试方法吗?谢谢~

A:Unity有提供一个叫做EditorConnection的类,可以用来满足类似的需求。相关文档可以查阅:

https://docs.unity3d.com/ScriptReference/Networking.PlayerConnection.EditorConnection.html

0x08 Shader Shader Graph

Q:怎样让着色器弄成这样,我翻了文档,没查到。。。

A:这个是因为Shader文件中没有标示出ShaderSnippets,比如你创建一个surface shader,然后把CGPROGRAM去掉,也会是这个效果。

Q:请问如何在ShaderGraph中获取深度图,例如_CameraDepthTexture?Unity版本2018.2。

A: 默认情况下,ShaderGraph没有提供接口直接获取_CameraDepthTexture的。

但是有一个workaround的方式可以来获取_CameraDepthTexture。即创建一个新的property,该property的name和reference都叫_CameraDepthTexture,与此同时不勾选exposed。

同时,打开LightWeightRenderPipeline Asset中的深度图选项。

场景中的Camera要添加一个LightweightAdditionalCameraData组建,并且也打开深度图的选项。



之后,我们就可以正常的获取深度图_CameraDepthTexture了。

0x09 后记

好了,以上就是想和大家分享的几个在群里讨论的小问题。

再次,欢迎大家加入我们这个讨论干货的官方技术群,交流分享呀。

Unity官方社区交流群:629212643

不能直接获取?聊聊如何在Shader Graph中获取深度图的更多相关文章

  1. nginx的rewrite ,如何在flask项目中获取重写前的url

    1. 在flask配一个重写到哪的路由,假设是/rewite/,然后到nginx的配置文件写重写规则,我这里重写全部的请求,接着测试能否重写成功 1. 添加一个路由 配置重写规则 测试成功 2.接下来 ...

  2. 如何在onCreate方法中获取视图的宽度和高度

    你可以通过视图的getWidth()和getHeight()来获取视图的宽度和高度. 但是,可能会让你失望的是,如果你直接在onCreate方法内调用这两个函数,你会的到0. 为什么呢? 这是因为,当 ...

  3. AM使用指南:如何在Managed Bean中获取AM实例?

    AM是放置服务方法的地方,有时我们需要在Managed Bean中调用这些方法.要调用这些方法,首先要在Managed Bean中获取AM实例.这里要用到<ADF工具类:ADFUtil.java ...

  4. 如何在 vuex action 中获取到 vue 实例

    问题:在做运营开发工具的时候 我想要请求后台服务器保存成功后 弹出一个弹框(饿了吗 的 message 弹框), 由于$message 是挂在 Vue原型链上的方法 (Vue.prototype.$m ...

  5. PHP获取http头信息和CI中获取HTTP头信息的方法

    CI中获取HTTP头信息的方法: $this->input->request_headers() 在不支持apache_request_headers()的非Apache环境非常有用.返回 ...

  6. 如何在asp.net中获取GridView隐藏列的值?

    在阅读本文之前,我获取gridview某行某列的值一般做法是这样的:row.Cells[3].Text.ToString().有点傻瓜呵呵 在Asp.net 2.0中增加了一个新的数据绑定控件:Gri ...

  7. Nginx 反向代理 如何在web应用中获取用户ip

    转载:http://blog.csdn.net/bao19901210/article/details/52537279 问题背景: 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断 ...

  8. 使用Nginx后如何在web应用中获取用户ip及原理解释

    当nginx作为反向代理功能时,转发请求到后端服务器 通常需要使用如下命令为转发的请求增加请求头 X-Forwarded-For proxy_set_header X-Forwarded-For &q ...

  9. 微软BI 之SSRS 系列 - 如何在 MDX 查询中获取有效的 MEMBER 成员属性作为参数传递

    这篇小文章的来源是 天善问答,比如在报表中要根据点击某一个成员名称然后作为参数传递给自身报表或者下一张报表,这个在普通的 SQL 查询中没有任何问题.但是在 MDX 中查询是有区别的,比如在 MDX ...

随机推荐

  1. maven入门 (二)_私服安装与上传下载

    本篇文章主要介绍maven的私服安装和 jar包的上传与下载.毕竟大家还是在公司需要上传jar包到自己公司私服的. 1.安装私服 下载链接: https://pan.baidu.com/s/17dbQ ...

  2. 基于Jmeter+maven+Jenkins构建性能自动化测试平台

      一.目的: 为能够将相关系统性能测试做为常规化测试任务执行,且可自动无人值守定时执行并输出性能测试结果报告及统计数据,因此基于Jmeter+maven+Jenkins构建了一套性能自动化测试平台 ...

  3. 「JavaScript」JS四种跨域方式详解

    原文地址https://segmentfault.com/a/1190000003642057 超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript ...

  4. 纯CSS小三角制作

    无关的知识点 ① background-clip 属性规定背景的绘制区域. 1.padding-box:从padding区域(不含padding)开始向外裁剪背景. 2.border-box:从bor ...

  5. Javaweb之 servlet 开发详解1

    1.1  Tip:Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个 ...

  6. ASP.NET Core 2 学习笔记(一)

    来势汹汹的.NET Core似乎要取代.NET Framework,ASP.NET也随之发布.NET Core版本.虽然名称沿用ASP.NET,但相对于ASP.NET确实有许多架构上的差异,可以说除了 ...

  7. Python数据库连接池DBUtils.PooledDB

    DBUtils 是一套用于管理数据库连接池的包,为高频度高并发的数据库访问提供更好的性能,可以自动管理连接对象的创建和释放.最常用的两个外部接口是 PersistentDB 和 PooledDB,前者 ...

  8. GitHub 系列之「Git 进阶」

    1.用户名和邮箱 我们知道我们进行的每一次 commit 都会产生一条 log,这条 log 标记了提交人的姓名与邮箱,以便其他人方便的查看与联系提交人,所以我们在进行提交代码的第一步就是要设置自己的 ...

  9. ubuntu 16.04启用root用户方法

    1.使用:sudo passwd root设置root的密码,如下图所示: 2.使用su root来测试是否可以进入root用户,如果出现#说明已经设置root用户的密码成功,如下图所示:

  10. balance.go 源码阅读

    ) //10s +随机毫秒数 后 执行下面代码     for _ = range t {         for _, v := range pBackendSvrs {             i ...