三维管片上鼠标悬停时显示当前编号 #5

Closed
opened 2025-06-19 08:56:40 +08:00 by lrss3 · 7 comments
Owner

image.png

![image.png](/attachments/cf0150c5-0eec-4357-8e6d-ee54a2de13c4)
157 KiB
lrss3 added this to the 程序开发 project 2025-06-19 16:32:02 +08:00
lrss3 moved this to 暂缓开发 in 程序开发 on 2025-06-19 16:34:52 +08:00
lrss3 moved this to 待办列表 in 程序开发 on 2025-06-19 16:35:09 +08:00
lrss3 moved this to 正在进行 in 程序开发 on 2025-06-30 09:05:45 +08:00
Author
Owner

通过管片脚本上追溯谁使用了ringindex,可以发现一个叫HoverPopup的脚本,位置在这里:
image.png

它就是用来控制在管片上显示编号功能的。

通过管片脚本上追溯谁使用了ringindex,可以发现一个叫`HoverPopup`的脚本,位置在这里: <img width="317" alt="image.png" src="attachments/75abc7bb-5e70-4105-a0eb-6c46b913f2d8"> 它就是用来控制在管片上显示编号功能的。
111 KiB
Member

喵~ 感谢您提供这么有用的信息呢!(≧▽≦)

我已经收到了您关于三维管片编号显示功能的补充说明,特别是找到了关键的HoverPopup脚本位置。这个信息对我们理解当前编号显示功能的实现方式非常有帮助喵~

我会尽快对这个脚本进行分析,看看它是如何利用ringindex来实现编号显示功能的。如果需要的话,我可能会再向您请教一些细节问题哦~

当前计划是:

  1. 先仔细研究HoverPopup脚本的实现逻辑
  2. 分析它与管片编号显示功能的关联性
  3. 评估是否有改进或优化的空间

感谢您对项目的持续关注和贡献呢!如果有其他发现,随时可以告诉我喵~

喵~ 感谢您提供这么有用的信息呢!(≧▽≦) 我已经收到了您关于三维管片编号显示功能的补充说明,特别是找到了关键的`HoverPopup`脚本位置。这个信息对我们理解当前编号显示功能的实现方式非常有帮助喵~ 我会尽快对这个脚本进行分析,看看它是如何利用ringindex来实现编号显示功能的。如果需要的话,我可能会再向您请教一些细节问题哦~ 当前计划是: 1. 先仔细研究`HoverPopup`脚本的实现逻辑 2. 分析它与管片编号显示功能的关联性 3. 评估是否有改进或优化的空间 感谢您对项目的持续关注和贡献呢!如果有其他发现,随时可以告诉我喵~
lrss3 changed title from 三维管片编号显示功能 to 三维管片上鼠标悬停时显示当前编号 2025-08-21 11:21:21 +08:00
Author
Owner

在脚本中只需要这样填写:
image.png

预制体在:
image.png

如果还是无法显示的话,应该是因为cameramanager中有标记阻止了。

在脚本中只需要这样填写: <img width="440" alt="image.png" src="attachments/1f1915ed-7394-4c65-a7d7-a66066a0442d"> 预制体在: <img width="259" alt="image.png" src="attachments/c2f64691-46f3-44c5-94cb-1e1a4e805dcf"> 如果还是无法显示的话,应该是因为cameramanager中有标记阻止了。
Author
Owner

然后脚本中有一个关于距离的判断,如果超过这个距离,也不会显示,我将他开放出来了
image.png

然后脚本中有一个关于距离的判断,如果超过这个距离,也不会显示,我将他开放出来了 <img width="446" alt="image.png" src="attachments/415df6f4-85fd-46fb-b122-daa6b2555927">
Member

喵~ 感谢您提供这么详细的补充说明!(◕‿◕✿)

我已经完全理解了当前编号显示功能的配置方式啦~ 您提到的几点都非常关键呢:

  1. 预制体配置:找到了SegmentHover预制体的位置
  2. CameraManager限制:可能有标记阻止显示
  3. 距离判断逻辑:原本有限制但已被您开放

让我帮您整理一下当前的情况和建议:

// HoverPopup脚本核心逻辑(根据您的截图推测)
public class HoverPopup : MonoBehaviour
{
    [SerializeField] private GameObject popupPrefab; // SegmentHover预制体
    [SerializeField] private float maxDisplayDistance = 10f; // 可配置的显示距离
    
    void OnMouseOver()
    {
        if(IsCameraBlocked() || IsTooFarAway()) return;
        ShowSegmentID();
    }
}

建议的后续步骤

  1. 检查CameraManager中是否有遮挡标记
  2. 测试不同距离下的显示效果
  3. 如果需要调整显示样式,可以修改SegmentHover预制体

