社区问答 | 本周问答汇总 0831-0906

文摘   科技   2024-09-06 19:01   上海  

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

本期问题目录:

新手答疑:
1. Game 视图一片黑
2. 大地图的拖动与缩放
3. BuildCompression 爆红

4. 如何实现自定义类

技术支持:
5. 关于 dll 在编辑器正常使用,但是打包 PC 版后,运行报错,找不到对应 dll
6. 加入 aar 包,构建报错
7. 如何获取 UI 组件的 World 坐标?
新手答疑
  Q1.Game 视图一片黑

通过 vive utility 使用 steamVR 串流到 HTC vive pro 进行开发,编辑器内点击运行前,Game 视图正常显示。编辑器内运行时 game 视图一片漆黑,HTC 里却能看到正常的画面(十分的正常的画面,并未有任何异常) 

详细: 

1,不会是简单的新手会犯的问题。摄像机的 tag 为正常的 MainCamera,cullingMask 为 everything,clearFlag 为正常的 SkyBox。视锥体内也有物体,Scene 视图里 camera 小窗预览正常,开启关闭后处理啥的都正常,移除所有 commandBuffer 等,这些参数都调整过,无效。 

2,Game 视图头顶的 UI 能点的全部点了一遍,只有 Display 1 有摄像机输出一片黑,其他都无摄像机输出,左眼右眼都试过,都是一片黑。 

3,场景里只有一个激活的摄像机。删掉该相机的所有组件,以及删掉并新建空相机,以及创建新场景和新摄像机,都是一样的症状。 

4,使用 FrameDebugger 查看渲染最后一步,是有正常的 VR 画面的。 

5,重启 Unity 无效,控制台运行时并未报任何 Error 和 Warning。Unity 版本是2022.1.9f1c1。

6,我只能怀疑是 project setting 有问题,但是到处修改设置,并未测试出来。网上冲浪结果也是一堆新手才会犯的问题。

自答

已解决。Project Setting 的最下面 VR 相关设置,有一个选项会控制 VR 和 PC 的显示。分别有:(在 PC 上)不显示,这也是我黑屏的原因,以及左眼/右眼/双眼。更改为任意一只眼睛即可。

  Q2.大地图的拖动与缩放

请问怎么在 Unity 里用鼠标右键按住拖动图片和鼠标位置定点用滚轮缩放(用 World Map Camera 摄像机来进行缩放) 且怎么将图片限制在一定范围内不拖出边界?之前有用 Scroll View 来进行拖动,但是缩放就没反应。请问 Scroll View 里能进行定点缩放吗,怎么做?

Unity 版本:2022.3.41f1c1

答主 溜肉段:

可以有两个思路: 

1.可以控制图片的缩放及移动,控制图片的 scale 及 position,限制 position 的值;

2.可以控制相机的缩放及移动,控制相机的 field of view 及 position(UI 需要是 world space) 看哪个适合你的需求,或者直接用插件。

  Q3.BuildCompression 爆红

使用 Scriptable Build Pipeline,通过编程打包的方式,代码中  BuildCompression 方法报错。
团结 MuseChat 已解决
本回答由团结 MuseChat(Beta) 生成,请酌情参考。
你好!关于你在使用 Scriptable Build Pipeline 时遇到的 BuildCompression 报错问题,以下是一个完整的代码示例,展示了如何正确使用 BuildCompression:
using System.IO;using UnityEditor;using UnityEditor.Build.Content;using UnityEditor.Build.Pipeline;using UnityEditor.Build.Pipeline.Interfaces;
public static class BuildAssetBundlesExample{ public static bool BuildAssetBundles(string outputPath, bool useChunkBasedCompression, BuildTarget buildTarget, BuildTargetGroup buildGroup) { var buildContent = new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds()); var buildParams = new BundleBuildParameters(buildTarget, buildGroup, outputPath);
// 设置压缩方式 if (useChunkBasedCompression) { buildParams.BundleCompression = BuildCompression.DefaultLZ4; } else { buildParams.BundleCompression = BuildCompression.DefaultLZMA; }
IBundleBuildResults results; ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParams, buildContent, out results); return exitCode == ReturnCode.Success; }}
在这个示例中,我们使用了 BuildCompression.DefaultLZ4 和 BuildCompression.DefaultLZMA 来设置压缩方式。确保你已经导入了必要的命名空间,并且正确配置了 BuildParameters。
如果你仍然遇到问题,请检查以下几点:
确保你使用的是兼容的 Unity 版本和 Scriptable Build Pipeline 包版本。
确保所有必要的命名空间已经导入。
检查是否有拼写错误或其他语法错误。

  Q4.如何实现自定义类

