61 lines
2.2 KiB
C#
61 lines
2.2 KiB
C#
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
|
|
}
|
|
}
|