using DG.Tweening; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace game { public class ToolForFollowerAndNormalPosition : OperatingToolsBase { [Tooltip("工具距离操作点位置, 吸尘器/水枪等 本身到吸嘴距离")] [SerializeField] private float m_DistanceToMouth = 0.1f; [Tooltip("工具操作点距离操作区距离, 吸尘器/水枪等 吸嘴离地距离")] [SerializeField] private float m_DistanceFromMouthToGround = 0.4f; [Tooltip("作用距离/覆盖范围")] [SerializeField] private float m_RangeCoverage = 0.8f; [Tooltip("工具移动速度")] [SerializeField] private float m_ToolSpeed = 10f; [Tooltip("工具移动耗时调整,按比例计算,正值为增加,负值为减少")] [SerializeField] private float m_ToolConsumedTimeAdjustedRatio = 0f; public float DistanceFromMouthToGround { get => m_DistanceFromMouthToGround; } public float RangeCoverage { get => m_RangeCoverage; } private Vector3 m_OperatingPoint = Vector3.zero; public Vector3 OperatingPoint { get => m_OperatingPoint; } public void Follow(Vector3 position, Vector3 normal) { Vector3 targetPosition = position + normal * (m_DistanceToMouth + m_DistanceFromMouthToGround); float distance = Vector3.Distance(targetPosition, this.transform.position); float time = distance / m_ToolSpeed; time += time * m_ToolConsumedTimeAdjustedRatio; m_OperatingPoint = position + normal * m_DistanceFromMouthToGround; this.transform.DOKill(); this.transform.DOMove(targetPosition, time).SetEase(Ease.OutQuad); this.transform.DORotateQuaternion(Quaternion.LookRotation(-normal), time).SetEase(Ease.Linear); } #region Transform变换相关 public override void MoveToExhibition() { // 停止播放操作动画 StopPlayOperationAnimation(); // 停止播放准备动画 StopPlayPrepareAnimation(); } #endregion } }