154 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using DG.Tweening;
 | |
| using MyFrameworkPure;
 | |
| using UnityEngine;
 | |
| using UnityEngine.Events;
 | |
| using UnityEngine.SceneManagement;
 | |
| using UnityEngine.UI;
 | |
| 
 | |
| 
 | |
| namespace CommonScript
 | |
| {
 | |
|     public class KXScanOperator : MonoBehaviour
 | |
|     {
 | |
|         //public UnityAction onResetScanTarget;
 | |
| 
 | |
| 
 | |
|         //The speed of the "attach" process
 | |
| 
 | |
| 
 | |
|         //Controller in use
 | |
| 
 | |
| 
 | |
|         //The focus of the object's "attach" movement
 | |
| 
 | |
| 
 | |
|         //[SerializeField]
 | |
|         //private GameObject[] scanTargets;
 | |
| 
 | |
|         //[SerializeField]
 | |
|         //private ToggleGroup toggleGroup;
 | |
| 
 | |
|         //[SerializeField]
 | |
|         //private Button resetBtn;
 | |
| 
 | |
|         [SerializeField]
 | |
|         private Bounds areaBounds;
 | |
| 
 | |
|         private bool stayInScanPoint;
 | |
| 
 | |
|         private Camera playercamera;
 | |
|         
 | |
|         private GameObject curScanTarget;
 | |
| 
 | |
|         private GestureTool gestureTool;
 | |
|         public float m_s = 1f;
 | |
|         public float m_r = 1f;
 | |
|         private const float MoveSpeed = 0.01f;
 | |
| 
 | |
|         private const float RotSpeed = 1f;
 | |
|         // Start is called before the first frame update
 | |
|         void Start()
 | |
|         {
 | |
| 
 | |
|             curScanTarget = gameObject;
 | |
|             gestureTool = GestureTool.Instance;
 | |
|             gestureTool.onHorizontalMove.AddListener(HandleHorizontalGesture);
 | |
|             gestureTool.onVerticalMove.AddListener(HandleVerticalGesture);
 | |
|         }
 | |
| 
 | |
|         void HandleHorizontalGesture(float delta)
 | |
|         {
 | |
|            
 | |
|           
 | |
|                     curScanTarget.transform.Rotate(Vector3.down * delta * RotSpeed*m_r, Space.World);
 | |
|               
 | |
|         }
 | |
| 
 | |
|         void HandleVerticalGesture(float delta)
 | |
|         {
 | |
|            
 | |
|         }
 | |
| 
 | |
|         void Update()
 | |
|         {
 | |
|             //RaycastHit hitInfo = new RaycastHit();
 | |
| 
 | |
| 
 | |
| 
 | |
|            // Ray ray = playercamera.ScreenPointToRay(Input.mousePosition);
 | |
|         //    bool isClickNewTarget = Input.GetMouseButtonDown(0) && Physics.Raycast(ray, out hitInfo)
 | |
|                                                                 
 | |
| 
 | |
|             //if (isClickNewTarget)
 | |
|             //{
 | |
|             //    if (curScanTarget == hitInfo.transform.gameObject)
 | |
|             //        return;
 | |
|             //    if (curScanTarget)
 | |
|             //        ResetCurScanTarget();
 | |
| 
 | |
|             //    curScanTarget = hitInfo.transform.gameObject;
 | |
|             //    GameObject targetPoint = GameObject.Find($"初始位置/观察/{curScanTarget.name}");
 | |
|             //    if (!targetPoint)
 | |
|             //              {
 | |
|             //        targetPoint = GameObject.Find("初始位置/观察/默认");
 | |
|             //    }
 | |
|             //    Debug.Assert(targetPoint != null, "场景中不存在默认观察点!");
 | |
|             //    DOTween.Kill(curScanTarget.transform);
 | |
|             //    curScanTarget.transform.DOMove(targetPoint.transform.position, 1);
 | |
|             //}
 | |
| 
 | |
|             //ClampScanTargetPos();
 | |
| 
 | |
|            // OperatorToggleSwitcher.Switch(toggleGroup);
 | |
|         }
 | |
| 
 | |
|         void OnDisable()
 | |
|         {
 | |
|             if(curScanTarget)
 | |
|                 DOTween.Kill(curScanTarget);
 | |
|             curScanTarget = null;
 | |
|         }
 | |
| 
 | |
|         void OnDestroy()
 | |
|         {
 | |
|             if (gestureTool)
 | |
|             {
 | |
|                 gestureTool.onHorizontalMove.RemoveListener(HandleHorizontalGesture);
 | |
|                 gestureTool.onVerticalMove.RemoveListener(HandleVerticalGesture);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         //public void ResetCurScanTarget()
 | |
|         //{
 | |
|         //    DOTween.Kill(curScanTarget.transform);
 | |
|         //    Transform point = GameObject.Find($"初始位置/材料/{curScanTarget.name}")?.transform;
 | |
|         //    Debug.Assert(point != null, $"没有找到路径:初始位置/材料/{curScanTarget.name}");
 | |
|         //    curScanTarget.transform.DOMove(point.position, 1);
 | |
|         //    curScanTarget.transform.DORotate(point.eulerAngles, 1);
 | |
|         //    curScanTarget = null;
 | |
|         //}
 | |
| 
 | |
|         //void ClampScanTargetPos()
 | |
|         ////{
 | |
|         ////    if(!curScanTarget)
 | |
|         ////        return;
 | |
|         ////    if(areaBounds.extents == Vector3.zero)
 | |
|         ////        return;
 | |
|         ////    if (!areaBounds.Contains(curScanTarget.transform.position))
 | |
|         ////    {
 | |
|         ////        curScanTarget.transform.position = areaBounds.ClosestPoint(curScanTarget.transform.position);
 | |
|         ////    }
 | |
|         //}
 | |
| 
 | |
|         void OnDrawGizmosSelected()
 | |
|         {
 | |
|             Gizmos.color = Color.yellow;
 | |
|             Gizmos.DrawWireCube(areaBounds.center,areaBounds.size);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 |