社区问答 | 本周问答汇总 1001-1012

文摘   科技   2024-10-12 20:00   上海  

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

本期问题目录:

新手答疑:
1. 关于 Netcode 框架的问题
2. Unity 打不开 
3. How to unlock TileFlags.LockTransform

4. 无云端项目,找不到 Plastic SCM 中团队的项目

团结引擎:

5. 团结引擎 1.3 版本导出开源鸿蒙项目Deveco 中报错

Unity 引擎:
6. 报错

技术支持:

7. 如何使用 SimpleFileBrowser 插件来使用文件对话框功能

8. Create the same asset using AssetDatabase.CreateAsset(asset, path), the current scene is missing

9. vision pro 自动曝光
微信小游戏:

10. 打包微信小游戏后不能点击了

云开发:

11. 无法拉取远程仓库,找不到目标组织

新手答疑
  Q1.关于 Netcode 框架的问题

我在使用 Netcode 网络框架的时候,客户机执行 NetworkManager.Singleton.StartClient() 后,服务器就会出现

NullReferenceException: Object reference not set to an instance of an object Unity.Netcode.NetworkConnectionManager.ApproveConnection (Unity.Netcode.ConnectionRequestMessage& connectionRequestMessage, Unity.Netcode.NetworkContext& context) (at ./Library/PackageCache/com.unity.netcode.gameobjects@1.8.1/Runtime/Connection/NetworkConnectionManager.cs:658) 

并且挂载了 NetworkObject 的组件被销毁了。

自答

找到问题了,勾选了 Connection Approval,需要实现。

  Q2.Unity 打不开

具体情况如下:断网双击 Unity,在任务管理器中发现 Unity Editor 运行一会自动消失,没其他任何反应。电脑连接手机热点后,双击 Unity,情况和以上一样。最终连接下载 Unity 的网络后,双击 Unity,自动打开 Unity Hub,然后成功打开Unity。我的需求是离线编程,和改换网络环境后仍能正常运行。

问题前提:本机是使用无线连接的。排除错误一般查看日志,Unity 的日志在C:\Users\jin\AppData\Local\Unity\Editor。 本人的日志如下: 
[LicensingClient] Error: Code 10 while verifying Licensing Client signature (process Id: 11592, path: "C:/Program Files/Unity Hub/UnityLicensingClient_V1/Unity.Licensing.Client.exe") [Licensing::Module] Warning: LicensingClient has failed validation; ignoring [LicensingClient] Handshaking with LicensingClient (version: 1.11.0+2b534b4) [Licensing::Module] Successfully connected to LicensingClient on channel: "LicenseClient-jin" (connect: 0.00s, validation: 0.01s, handshake: 0.06s) Entitlement-based licensing initiated [Licensing::Module] Error: Access token is unavailable [LicensingClient] Licenses updated successfully
LICENSE SYSTEM [2024920 13:36:59] Next license update check is after 2024-09-21T05:36:59
LICENSE SYSTEM [2024920 13:36:59] Machine binding 5 mismatch: (value of current machine) a4:b1:c1:15:45:a5 != 7a:71:9d:f6:5c:46 (value in license file). Reason might be there is a hardware change on this machine after the license was activated.
LICENSE SYSTEM [2024920 13:36:59] Machine identification is invalid for current license. Current license is invalid and cannot be activated. You must delete the license file and then activate a new license on current machine. Exiting without the bug reporter. Application will terminate with return code 0

使用的是个人免费版,平台是 windows 10。

自答

最后解决方法 You must delete the license file and then activate a new license on current machine. 

具体操作是:连接的网络环境发生了更改就必须在 Unity Hub 中先退还许可证,然后再添加许可证。然后在当前网络中就可打开 Unity。Unity 为防止盗用必须联网使用,至少在打开时要连接网络,不然会闪退。 

原因分析:Machine binding 5 mismatch: (value of current machine) a4:b1:c1:15:45:a5 != 7a:71:9d:f6:5c:46 (value in license file)。由此可见在更改网络环境后,本机的 mac 地址会发生变化,即无线局域网适配器 WLAN 的 MAC 地址会变化,所以会导致该问题。Unity 为防止盗用一个 mac 地址只能登记一个机器。

  Q3.How to unlock TileFlags.LockTransform

