fix: 切割锯子接入EventTrigger

This commit is contained in:
2026-08-02 21:45:36 +08:00
parent 93501dddaf
commit 5fa324de6c
4 changed files with 167 additions and 64 deletions
+58
View File
@@ -338,6 +338,8 @@ GameObject:
- component: {fileID: 3356305640573621166}
- component: {fileID: 593249056707730865}
- component: {fileID: 699543252252589786}
- component: {fileID: 780000000000000001}
- component: {fileID: 780000000000000002}
m_Layer: 0
m_Name: CutWheel
m_TagString: Untagged
@@ -415,6 +417,62 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!58 &780000000000000001
CircleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6388638343240283516}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0.000000059604645, y: 0}
serializedVersion: 2
m_Radius: 0.45813966
--- !u!114 &780000000000000002
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6388638343240283516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0c4fbab01ad40c2449c849cd2a8c620f, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Delegates:
- eventID: 2
callback:
m_PersistentCalls:
m_Calls: []
- eventID: 3
callback:
m_PersistentCalls:
m_Calls: []
--- !u!114 &699543252252589786
MonoBehaviour:
m_ObjectHideFlags: 0
+1 -44
View File
@@ -152,51 +152,8 @@ PrefabInstance:
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 6388638343240283516, guid: 316c061f3e3c69c439772d3b781e2c74, type: 3}
insertIndex: -1
addedObject: {fileID: 5066059310206209015}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 316c061f3e3c69c439772d3b781e2c74, type: 3}
--- !u!1 &2263722661675396300 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6388638343240283516, guid: 316c061f3e3c69c439772d3b781e2c74, type: 3}
m_PrefabInstance: {fileID: 5171077393211660720}
m_PrefabAsset: {fileID: 0}
--- !u!58 &5066059310206209015
CircleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2263722661675396300}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0.000000059604645, y: 0}
serializedVersion: 2
m_Radius: 0.45813966
--- !u!4 &7588747131920894494 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3356305640573621166, guid: 316c061f3e3c69c439772d3b781e2c74, type: 3}
@@ -34,26 +34,26 @@ namespace AibisDream
private void Update()
{
if (isCuttingMode && !isGearActive && gearFollower != null)
{
// 检测点击
if (Input.GetMouseButtonDown(0))
{
Ray ray = _mainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction);
if (hit.collider != null && hit.collider.gameObject.GetComponent<GearFollower>() != null)
{
gearFollower=hit.collider.gameObject.GetComponent<GearFollower>();
ActivateGear();
}
}
}
else if (isCuttingMode && isGearActive && gearFollower != null)
if (isCuttingMode && isGearActive && gearFollower != null)
{
gearFollower.GearUpdate();
}
}
public bool TryActivateGear(GearFollower source)
{
if (!isCuttingMode || source == null || source != gearFollower)
{
return false;
}
if (!isGearActive)
{
ActivateGear();
}
return isGearActive;
}
public void ClearCutLine()
{
if (gearFollower != null)
@@ -1,14 +1,18 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Rendering.Universal;
using UnityEngine.VFX;
using UnityEngine.EventSystems;
using DG.Tweening;
using AibisDream.FixSystem;
using AibisDream; // 添加OpenSystem的命名空间
using AibisDream.Framework;
using System.Collections;
using AibisDream.Kit;
public class GearFollower : MonoBehaviour
[RequireComponent(typeof(EventTriggerEx))]
public class GearFollower : MonoBehaviour, IInteraction
{
[Header("参数")]
public SpriteRenderer targetSpriteRenderer;
@@ -95,6 +99,73 @@ public class GearFollower : MonoBehaviour
private Vector3 targetPosition = Vector3.zero;
private bool isInTractionMode = false;
private bool isDrillSfxPlaying = false; // 标记音效是否已播放
private EventTriggerEx eventTrigger;
private bool isPointerHeld;
private void Awake()
{
eventTrigger = GetComponent<EventTriggerEx>();
EnsureEventTriggerEntries();
eventTrigger.Register(EventTriggerType.PointerDown, OnPointerDown);
eventTrigger.Register(EventTriggerType.PointerUp, OnPointerUp);
}
private void EnsureEventTriggerEntries()
{
if (eventTrigger == null) return;
var needed = new[] { EventTriggerType.PointerDown, EventTriggerType.PointerUp };
foreach (var triggerType in needed)
{
if (eventTrigger.triggers.Any(entry => entry.eventID == triggerType)) continue;
eventTrigger.triggers.Add(new EventTrigger.Entry { eventID = triggerType });
}
}
private void OnPointerDown(BaseEventData eventData)
{
if (eventData is not PointerEventData { button: PointerEventData.InputButton.Left }) return;
var eventSystem = EventSystemEx.Instance;
if (!IsAvailable || eventSystem == null || eventSystem.isLocked)
{
eventSystem?.UnRegister(this);
return;
}
var cuttingManager = FixSystemCenter.SystemDic.Get<CuttingManager>();
if (cuttingManager == null || !cuttingManager.TryActivateGear(this))
{
eventSystem.UnRegister(this);
return;
}
isPointerHeld = true;
}
private void OnPointerUp(BaseEventData eventData)
{
if (eventData is not PointerEventData { button: PointerEventData.InputButton.Left }) return;
isPointerHeld = false;
EndCutting();
}
private bool IsInteractionLocked()
{
return EventSystemEx.Instance == null || EventSystemEx.Instance.isLocked;
}
private void CancelPointerInteraction()
{
isPointerHeld = false;
if (isCutting)
{
EndCutting();
}
EventSystemEx.Instance?.UnRegister(this);
}
public void Init(SpriteRenderer targetSpriteRenderer)
{
@@ -146,13 +217,19 @@ public class GearFollower : MonoBehaviour
public void GearUpdate()
{
if (IsInteractionLocked())
{
CancelPointerInteraction();
return;
}
// 获取鼠标在屏幕上的位置
Vector3 mouseScreenPos = Input.mousePosition;
// 将屏幕坐标转换为世界坐标
Vector3 mouseWorldPos = mainCamera.ScreenToWorldPoint(new Vector3(mouseScreenPos.x, mouseScreenPos.y, -mainCamera.transform.position.z));
mouseWorldPos.z = 0; // 确保z坐标为0
if (Input.GetMouseButton(0))
if (isPointerHeld)
{
transform.Rotate(Vector3.forward, -360f * Time.deltaTime);
}
@@ -391,12 +468,12 @@ public class GearFollower : MonoBehaviour
EndCutting();
return;
}
if (!Input.GetMouseButton(0))
if (!isPointerHeld)
{
EndCutting();
return;
}
if (!isCutting && Input.GetMouseButton(0))
if (!isCutting && isPointerHeld)
{
StartCutting();
}
@@ -835,6 +912,13 @@ public class GearFollower : MonoBehaviour
private void OnDestroy()
{
if (eventTrigger != null)
{
eventTrigger.UnRegister(EventTriggerType.PointerDown, OnPointerDown);
eventTrigger.UnRegister(EventTriggerType.PointerUp, OnPointerUp);
}
EventSystemEx.Instance?.UnRegister(this);
// 清理DOTween序列
if (cutCompleteSequence != null)
{
@@ -909,6 +993,10 @@ public class GearFollower : MonoBehaviour
}
}
public bool IsActive => !isCutComplete;
public bool IsAvailable => !isCutComplete;
public GameObject GetGameObject() => gameObject;
// 停止音效的辅助方法
private void StopDrillSfxIfPlaying()
{