社区问答 | 本周问答汇总 0810-0816

文摘   科技   2024-08-16 20:02   上海  

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

本期问题目录:

新手答疑:
1. 怎么用一个 E 键对不同物体产生不同交互?
2. 为什么新建不了项目呢?
3. 为什么调不了 shader 的值?

4. 配置 2D 渲染管线后依然没有 2D 光源组件

技术支持:

5. 关于 VR 项目 PC 端窗口左右眼视角切换问题

团结引擎:

6. 团结引擎 1.2.0 导出微信小游戏,怎么调用和控制振动/震动

7. 团结引擎如何将日志输入到 qnx 平台的 qlog

8. 团结引擎和鸿蒙 arkts 文件交互

9. 在团结引擎两个版本里遇到了 Atlas 和 AutoStreaming 的问题

Unity 引擎:

10. Profiler 脚本性能分析器问题,求解

云开发:
11. 项目迁移到云开发 app
新手答疑
  Q1.怎么用一个 E 键对不同物体产生不同交互?

我想用 E 作为主交互键,对大部分物体可以按 E 进行查看物品信息,对门按 E 实现开关门,对灯按 E 就实现开关灯。这个功能要怎么实现呢?

答主 君莫笑

定义一个 InteractiveObject 的接口,接口有 InteractWithKeyE 的方法,不同类型的交互对象实现该接口类,按E的时候发送相应的事件唤起对应实现类下的 InteractWithKeyE 的方法就好。