I need manual set transform to my Tile, but i can not unlock by Script like this:

TileBase tile = tilemap.GetTile(targetPosition);
if (tile != null && tile is RuleTile ruleTile) { TileFlags flags = tilemap.GetTileFlags(targetPosition);
flags &= ~TileFlags.LockTransform;
tilemap.SetTileFlags(targetPosition, flags);
tilemap.RefreshTile(targetPosition); }
团结 MuseChat 已解决:

要通过脚本解锁 TileFlags.LockTransform 并手动设置 Tile 的变换,可以创建一个自定义的 Tile 类,并在 GetTileData 方法中设置 TileFlags.None。以下是完整的示例代码:

using UnityEngine;using UnityEngine.Tilemaps;
public class CustomTile : TileBase{ public Sprite sprite;
public override void GetTileData(Vector3Int position, ITilemap tilemap, ref TileData tileData) { tileData.sprite = sprite; tileData.color = Color.white; tileData.transform = Matrix4x4.identity; tileData.flags = TileFlags.None; // 不锁定变换 tileData.colliderType = Tile.ColliderType.None; }}
public class TilemapController : MonoBehaviour{ public Tilemap tilemap; public CustomTile customTile;
void Start() { Vector3Int targetPosition = new Vector3Int(0, 0, 0); tilemap.SetTile(targetPosition, customTile);
// 手动设置变换矩阵 Matrix4x4 transformMatrix = Matrix4x4.TRS(new Vector3(1, 1, 0), Quaternion.Euler(0, 0, 45), Vector3.one); tilemap.SetTransformMatrix(targetPosition, transformMatrix);
tilemap.RefreshTile(targetPosition); }}
通过这种方式,你可以成功解锁 TileFlags.LockTransform 并手动设置 Tile 的变换。
  Q4.无云端项目,找不到 Plastic SCM 中团队的项目

答主 溜肉段:
CLOUD 显示是否为云端项目~
团结引擎
  Q5.团结引擎 1.版本导出开源鸿蒙项目在 Deveco 中报错
在学习用团结引擎开发鸿蒙项目,之前版本团结引擎导出后就去 deveco 里修改一点版本号就行。1.3版本后导出的一些脚本变为了 ets,但是 WebviewControlBridge 这个文件还是 ts,会报错禁止在 ts 中导入 ets。这个问题如何处理?

官方回答:

您好,为了更好地支持调用第三方库,我们在 1.3.0 里把 ts 文件升级为了 ets 文件。WebviewControlBridge 这个文件的问题需要通过插件,升级为 ets。具体插件由 OH 方提供,我们正在跟进中。也可以在 OH 官方同步咨询下。谢谢。
Unity 引擎
  Q6.报错
Unity 安装报这个,究竟是什么问题?可否提供解决方案。

答主 溜肉段:

可以把路径改成全英文再试试。

技术支持
  Q7.如何使用 SimpleFileBrowser 插件来使用文件对话框功能
在 Unity 商店下载了一个名为 SimpleFileBrowser 插件,用来打开文件对话框的,但是不会用,有没有大佬用过?

团结 MuseChat 已解决:

要在 Unity 中使用 SimpleFileBrowser 插件来打开文件对话框,请按照以下步骤操作:

安装插件:

  • 从 GitHub https://github.com/yasirkula/UnitySimpleFileBrowser 下载 SimpleFileBrowser 插件,并将其导入到 Unity 项目中。

  • 或者从 Unity Asset Store  https://assetstore.unity.com/packages/tools/gui/runtime-file-browser-113006 导入插件。

在脚本中引用插件:在你的 C# 脚本中添加 using SimpleFileBrowser;。

显示文件对话框:你可以使用以下代码来显示文件对话框:

using UnityEngine;using System.Collections;using SimpleFileBrowser;
public class FileBrowserTest : MonoBehaviour{ void Start() { // 设置文件过滤器(可选) FileBrowser.SetFilters(true, new FileBrowser.Filter("Images", ".jpg", ".png"), new FileBrowser.Filter("Text Files", ".txt", ".pdf"));
// 设置默认过滤器(可选) FileBrowser.SetDefaultFilter(".jpg");
// 设置排除的文件扩展名(可选) FileBrowser.SetExcludedExtensions(".lnk", ".tmp", ".zip", ".rar", ".exe");
// 添加快速链接(可选) FileBrowser.AddQuickLink("Users", "C:\\Users", null);
// 显示加载文件对话框 FileBrowser.ShowLoadDialog( (paths) => { Debug.Log("Selected: " + paths[0]); }, () => { Debug.Log("Canceled"); }, FileBrowser.PickMode.Files, false, null, null, "Select File", "Load" ); }}
处理文件选择结果:在回调函数中处理用户选择的文件路径。例如:
void OnFilesSelected(string[] filePaths){    foreach (string path in filePaths)    {        Debug.Log(path);    }}

使用协程显示文件对话框(可选):你也可以使用协程来显示文件对话框并等待用户选择:

IEnumerator ShowLoadDialogCoroutine(){    yield return FileBrowser.WaitForLoadDialog(FileBrowser.PickMode.Files, true, null, null, "Select Files", "Load");
if (FileBrowser.Success) { OnFilesSelected(FileBrowser.Result); }}

通过以上步骤,你可以在 Unity 中使用 SimpleFileBrowser 插件来打开文件对话框。

  Q8. Create the same asset using AssetDatabase.CreateAsset(asset, path), the current scene is missing

PlayerData .cs

using UnityEngine;public class PlayerData : ScriptableObject {    public string id;}

Player.cs

using UnityEngine;public class Player : MonoBehaviour {    public PlayerData data;}

TestCreateAsset .cs Placed in the Editor folder

using UnityEditor;using UnityEngine;public class TestCreateAsset : Editor {    [MenuItem("Tools/TestCreateAsset")]    private static void Test() {        PlayerData playerData = ScriptableObject.CreateInstance<PlayerData>();        playerData.id = "aa";
const string path = "Assets/playerData.asset"; AssetDatabase.CreateAsset(playerData, path); AssetDatabase.Refresh(); }}
1. Create Assets/playerData.asset, Using the menu Tools / TestCreateAsset
2. Create a GameObject and add Player component, Player references playerData.asset

3. After completing the above operations, using Tools / TestCreateAsset again to create Assets/playerData.asset

Missing I checked .meta and playerData.asset and found no changes. How should I solve this problem?

自答:

已解决该问题,修改如下:

using System.IO;using UnityEditor;using UnityEngine;public class TestCreateAsset : Editor {    [MenuItem("Tools/TestCreateAsset")]    private static void Test() {        const string path = "Assets/playerData.asset";
PlayerData playerData; bool isExists = File.Exists(path);
if (isExists) { playerData = AssetDatabase.LoadAssetAtPath<PlayerData>(path); playerData.id = "bb"; EditorUtility.SetDirty(playerData); AssetDatabase.SaveAssetIfDirty(playerData); } else { playerData = ScriptableObject.CreateInstance<PlayerData>(); playerData.id = "aa"; AssetDatabase.CreateAsset(playerData, path); }
AssetDatabase.Refresh(); }}
  Q9.vision pro 自动曝光
vision pro 中有个自动曝光,场景外的灯光的开关会直接影响场景内的展示,这个有 api 可以关闭这个 vision pro 的曝光么?

社区回答:

在 MR 环境里面,Vision Pro 本来就会接受环境的自然光照,这是系统行为,如果他们想完全控制光照就要做 VR 模式。如果想消解这个影响,需要自己做个带光照的 IBL。

Vision Pro 的 immersive space 的一个重要宗旨就是结合真实环境与虚拟内容,只有虚拟物体能很好的反馈现实世界的光照变化才能更真实。
微信小游戏
  Q10.打包微信小游戏后不能点击了
打包微信小游戏后不能点击了,Button 还有 Input System 的点击都失效了是怎么回事啊?

自答:

解决了,改回旧的 input manager 就可以了。

云开发
  Q11.无法拉取远程仓库,找不到目标组织

我的朋友已经将我设为他的项目管理员。我在我的 Unity 网页账户主页上可以看到我在他的组织里,并且是管理员身份。此时,我在 Unity Hub 中,点击“打开”右侧的箭头,点击“打开远程项目”,却只能看到我自己曾经创建的组织,而不能看到我朋友拉我进去的组织。问题如图所示。Hub 版本 3.3.2-c7

官方回复:
将你的角色改成 所有者 后,就可以看到了。


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

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



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