社区问答 | 本周问答汇总 0518-0524

文摘   科技   2024-05-24 19:17   上海  

本文汇总了 2024 年 5 月 18 日 - 2024 年 5 月 24 日 Unity 中文社区精选问答。如果在使用 Unity 过程中遇到任何问题,欢迎点击阅读原文前往 Unity 中文社区提问,将有官方技术支持及社区贡献者当日解答此外,本周还有少量待解决问题,欢迎小伙伴们到社区分享经验,为他人答疑解惑。

本期问题目录:

新手答疑:
1. Unity 制作第一人称游览,摄像机穿模要怎么解决?
2. 能否在 C# 中修改 SpriteSkin 的 rootbone 参数呢?
3. Unity 粒子系统中如何实现数据驱动发射粒子范围?
4. 在包管理器中找不到 URP,但是要用怎么办?

5. cocoapods 报错

技术支持(异常报错):

6. Package manager invalid 错误

技术交流:

7. 自定义 URP shader 物体不显示

新手答疑
  Q1.Unity 制作第一人称游览,摄像机穿模要怎么解决?

答主 Penny Lu

除了修改 Clipping Planes Near 以外,你也可以检查一下摄像机是否为正交模式。正交模式下,较容易出现穿模情况,需要改为透视模式。
  Q2.能否在 C# 中修改 SpriteSkin 的 rootbone 参数呢?

我希望在我的 C# 脚本中为我新建的 SpriteSkin 组件的 RootBone 和 Bones 赋值,但是这两个值似乎是只读的,请问是否有办法为它们赋值呢?只能通过预制件的方式处理吗?

Unity 版本: 2022.3.23f1;平台: U2D

相关代码:

public Transform rootBone {     get => m_RootBone;     internal set     {     m_RootBone = value;     CacheValidFlag();     CacheHierarchy();     OnRootBoneTransformChanged();     } }

自答:

我现在是用反射解决了。

  Q3.Unity 粒子系统中如何实现数据驱动发射粒子范围?

粒子系统中可以实现数据驱动发射粒子范围吗?比如后端给 Unity 传输了个范围,Unity 接受后使用 linerender 画了一个范围,这个范围传输到 mesh 中,这种可以在这个范围内发送粒子,但是效果不理想,求大佬介绍有没有啥方法?
Unity 版本 2021.3.19;平台 Windows
答主 谢继军:

linerender 的效果是沿着线一圈的。你可以把从后端接收到的范围生成一个 mesh,particle system 的 Shape 是支持 Mesh 类型的,把生成的 mesh 指定过去就行了。

  Q4.在包管理器中找不到 URP,但是要用怎么办?

Unity 版本 2022.3.17f1c1

官方回答

您现在选择的是在项目中的 package,需要选择 Unity registry 就可以看见自带 package 了。

  Q5. cocoapods 报错

使用 Unity 导出 iOS 项目,cocoapods 下载三方框架,'YYKit/YYKit.h' file not found
Unity 版本 2021;平台 iOS

团结 Muse 已解决

当在 Unity 中导出 iOS 项目并使用 CocoaPods 下载第三方框架时,出现了 'YYKit/YYKit.h' 文件未找到的报错。这种情况通常是由于 Unity 导出的 Xcode 项目无法正确找到所需的第三方框架路径所致。
为了解决这个问题,您可以按照以下步骤操作:
检查 CocoaPods 集成:确保您已经正确配置了 CocoaPods,并且 Podfile 中包含了 YYKit 的引用。运行 pod install 命令来安装依赖。
检查 Unity 导出的 Xcode 项目:确保 Unity 导出的 Xcode 项目中正确配置了 CocoaPods。在 Xcode 中打开项目,查看是否在 Build Phases 中的 Link Binary With Libraries中添加了 YYKit.framework。
检查 Header Search Paths:在 Xcode 项目中,确保在 Build Settings 中的 Header Search Paths 中包含了 YYKit 的路径。添加 $(SRCROOT)/Pods 到 Header Search Paths 中,这样 Xcode 就能正确找到 YYKit 的头文件。
清理项目并重新构建:在 Xcode 中选择 Product -> Clean 来清理项目。重新编译项目,查看是否报错消失。

