本文汇总了 2024 年 8 月 10 日 - 2024 年 8 月 16 日 Unity 中文社区精选问答。如果在使用 Unity 过程中遇到任何问题,欢迎点击阅读原文前往 Unity 中文社区提问,将有官方技术支持及社区贡献者当日解答。此外,本周还有少量待解决问题,欢迎小伙伴们到社区分享经验,为他人答疑解惑。
本期问题目录:
4. 配置 2D 渲染管线后依然没有 2D 光源组件
技术支持:
5. 关于 VR 项目 PC 端窗口左右眼视角切换问题
6. 团结引擎 1.2.0 导出微信小游戏,怎么调用和控制振动/震动
7. 团结引擎如何将日志输入到 qnx 平台的 qlog
8. 团结引擎和鸿蒙 arkts 文件交互
Unity 引擎:
10. Profiler 脚本性能分析器问题,求解
我想用 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.为什么新建不了项目呢?
团结 MuseChat 已解决:
您好!根据您的描述,升级为2D 渲染管线后仍然没有 2D 光源组件,这可能是由于一些常见原因导致的。以下是一些可能的解决方法:
检查渲染管线设置
确保您已经正确配置了 Universal Render Pipeline (URP) 以及 2D 渲染管线。您可以按照以下步骤检查和配置:
3. 创建一个 2D Light GameObject,并检查其属性设置。
检查 2D Light 组件
如果您仍然无法找到 2D Light 组件,可以尝试手动添加该组件:
3. 在搜索栏中输入 “Light 2D” 或 “2D Light”,然后选择相应的组件进行添加。
检查 Unity 版本和包依赖
技术支持
我们项目开发时发现一个现象:在 PC 端窗口上看到一个 UI 不是居中的,但是在 VR 头盔(HTC FOCUS 3)的显示是居中正常的。我想要的效果是在 SteamVR -->左上角菜单 --> 显示 VR 视图—>双眼(主眼左眼)或 双眼(主眼右眼) 的视角。
但是我添加了代码 XRSettings.gameViewRenderMode = GameViewRenderMode.BothEyes; 只能得到一个分屏的效果。
我需要怎么做才能得到一个双眼混合的视角??
Unity 版本 2019.4.1
在典型 VR 项目中,Unity camera rig 通常由两个 Unity 中的camera组成, 一个代表左眼,输出到眼镜中左眼前的屏幕,针对左眼 ui 有所偏移;一个代表右眼,输出到眼镜中右眼前的屏幕,针对右眼 ui 有所偏移。由玩家获得左右眼的输入后在大脑中生成图像,获得一个正中的效果。在整个过程中并没有一个 Unity 中摄像头来产生一个居中的渲染结果。
团结引擎
微信 SDK 有提供 C# 接口 WX.VibrateLong(), WX.VibrateShort()。更多微信 SDK 相关接口可以在 https://developers.weixin.qq.com/minigame/dev/api/ 网页上查询。
团结引擎是否支持从 Unity 直接调用 QNX 的 slog 方法将日志输出到 qlog 里,并且不影响其他 QNX 应用的输出?
当前我们的方案需要修改启动脚本给 log 重定向到文件中,需要考虑要不要覆盖写入还是每次更新文件写入;想确认下团结引擎是否支持从 Unity 直接调用。
您好,团结引擎车机版的 QNX 平台支持直接输出日志到 Slogger2 里。
想了解下团结引擎和 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
我想将我的 Unity 小游戏发布微信小游戏,所以转到团结引擎开发,遇到了两个问题,分别在团结引擎的两个版本。1、团结 1.1.2 版本:能够正常使用 AutoStreaming 并发布,用微信开发工具编译且能在手机预览,遇到的问题是 Atlas 的 GetSprite 方法不能取到 Sprite,调试显示 Atlas 里 Sprite 的个数为 0,手机与编辑器相同现象。2、团结 1.2.2 版本:与 1.1.2 用相同步骤进行,在编辑器运行时 Atlas 的 GetSprite 方法正常了,但在配置 AutoStreaming 时,遇到了报错如图:
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);**//这里报错了!!!
}
如图所示,在使用 Profiler 时出现的问题,选中占比最多的一项之后高亮,但是图表上蓝灰色的部分到底是什么?看起来比我选中的项目占比还高,不可能是其他项目的总和吧?研究半天都没搞明白,跪求大神解答!
答主 ManHua:
你可以使用多种分析工具来配合分析处理。比如还有 FrameDebugger,MemoryProfiler,HeapExplorer。
2.在 PlasticHub 官网点击仓库报错 500。