78 lines
2.0 KiB
C#
78 lines
2.0 KiB
C#
using System;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class MoveablePartGroup : MonoBehaviour
|
|
{
|
|
#region 动件索引
|
|
|
|
[Header("可动组件索引")] public EngineGear[] engineGears;
|
|
public GameObject piston;
|
|
|
|
#endregion
|
|
|
|
private EngineSystem _engineSystem;
|
|
|
|
private void Awake()
|
|
{
|
|
_engineSystem = transform.GetComponentInParent<EngineSystem>();
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
// 赋予初始速度
|
|
foreach (var gear in engineGears)
|
|
{
|
|
gear.Rotate(_engineSystem.engineConfig.gearSpeed);
|
|
}
|
|
_engineSystem.updateSpeedEvent.AddListener(OnSpeedUpdate);
|
|
|
|
}
|
|
|
|
private void OnSpeedUpdate(float originSpeed, float speedScale)
|
|
{
|
|
// 处理齿轮速度
|
|
foreach (var gear in engineGears)
|
|
{
|
|
gear.SetSpeedScale(speedScale);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public class EngineGear
|
|
{
|
|
public Transform gear;
|
|
public float speedRadio;
|
|
|
|
private Tween _rotateTween;
|
|
|
|
/// <summary>
|
|
/// 设置速度
|
|
/// </summary>
|
|
/// <param name="speedScale">基础速度</param>
|
|
public void SetSpeedScale(float speedScale)
|
|
{
|
|
if (_rotateTween != null)
|
|
{
|
|
_rotateTween.timeScale = speedScale;
|
|
}
|
|
// _rotateTween.timeScale = speedScale;
|
|
}
|
|
|
|
public void Rotate(float initSpeed)
|
|
{
|
|
var duration = 1 / Mathf.Abs(initSpeed * speedRadio);
|
|
|
|
var target = speedRadio >= 0 ? new Vector3(0, 0, 360) : new Vector3(0, 0, -360);
|
|
|
|
Debug.Log("Rotate");
|
|
_rotateTween = gear.DORotate(target, duration, RotateMode.LocalAxisAdd)
|
|
.SetEase(Ease.Linear)
|
|
.SetLoops(-1, LoopType.Incremental);
|
|
}
|
|
}
|
|
} |