a11e003fcd
- 加权评分系统:每步独立 ScoreWeight,满分 100,SequenceClick 按子项比例计分 - StepData 新增 DetailedContent(学习模式详细操作说明)和 SubStepCount - 伤情检查步骤扩展为 5 子项序列(视觉检查→肿胀→疼痛→生命体征→神经评估) - 夹板固定模式完整评分(选择夹板→放置衬垫→夹板固定→固定后检查) - Doc/ 文件夹归档三份文档:项目大纲、文案、评分标准 - README 更新评分权重表和夹板固定流程
84 lines
2.2 KiB
C#
84 lines
2.2 KiB
C#
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// 物体高亮效果:鼠标悬停时切换 Emission 或轮廓材质。
|
|
/// 挂在可交互的 3D 物体上。
|
|
/// </summary>
|
|
public class HighlightEffect : MonoBehaviour
|
|
{
|
|
[Header("高亮设置")]
|
|
[SerializeField] private Color _highlightColor = Color.yellow;
|
|
[SerializeField] private float _highlightIntensity = 0.5f;
|
|
|
|
[Header("可选 - 使用 Outline 组件")]
|
|
[SerializeField] private bool _useOutline = true;
|
|
[SerializeField] private float _outlineWidth = 0.02f;
|
|
|
|
private Renderer[] _renderers;
|
|
private Material[] _originalMaterials;
|
|
private Material[] _highlightMaterials;
|
|
private bool _isHighlighted;
|
|
|
|
[Header("考核高亮 - 始终显示")]
|
|
public bool AlwaysHighlighted;
|
|
|
|
private void Start()
|
|
{
|
|
_renderers = GetComponentsInChildren<Renderer>();
|
|
}
|
|
|
|
private void OnMouseEnter()
|
|
{
|
|
if (_isHighlighted) return;
|
|
SetHighlight(true);
|
|
}
|
|
|
|
private void OnMouseExit()
|
|
{
|
|
if (AlwaysHighlighted) return;
|
|
SetHighlight(false);
|
|
}
|
|
|
|
public void SetHighlight(bool on)
|
|
{
|
|
_isHighlighted = on;
|
|
if (_renderers == null) return;
|
|
|
|
foreach (var r in _renderers)
|
|
{
|
|
if (r == null) continue;
|
|
foreach (var mat in r.materials)
|
|
{
|
|
if (on)
|
|
{
|
|
mat.EnableKeyword("_EMISSION");
|
|
mat.SetColor("_EmissionColor", _highlightColor * _highlightIntensity);
|
|
}
|
|
else
|
|
{
|
|
mat.DisableKeyword("_EMISSION");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>闪烁效果,用于提示用户点击</summary>
|
|
public void Flash(float duration = 0.5f)
|
|
{
|
|
StopAllCoroutines();
|
|
StartCoroutine(FlashRoutine(duration));
|
|
}
|
|
|
|
private System.Collections.IEnumerator FlashRoutine(float duration)
|
|
{
|
|
float half = duration / 2f;
|
|
SetHighlight(true);
|
|
yield return new WaitForSeconds(half);
|
|
SetHighlight(false);
|
|
yield return new WaitForSeconds(half);
|
|
SetHighlight(true);
|
|
yield return new WaitForSeconds(half);
|
|
SetHighlight(false);
|
|
}
|
|
}
|