Files
2026-05-26 16:15:54 +08:00

119 lines
4.1 KiB
C#

using DG.Tweening;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Splines;
public class FishCome : MonoBehaviour
{
public Animator animator;
public SplineAnimate ssplineAnimate;
public Transform FishAnimationRoot;
GameObject splinesRoot;
FishComeSplines fishComeSplines;
float posY;
private void Awake()
{
ssplineAnimate.enabled = false;
}
public async void LoadSplines(string splinesRootName)
{
splinesRoot = await Addressables.InstantiateAsync(splinesRootName, transform.parent).Task;
splinesRoot.transform.localPosition = Vector3.up * posY;
fishComeSplines = splinesRoot.GetComponent<FishComeSplines>();
}
public void SetPosY(float y)
{
posY = y;
var pos = transform.position;
transform.position = new Vector3(pos.x, y, pos.z);
splinesRoot.transform.position = new Vector3(0, y, 0);
}
public void FishComeMove(float speed)
{
if (fishComeSplines != null)
{
SplineContainer[] splineContainers = fishComeSplines.splineContainers;
if (splineContainers == null || splineContainers.Length < 1)
{
return;
}
ssplineAnimate.MaxSpeed = speed;
ssplineAnimate.Container = splineContainers[Random.Range(0, splineContainers.Length)];
ssplineAnimate.enabled = true;
ssplineAnimate.Restart(true);
ssplineAnimate.Play();
}
}
public float UIEatMove(float speed, SplineContainer splineContainer)
{
ssplineAnimate.MaxSpeed = speed;
//SplineContainer splineContainer = UIEatSplines[Random.Range(0, UIEatSplines.Length)];
ssplineAnimate.Container = splineContainer;
ssplineAnimate.enabled = true;
ssplineAnimate.Restart(false);
ssplineAnimate.Play();
return splineContainer.CalculateLength() / speed;
}
public async Task FishEatMove(float speed)
{
if (fishComeSplines == null)
{
return;
}
SplineContainer[] UIEatSplines = fishComeSplines.UIEatSplines;
if (UIEatSplines == null || UIEatSplines.Length < 1)
{
return;
}
SplineContainer splineContainer;
if (ssplineAnimate.IsPlaying)
{
FishComeStop();
Vector3 position = transform.position;
splineContainer = UIEatSplines[0];
Spline spline = splineContainer[0];
Vector3 initialPosition = spline[0].Position;
float distance = Vector3.Distance(initialPosition, position);
SplineContainer splineContainer1;
Spline spline1;
Vector3 initialPosition1;
float distance1;
for (int i = 1; i < UIEatSplines.Length; i++)
{
splineContainer1 = UIEatSplines[i];
spline1 = splineContainer1[0];
initialPosition1 = spline1[0].Position;
distance1 = Vector3.Distance(initialPosition1, position);
if (distance1 < distance)
{
distance = distance1;
splineContainer = splineContainer1;
initialPosition = initialPosition1;
}
}
initialPosition += fishComeSplines.transform.position;
Quaternion rotation11 = Quaternion.LookRotation(transform.position - initialPosition);
float time11 = distance / speed;
transform.DORotateQuaternion(rotation11, 0.1f);
transform.DOLocalMove(initialPosition, time11);
await new WaitForSeconds(time11);
}
else
{
splineContainer = UIEatSplines[Random.Range(0, UIEatSplines.Length)];
}
float time = UIEatMove(speed, splineContainer);
if (time > 4)
{
time = 4;
}
await new WaitForSeconds(time);
}
public void FishComeStop()
{
animator.Play("Idle01");
ssplineAnimate.enabled = false;
}
}