本文汇总了 2024 年 8 月 31 日 - 2024 年 9 月 6 日 Unity 中文社区精选问答。如果在使用 Unity 过程中遇到任何问题,欢迎点击阅读原文前往 Unity 中文社区提问,将有官方技术支持及社区贡献者当日解答。此外,本周还有少量待解决问题,欢迎小伙伴们到社区分享经验,为他人答疑解惑。
本期问题目录:
4. 如何实现自定义类
通过 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 的值;
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;
}
}
Q4.如何实现自定义类
答主 年少有你:
是这样要自己定义类型吗?
using UnityEngine;
// 定义一个名为"MyCustomClass"的自定义类
public class MyCustomClass
{
// 定义私有变量
private int myInt;
private string myString;
}
编辑器调用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\ 这个目录下,是哪里的设置问题吗?
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
错误日志:
看起来是 aar 转换错误,可以尝试以下方法:
1.确认 .aar 文件是否损坏或者不完整,可以尝试重新下载或生成该文件。
2.检查 Gradle 中的相关配置是否正确,包括依赖项的配置等。
3.尝试清理 Gradle 的缓存并重新构建项目。 你可以查看 Gradle 构建日志,以获取更详细的错误信息。如果错误信息中提到了特定的转换错误或者缺少文件的提示,根据这些信息进行相应的修复。
我创建了一个 RenderMode 为 world space 的 Canvas,并在其中添加了一些 UI 元素,这些组件使用了 Layout Group 自动排列。我尝试从 RectTransfrom 中获取这些 UI 组件的 position,结果发现所有的 UI 元素的 position 都是同一个值。 如何正确获取对应 UI 组件的 World 坐标?
坐标是同一值,大概是刚创建 GameObject 后,立即去获取坐标了。这时 LayoutGroup 还没有去排列。可以延迟一帧获取,或调用 LayoutRebuilder.ForceRebuildLayoutImmediate(RectTransform layoutRoot) 立即布局,然后再获取坐标。