首先,定义 InteractiveObject 接口:复制public interface IInteractiveObject{    void InteractWithKeyE();}创建一些实现这个接口的类:复制public class Door : IInteractiveObject{    public void InteractWithKeyE()    {        Debug.Log("门被打开了");        // 这里可以添加开门的具体逻辑    }}
public class Light : IInteractiveObject{ public void InteractWithKeyE() { Debug.Log("灯被打开了"); // 这里可以添加开灯的具体逻辑 }}
public class InfoObject : IInteractiveObject{ private string info;
public InfoObject(string info) { this.info = info; }
public void InteractWithKeyE() { Debug.Log($"显示信息: {info}"); }}创建一个交互管理器来处理交互事件:复制public class InteractionManager : MonoBehaviour{ private IInteractiveObject currentInteractiveObject;
private void Update() { if (Input.GetKeyDown(KeyCode.E) && currentInteractiveObject != null) { currentInteractiveObject.InteractWithKeyE(); } }
public void SetCurrentInteractiveObject(IInteractiveObject obj) { currentInteractiveObject = obj; }
public void ClearCurrentInteractiveObject() { currentInteractiveObject = null; }}在场景中使用这个系统:复制public class GameController : MonoBehaviour{ public InteractionManager interactionManager;
private void Start() { // 创建一些交互对象 Door door = new Door(); Light light = new Light(); InfoObject infoObject = new InfoObject("这是一个信息对象");
// 模拟玩家接近不同对象 SimulateApproachObject(door); SimulateApproachObject(light); SimulateApproachObject(infoObject); }
private void SimulateApproachObject(IInteractiveObject obj) { // 设置当前交互对象 interactionManager.SetCurrentInteractiveObject(obj);
// 模拟按E键 // 注意:在实际游戏中,这应该由玩家的输入触发,而不是在这里直接调用 obj.InteractWithKeyE();
// 清除当前交互对象 interactionManager.ClearCurrentInteractiveObject(); }}

  Q2.为什么新建不了项目呢?

请问为什么点击新项目之后没有反应呢?还有那个组织为什么我只有一个 WeChat 的呢?
答主 溜肉段:
您好,如果不需要版本控制和远程开发,可以把版本管理取消勾选。

  Q3.为什么调不了 shader 的值?

Unity 版本:2022.3.15f1c1
答主 溜肉段:
您好,您可以选中对应的材质球进行修改。

  Q4.配置 2D 渲染管线后依然没有 2D 光源组件

为什么我的渲染管线已经升级为 2D 管线了,材质也升级了,但依然没有 2D Light 组件?

团结 MuseChat 已解决

您好!根据您的描述,升级为2D 渲染管线后仍然没有 2D 光源组件,这可能是由于一些常见原因导致的。以下是一些可能的解决方法:

检查渲染管线设置

确保您已经正确配置了 Universal Render Pipeline (URP) 以及 2D 渲染管线。您可以按照以下步骤检查和配置:

1. 确保项目中已经正确导入了 URP 资源,并且已经将渲染管线设置为 2D 渲染管线。
2. 确保已经为项目中的 Sprites 准备了光照,并设置了正常贴图和遮罩贴图。

3. 创建一个 2D Light GameObject,并检查其属性设置。

检查 2D Light 组件

如果您仍然无法找到 2D Light 组件,可以尝试手动添加该组件:

1. 在 Unity 编辑器中,选择要添加 2D 光源的 GameObject。
2. 在 Inspector 窗口中,点击 “Add Component” 按钮。

3. 在搜索栏中输入 “Light 2D” 或 “2D Light”,然后选择相应的组件进行添加。

检查 Unity 版本和包依赖

确保您正在使用支持 2D 光源组件的 Unity 版本,并且已经正确导入了相关的 2D 渲染管线包。您可以在 Unity 官方文档中查找有关 2D 光源组件的详细信息,以确保您的项目设置正确。

技术支持

  Q5.关于 VR 项目 PC 端窗口左右眼视角切换问题

我们项目开发时发现一个现象:在 PC 端窗口上看到一个 UI 不是居中的,但是在 VR 头盔(HTC FOCUS 3)的显示是居中正常的。我想要的效果是在 SteamVR -->左上角菜单 --> 显示 VR 视图—>双眼(主眼左眼)或 双眼(主眼右眼) 的视角。

但是我添加了代码 XRSettings.gameViewRenderMode = GameViewRenderMode.BothEyes; 只能得到一个分屏的效果。

我需要怎么做才能得到一个双眼混合的视角??

Unity 版本 2019.4.1

答主 carloschen

在典型 VR 项目中,Unity camera rig 通常由两个 Unity 中的camera组成, 一个代表左眼,输出到眼镜中左眼前的屏幕,针对左眼 ui 有所偏移;一个代表右眼,输出到眼镜中右眼前的屏幕,针对右眼 ui 有所偏移。由玩家获得左右眼的输入后在大脑中生成图像,获得一个正中的效果。在整个过程中并没有一个 Unity 中摄像头来产生一个居中的渲染结果。

如果诉求的是一个由居中摄像头产生的渲染结果, 需要单独在 Unity 项目中额外加这个 camera,并获取他的渲染结果作为输出。如果你用的是 steamvr 提供的 sdk,那就是 steamvr 的这个 camera rig 中间加了这个额外的摄像头提供了渲染输出。

团结引擎

  Q6.结引擎 1.2.0 导出微信小游戏,怎么调用和控制振动/震动
团结引擎中,怎么调用震动,怎么控制震动?目前只发现了一个 Handheld.Vibrate(); 但是诸如短震动,长震动,之类的控制应该怎么实现?机器人说可以通过 Handheld.Vibrate(50); 但是我的这个方法是不带参数的,没有找到带参数的方法。还有,用了 Handheld.Vibrate(); 之后,导出小游戏编译不通过,识别不了 Handheld 这个类。
还有,WeChatWASM 这个类有详细的使用方法的资料吗?
版本:团结引擎 1.2.0
官方回答:

微信 SDK 有提供 C# 接口 WX.VibrateLong(), WX.VibrateShort()。更多微信 SDK 相关接口可以在 https://developers.weixin.qq.com/minigame/dev/api/ 网页上查询。

  Q7.团结引擎如何将日志输入到 qnx 平台的 qlog

团结引擎是否支持从 Unity 直接调用 QNX 的 slog 方法将日志输出到 qlog 里,并且不影响其他 QNX 应用的输出?

当前我们的方案需要修改启动脚本给 log 重定向到文件中,需要考虑要不要覆盖写入还是每次更新文件写入;想确认下团结引擎是否支持从 Unity 直接调用。

官方回答:

您好,团结引擎车机版的 QNX 平台支持直接输出日志到 Slogger2 里。

  Q8.团结引擎和鸿蒙 arkts 文件交互

想了解下团结引擎和 arkts 文件之间如何互相调用,目前搜了相关资料都是团结引擎和 ts 文件之间相互调用的教程;

团结引擎导出 HarmonyOS 工程时, 桥接文件 .tslib 在导出后的 HarmonyOS 工程中是 ts 文件。但是目前我们开发的鸿蒙相关的功能在 .ets 文件中。在 ts 文件中引用 ets 中的函数,提示 Importing ArkTS files to JS and TS files is not allowed. <ArkTSCheck>。(ts 无法调用 ets)想了解下这种情况有啥好的解决办法?

版本:团结引擎 1.2.0;平台:HarmonyOS

官方回答:
您好,可以通过胶水层 tslib/etslib 文件进行调用。
  Q9.在团结引擎两个版本里遇到了 Atlas 和 AutoStreaming 的问题

我想将我的 Unity 小游戏发布微信小游戏,所以转到团结引擎开发,遇到了两个问题,分别在团结引擎的两个版本。1、团结 1.1.2 版本:能够正常使用 AutoStreaming 并发布,用微信开发工具编译且能在手机预览,遇到的问题是 Atlas 的 GetSprite 方法不能取到 Sprite,调试显示 Atlas 里 Sprite 的个数为 0,手机与编辑器相同现象。2、团结 1.2.2 版本:与 1.1.2 用相同步骤进行,在编辑器运行时 Atlas 的 GetSprite 方法正常了,但在配置 AutoStreaming 时,遇到了报错如图:

AutoStreamingSettings.textures 里一个 Atlas 在出现了两条数据,在点击按钮 Generate AssetBundles 执行下面代码时,Dictionary 就会因为重复添加报错。该代码在 Unity.AutoStreaming\ASTextureUI.cs 文件 199 行:
var allTexs = AutoStreamingSettings.textures;        Dictionary<string, AutoStreamingSettingsTexture> texMap = new Dictionary<string, AutoStreamingSettingsTexture>();        foreach (var item in allTexs)        {            if (!AssetExists(item.assetPath))             {                UnityEngine.Debug.LogError("AutoStreaming: Missing Texture2D/Spriteatlas at path: " + item.assetPath + ". You may need to SyncTextures before continue.");                continue;            }            **texMap.Add(AssetDatabase.AssetPathToGUID(item.assetPath), item);**//这里报错了!!!        }

官方回答:
AutoStreaming 功能目前只支持 SpriteAtlas V1, 还不支持 V2。可以先将图集模式设置为 Sprite Atlas V2-Enable for Build,然后点击 Sync Textures, 跳过图集资源的重复检索
Unity引擎
  Q10.Profiler 脚本性能分析器问题,求解

如图所示,在使用 Profiler 时出现的问题,选中占比最多的一项之后高亮,但是图表上蓝灰色的部分到底是什么?看起来比我选中的项目占比还高,不可能是其他项目的总和吧?研究半天都没搞明白,跪求大神解答!

Unity版本:2021.3.0f1c1;平台: windows 11专业版23H2

答主 ManHua:

你可以使用多种分析工具来配合分析处理。比如还有 FrameDebugger,MemoryProfiler,HeapExplorer。

云开发
  Q11.项目迁移到云开发 app
1. Plastic SCM 中的项目迁移至云开发 app之后,Plastic SCM 中的仓库该如何删除?我想要在客户端手动删除但是客户端无法加载仓库。

2.在 PlasticHub 官网点击仓库报错 500。

3. 我原先和 PlasticSCM 的远程项目有连接,迁移之后无法提交更改,也无法加载分支,导致我经常修改完脚本无响应。
官方回答:
您好。仓库迁移到云开发 App 后原来的仓库无法访问。所以无法加载原来的仓库。您可以打开云开发 App,在项目名称下面找到新仓库的地址。


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

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



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