67 lines
2.1 KiB
C#
67 lines
2.1 KiB
C#
![]() |
using UnityEngine;
|
||
|
using DG.Tweening;
|
||
|
public class ButterflyZibu : MonoBehaviour
|
||
|
{
|
||
|
public Animator animator;
|
||
|
private Vector3 jumpTarget;
|
||
|
private ButterflyTarget targetButterfly;
|
||
|
public float jumpPower = 1f;
|
||
|
public float jumpDuration = 0.6f;
|
||
|
public float landingDuration = 0.3f;
|
||
|
public void JumpTo(Vector3 target, ButterflyTarget butterfly)
|
||
|
{
|
||
|
targetButterfly = butterfly;
|
||
|
|
||
|
// Only move X and Y, keep Z constant
|
||
|
Vector3 targetPos = new Vector3(target.x, target.y, transform.position.z);
|
||
|
|
||
|
// Trigger visual jump animation
|
||
|
animator.SetTrigger("Jump");
|
||
|
|
||
|
// Jump to target position
|
||
|
transform.DOJump(targetPos+Vector3.down*0.75f, jumpPower, 1, jumpDuration)
|
||
|
.SetEase(Ease.OutQuad)
|
||
|
.OnComplete(() =>
|
||
|
{
|
||
|
// After reaching berry, notify catch
|
||
|
if (targetButterfly != null)
|
||
|
{
|
||
|
targetButterfly.OnCaught();
|
||
|
targetButterfly = null;
|
||
|
}
|
||
|
|
||
|
// Smooth landing to ground level (y = 0)
|
||
|
Vector3 landingPos = new Vector3(transform.position.x, 0f, transform.position.z);
|
||
|
transform.DOMoveY(landingPos.y, landingDuration)
|
||
|
.SetEase(Ease.InQuad);
|
||
|
});
|
||
|
}
|
||
|
private System.Collections.IEnumerator CallJumpPeakAfterDelay(float delay)
|
||
|
{
|
||
|
yield return new WaitForSeconds(delay);
|
||
|
OnJumpPeak(); // Call the same logic as animation event
|
||
|
}
|
||
|
private System.Collections.IEnumerator CallJumpEndAfterDelay(float delay)
|
||
|
{
|
||
|
yield return new WaitForSeconds(delay);
|
||
|
OnJumpEnd();
|
||
|
}
|
||
|
// Called from animation event at jump peak
|
||
|
public void OnJumpPeak()
|
||
|
{
|
||
|
transform.position = jumpTarget;
|
||
|
|
||
|
if (targetButterfly != null)
|
||
|
{
|
||
|
targetButterfly.OnCaught();
|
||
|
targetButterfly = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Optional: Reset to ground at end of animation
|
||
|
public void OnJumpEnd()
|
||
|
{
|
||
|
transform.position = new Vector3(transform.position.x, 0f, transform.position.z);
|
||
|
}
|
||
|
}
|