通过以上步骤,您应该能够解决 'YYKit/YYKit.h' file not found 的问题。如果问题仍然存在,您可能需要进一步检查 CocoaPods 的集成和 Xcode 项目的配置,确保所有路径和依赖项都正确设置。祝您顺利解决问题!

技术支持(异常报错)

  Q6.Package manager invalid 错误

求助各位大佬,在打开 Unity 时出现解包错误,小白不知道这个问题怎么解决
Unity 版本 2022.3.17f1c1;平台 windows

答主 Peng Fan:

你的 Unity 版本 2022.3.17f1c1 似乎没有这个 package,在 2023.2 的文档里才有这个 package 的描述:

https://docs.unity3d.com/2023.2/Documentation/Manual/com.unity.modules.accessibility.html

技术交流

  Q7.自定义 URP shader 物体不显示

使用 Unity 2021.3.29 版本,自定义一个简单的 URP shader,创建材质球,给到场景的一个立方体,立方体消失了?!! 然后使用 2023.1.11 版本测试,同样的 shader 正常显示,有碰到类似问题的朋友吗,烦请解答,不胜感激!

详细代码:

Shader "CustomURP/Unlit"     {     Properties         {         _BaseMap("Base Map",2D) = "white"            {}         _BaseColor("Base Color",Color) = (1,1,1,1)         }         SubShader         {         tags            {            "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline"            }            Pass            {                HLSLPROGRAM                #pragma vertex vert                #pragma fragment frag                #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes { float3 positionOS:POSITION; half2 uv:TEXCOORD0; };
struct Varyings { float4 positionHCS:SV_POSITION; half2 uv:TEXCOORD0; };
CBUFFER_START(UnityPerMaterial) half4 _BaseColor; float4 _BaseMap_ST; CBUFFER_END
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
Varyings vert(Attributes IN) { Varyings o; o.positionHCS = TransformObjectToHClip(IN.positionOS.xyz); o.uv = TRANSFORM_TEX(IN.uv,_BaseMap); return o; }
half4 frag(Varyings IN):SV_Target { half4 color = SAMPLE_TEXTURE2D(_BaseMap,sampler_BaseMap,IN.uv); return color ; } ENDHLSL } }    }

答主 UUU666:

我用 2021.3.29 是能正常显示的,是不是你的 Graphics Setting 里 render pipeline 没有设置正确?你可以瞧瞧 FrameDebugger 有没有 cube 对应的 draw 命令,如果没有的话,可能就是 RP 的设置,shader 的写法问题。如果有的话,那说明渲染是执行了,但是由于某些原因效果不对。
追问:
我又对比了不同项目,是由于一个设置:DepthPrimingMode 没有禁用导致的,这个设置我查了下是深度预处理相关的,优化片元 shader 计算,对比默认渲染管线或者 URP 项目没有开启这个选项的话,不是也有相关的深度预处理吗?这个 DepthPrimingMode 又有什么用?具体区别在哪?如果开启了是不是需要在 Shader 里再加一个预处理 Pass 才能正常显示?
后续解答:
这个 shader 需要加一个 depth only pass,depth priming 渲染的时候,ztest 设置的是 equal,所以如果你这个物体没有 depth only pass 写入深度,它的 ztest 是无法通过的。这个模式就是为了优化 fragment shader 的计算量,只渲染 depth prepass 里有的那些 fragment,具体效果要实测对比了,移动 GPU 在这块自己都有优化的。
本系列问题汇总将每周更新,欢迎点击阅读原文,与 Unity 中文社区成员一起答疑互助,共同进步。
长按关注
Unity 官方开发者服务平台
第一时间了解 Unity 社区动向,学习开发技巧

 点击“阅读原文”,访问 Unity 社区问答



Unity官方开发者服务平台
Unity引擎官方开发者服务平台,分享技术干货、学习课程、产品信息、前沿案例、活动资讯、直播信息等内容。
 最新文章