void LateUpdate() { if (_viewCamera && _armorBones && _armorCmpt) { if (_armorCmpt.hasRequest) { return; } // 计算鼠标在界面上的位置 if (_uiCamera == null) { _uiCamera = GetComponentInParent <Camera>(); } Vector2 cursor = Input.mousePosition - _uiCamera.WorldToScreenPoint(transform.position); _toolTip.UpdateToolTip(cursor); // 右键点击检查 bool rightClick = false; if (Input.GetMouseButtonDown(1)) { _lastRightButtonDownPosition = cursor; } if (Input.GetMouseButtonUp(1)) { rightClick = (_lastRightButtonDownPosition - cursor).sqrMagnitude <= 2.1f; } // 显示激活的骨骼组 if (_activeGroup != ArmorType.None) { bool hasHover = false; for (int i = groupFirst[(int)_activeGroup]; i <= groupLast[(int)_activeGroup]; i++) { // 更新骨骼 UI 的位置 _boneUIs[i].UpdatePosition(_armorBones.nodes(i).bone, _viewCamera); // 更新高亮骨骼 if (!hasHover && _boneUIs[i].isHover(cursor)) { hasHover = true; highlightIndex = i; } } if (!hasHover) { highlightIndex = -1; } } // 显示已装备的装甲 else if (_armorsVisible) { bool hasHover = false; for (int i = 0; i < 16; i++) { if (_boneUIs[i].enabled) { // 更新骨骼 UI 的位置 _boneUIs[i].UpdatePosition(_armorBones.nodes(i).bone, _viewCamera); // 更新高亮骨骼 if (!hasHover && _boneUIs[i].isHover(cursor)) { hasHover = true; highlightIndex = i; } } } if (!hasHover) { highlightIndex = -1; if (rightClick) { OnSettingsButtonClick(); } } else { _boneUIs[_highlightIndex].pressing = Input.GetMouseButton(0); if (Input.GetMouseButtonDown(0)) { _mouseDownIndex = _highlightIndex; } if (Input.GetMouseButtonUp(0) && _mouseDownIndex == _highlightIndex) { SetArmorsVisible(false); isDecoration = false; focused = true; } } } // 显示选中的装甲 else if (_focused) { _boneUIs[_highlightIndex].UpdatePosition(_armorBones.nodes(_highlightIndex).bone, _viewCamera); if (_boneUIs[_highlightIndex].isHover(cursor)) { _boneUIs[_highlightIndex].pressing = Input.GetMouseButton(0); if (Input.GetMouseButtonUp(0)) { isDecoration = !_isDecoration; } } else { if (rightClick) { OnSettingsButtonClick(); } } } // 显示操作控件 else if (_showHandles) { Vector3 screenPosition = new Vector3( cursor.x * _viewCamera.targetTexture.width / viewSize.x, cursor.y * _viewCamera.targetTexture.height / viewSize.y); _vc.moveHandle.customMousePosition = screenPosition; _vc.rotateHandle.customMousePosition = screenPosition; _vc.scaleHandle.customMousePosition = screenPosition; if (rightClick) { SetMoveHandle(null); SetRotateHandle(null); SetScaleHandle(null); focused = true; } } if (_focused || _showHandles) { // 描边动画 if (_outline) { _outlineStartTime += Time.unscaledDeltaTime; _outlineStartTime %= 1f; _outline.color = Interpolation.Parabolic(_outlineStartTime) * (outlineColor2 - outlineColor1) + outlineColor1; } } } if (_light) { if (_activeGroup != ArmorType.None || _armorsVisible || _showHandles || _focused) { _light.color = Color.Lerp(_light.color, darkLightColor, Time.unscaledDeltaTime * lightDamping); } else { _light.color = Color.Lerp(_light.color, normalLightColor, Time.unscaledDeltaTime * lightDamping); } } }