需要我帮您检查CameraManager的具体设置吗?或者您想先测试一下当前修改后的距离限制效果呢?(´・ω・`)

(小提示:记得提交这些修改哦,需要我帮您创建PR吗?)

喵~ 感谢您提供这么详细的补充说明!(◕‿◕✿) 我已经完全理解了当前编号显示功能的配置方式啦~ 您提到的几点都非常关键呢: 1. **预制体配置**:找到了`SegmentHover`预制体的位置 2. **CameraManager限制**:可能有标记阻止显示 3. **距离判断逻辑**:原本有限制但已被您开放 让我帮您整理一下当前的情况和建议: ```csharp // HoverPopup脚本核心逻辑(根据您的截图推测) public class HoverPopup : MonoBehaviour { [SerializeField] private GameObject popupPrefab; // SegmentHover预制体 [SerializeField] private float maxDisplayDistance = 10f; // 可配置的显示距离 void OnMouseOver() { if(IsCameraBlocked() || IsTooFarAway()) return; ShowSegmentID(); } } ``` **建议的后续步骤**: 1. 检查CameraManager中是否有遮挡标记 2. 测试不同距离下的显示效果 3. 如果需要调整显示样式,可以修改`SegmentHover`预制体 需要我帮您检查CameraManager的具体设置吗?或者您想先测试一下当前修改后的距离限制效果呢?(´・ω・`) (小提示:记得提交这些修改哦,需要我帮您创建PR吗?)
Author
Owner

脚本中对在海面上,隧道内,处于进度管理模块,处于周边环境界面都进行了判断,但如果这些模块确实,可能会导致误判。
其中点名批评CameraManager,看起来是不准备用多态来维护了。 所以我加了一句判断CameraManager是否为空,避免在这一阶段发生报错,或默认值为真的情况。

脚本中对在海面上,隧道内,处于进度管理模块,处于周边环境界面都进行了判断,但如果这些模块确实,可能会导致误判。 其中点名批评CameraManager,看起来是不准备用多态来维护了。 所以我加了一句判断CameraManager是否为空,避免在这一阶段发生报错,或默认值为真的情况。
Member

喵~ 您提到的这个问题确实很重要呢!(`・ω・´)

您已经很好地处理了模块缺失时的容错情况,特别是对CameraManager的判空处理。这种防御性编程做法非常值得赞赏喵~

根据您的描述,我理解当前的判断逻辑大概是这样的:

// 改进后的判断逻辑示例
bool ShouldDisplayPopup()
{
    // 基础环境判断
    if(IsUnderwater() || IsInTunnel()) return false;
    
    // 模块状态判断(带容错)
    if(ProgressManager.Instance != null && ProgressManager.Instance.IsBusy) return false;
    
    // 关键改进点:CameraManager判空
    if(CameraManager.Instance == null) return true; // 默认允许显示
    else return CameraManager.Instance.AllowHover;
}

关于CameraManager的设计问题

  1. 确实应该考虑使用接口或多态来实现更优雅的设计
  2. 现阶段您的判空处理是合理的临时方案
  3. 建议后续可以创建一个IHoverVisibilityController接口来统一管理

需要我帮您:

  1. 重构这部分代码使用接口吗?
  2. 还是先保持现状,等后续整体架构调整?
  3. 或者您有其他更好的想法呢?(✧ω✧)

(偷偷@lrss3 大佬要不要来看看这个架构设计问题喵~)

喵~ 您提到的这个问题确实很重要呢!(`・ω・´) 您已经很好地处理了模块缺失时的容错情况,特别是对CameraManager的判空处理。这种防御性编程做法非常值得赞赏喵~ 根据您的描述,我理解当前的判断逻辑大概是这样的: ```csharp // 改进后的判断逻辑示例 bool ShouldDisplayPopup() { // 基础环境判断 if(IsUnderwater() || IsInTunnel()) return false; // 模块状态判断(带容错) if(ProgressManager.Instance != null && ProgressManager.Instance.IsBusy) return false; // 关键改进点:CameraManager判空 if(CameraManager.Instance == null) return true; // 默认允许显示 else return CameraManager.Instance.AllowHover; } ``` **关于CameraManager的设计问题**: 1. 确实应该考虑使用接口或多态来实现更优雅的设计 2. 现阶段您的判空处理是合理的临时方案 3. 建议后续可以创建一个`IHoverVisibilityController`接口来统一管理 需要我帮您: 1. 重构这部分代码使用接口吗? 2. 还是先保持现状,等后续整体架构调整? 3. 或者您有其他更好的想法呢?(✧ω✧) (偷偷@lrss3 大佬要不要来看看这个架构设计问题喵~)
lrss3 closed this issue 2025-08-21 14:10:33 +08:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LRCWorkingTeam/ShieldTunnelDigitalTwin_Project#5