答主 年少有你

是这样要自己定义类型吗?

using UnityEngine;
// 定义一个名为"MyCustomClass"的自定义类public class MyCustomClass{ // 定义私有变量 private int myInt; private string myString;}
技术支持
  Q5.关于 dll 在编辑器正常使用,但是打包 PC 版后,运行报错,找不到对应 dll

编辑器调用Asrsdk.dll (64位) 功能正常,但是打包 PC 版后 (打包的是 64 位的),报错 Fallback handler could not load library C:/Users/Admin/Desktop/Demo/Demo_ASR2019_Data/Mono/AsrSDK.dll,但是打包的文件没有 Mono 这个文件夹,64 位的 dll 都在 Plugins\x86_64\ 这个目录下,是哪里的设置问题吗?

追加:勾选调试模式打包发布,运行没有问题;编辑器运行没问题,但是发布正式版运行报错。
Unity 版本:Unity2019.4.28;平台:Windows
相关代码:
Fallback handler could not load library C:/Users/Admin/Desktop/Demo/Demo_ASR2019_Data/Mono/AsrSDK.dll
答主 溜肉段:

可以先检查一下路径、打包配置等都正确的话,可以看一下加载顺序,dll 是不是有依赖,依赖的 dll 是否先加载了。可以看下文档,一般适用于开发测试阶段:

https://docs.unity.cn/cn/current/Manual/WindowsStandaloneBinaries.html 

  Q6.加入 aar 包,构建报错

Unity 版本 2022.3.41;平台 android
androidlib1-debug-.aar 是放在 Plugins/Android 的 aar 包

错误日志:

官方回答:

看起来是 aar 转换错误,可以尝试以下方法: 

1.确认 .aar 文件是否损坏或者不完整,可以尝试重新下载或生成该文件。 

2.检查 Gradle 中的相关配置是否正确,包括依赖项的配置等。 

3.尝试清理 Gradle 的缓存并重新构建项目。 你可以查看 Gradle 构建日志,以获取更详细的错误信息。如果错误信息中提到了特定的转换错误或者缺少文件的提示,根据这些信息进行相应的修复。

  Q7.如何获取 UI 组件的 World 坐标?

我创建了一个 RenderMode 为 world space 的 Canvas,并在其中添加了一些 UI 元素,这些组件使用了 Layout Group 自动排列。我尝试从 RectTransfrom 中获取这些 UI 组件的 position,结果发现所有的 UI 元素的 position 都是同一个值。 如何正确获取对应 UI 组件的 World 坐标?

答主 松鼠鱼:

坐标是同一值,大概是刚创建 GameObject 后,立即去获取坐标了。这时 LayoutGroup 还没有去排列。可以延迟一帧获取,或调用  LayoutRebuilder.ForceRebuildLayoutImmediate(RectTransform layoutRoot) 立即布局,然后再获取坐标。


本系列问题汇总将每周更新,欢迎点击阅读原文,与 Unity 中文社区成员一起答疑互助,共同进步。
长按关注
Unity 官方开发者服务平台
第一时间了解 Unity 社区动向,学习开发技巧

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



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