社区问答 | 本周问答汇总 0413-0419

文摘   科技   2024-04-19 20:29   上海  

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

本期问题目录:

新手答疑:
1. 修改拖入 Inspector 面板对属性赋值的行为

2. 为什么我写 Unity 脚本用结构体的时候没有引用

3. 点击按钮打开 UI 界面问题
团结引擎:

4. 团结引擎点击鸿蒙 build 就在一直报错,完全新的空工程

技术交流:

5. AR 项目导出问题

6. easy road 的问题

技术支持(异常报错):
7. 行时出现错误,实例丢失
8. 帧不在模块中
新手答疑
  Q1.修改拖入 Inspector 面板对属性赋值的行为
在 Inspector 面板中,我挂载了一个脚本,这个脚本包含了一个 Vector3 类型的属性。我希望能够在非运行时就可以通过将场景中的某个 Gameobject 拖入 Inspector 面板中的这个属性,然后获取到这个 Gameobject 的 localPosition 的深拷贝。
但是默认情况下一个 Gameobject 或者 Transform 无法直接拖入 Vector3 属性,请问有没有办法能够做到上述的需求?
Unity 版本:2022.3.13f1;平台:Windows

答主 溜肉段

把公开的 vector3 属性换成 transform,再在代码中获取这个 transform 的 localposition 就可以了。
  Q2.为什么我写 Unity 脚本用结构体的时候没有引用
Vector 这类的代码都是灰的也不会自动补充,感觉是少了什么资源包,但是感觉已经下的很全了不知道少了什么东西,跑也跑不了
Unity 版本:2022.3.17
void Start() 
{
//向量,坐标,旋转,缩放 Vector3 v = new Vector3(1, 1, 1); v = Vector3.zero; v = Vector3.right;Vector3 v2 = Vector3.forward;
//计算两个向量夹角Debug.Log(Vector3.Angel(v,v2))
}

答主 橙子:

using UnityEngine;
public class MyScript : MonoBehaviour{ void Start() { // 定义和使用 Vector3 Vector3 v = new Vector3(1, 1, 1); v = Vector3.zero; v = Vector3.right;
Vector3 v2 = Vector3.forward;
// 计算两个向量之间的夹角 float angle = Vector3.Angle(v, v2); Debug.Log("夹角:" + angle); }}
  Q3.点击按钮打开 UI 界面问题

在摄像机上也添加了物理射线,用的是下面的脚本,给立方体也添加了 event trigger,但是还是打不开,想知道怎么解决

using System.Collections; using System.Collections.Generic; using UnityEngine;
public class open : MonoBehaviour {
// Start is called before the first frame updatepublic void Click()
{ gameObject.SetActive(true); } }
团结 Muse Chat 已解决:
根据您提供的脚本,您想通过点击立方体来打开 UI 界面。但是,您的脚本中只有一个 Click() 方法,没有任何与物理射线相关的代码。为了实现您的需求,您需要在立方体上添加一个 Collider 组件,并使用 Physics.Raycast 来检测点击事件。以下是一个示例脚本,可以帮助您实现这个功能:
using UnityEngine;
public class OpenUI : MonoBehaviour{ public GameObject uiPanel; // UI面板
private void Update() { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit;
if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject == gameObject) { uiPanel.SetActive(true); } } } }}
在这个示例脚本中,我们使用 Physics.Raycast 来检测鼠标点击事件,并判断点击的是否是立方体对象。如果是,则将 UI 面板设置为激活状态。

请确保在立方体上添加了 Collider 组件,并将 UI 面板对象分配给 uiPanel 变量。这样,当您点击立方体时,UI 面板将被打开。

团结引擎

  Q4.团结引擎点击鸿蒙 build 就在一直报错,完全新的空工程

团结引擎,点击鸿蒙 build 就在一直报错。完全新的空工程。
团结 hub 版本 1.0.9, 团结引擎版本 1.1.0;平台 鸿蒙
官方回答:

这个是 1.1.0 版本已知问题,1.1.1 版本修复。

技术交流

  Q5.AR 项目导出问题

在导出安卓平台的 AR 项目时导出无响应

团结 Muse Chat 已解决:
如果在导出安卓平台的 AR 项目时出现导出无响应的问题,可以尝试以下解决方法:
确保 Unity 项目已经正确配置为 AR 项目。可以参考 Unity 的项目设置文档进行配置。
检查 Unity 项目中是否安装了正确的 AR 插件和依赖库。Unity 的 AR 功能集包含了 AR Foundation、Apple ARKit、Google ARCore 等插件,确保这些插件已正确安装和配置。
检查 Unity 项目的构建设置。在 Unity 中选择 "File > Build Settings",确保选择了正确的平台(Android),并启用了导出项目选项。
尝试重新导出项目。在导出项目之前,可以尝试重新启动 Unity 编辑器,并确保没有其他进程或任务占用了系统资源。
检查导出目标文件夹的权限。确保导出目标文件夹具有写入权限,并且没有被其他程序或进程占用。
  Q6. easy road 的问题
导入 easy road 插件,建一个道路的对象却缺少绘制道路的工具,想知道怎么解决?

团结 Muse Chat 已解决:

要使用 EasyRoads3D 插件来绘制道路,您需要按照以下步骤进行操作:

首先,确保您已经成功导入了 EasyRoads3D 插件。您可以在 Unity Asset Store 中找到该插件并将其导入到您的项目中。

在 Unity 编辑器中,选择 "GameObject" 菜单,然后选择 "3D Object",然后选择 "EasyRoads3D",然后选择 "New Road Network"。这将在场景中创建一个新的道路网络对象。

在场景中选择新创建的道路网络对象。在 Inspector 窗口中,您将看到 EasyRoads3D 的道路编辑器工具。

要开始绘制道路,您可以使用道路编辑器工具栏中的各种按钮。例如,您可以使用 "Add Marker" 按钮在场景中添加道路标记点,然后使用 "Connect Markers" 按钮将它们连接起来形成道路。

您还可以使用道路编辑器工具栏中的其他按钮来调整道路的形状、宽度、高度等属性。

请注意,EasyRoads3D 插件提供了许多功能和选项,您可以根据需要进行进一步的探索和学习。您可以参考 EasyRoads3D 的官方文档和教程,以获取更详细的使用说明和示例代码。

如果您在使用 EasyRoads3D 插件时遇到任何错误或问题,请提供更多的详细信息,例如 Unity 版本、平台、相关代码和错误日志,以便我们能够更好地帮助您解决问题。
技术支持(异常报错)
  Q7. 行时出现错误,实例丢失

在运行一个事件时 for 循环执行了一次过后就报错,第一遍循环时可以成功执行。

答主 溜肉段:

检查一下报空的位置,看看组件是不是没有挂载上。

  Q8. 帧不在模块中

Unity 无法在 debug 模式中逐语句 Coroutine。会弹出帧不在模块中。
Unity 版本:2022.3.17f1c1
答主 橙子:

你可能尝试在非主线程(例如协程)中进行调试操作,而调试器需要在主线程中执行。这可能会导致一些调试功能无法按预期工作。你可以尝试在不启用调试模式的情况下运行协程,或者尝试在其他环境中进行调试。

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

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



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