Files
MRCS/Assets/_MrCs/Scripts/Enemys/Airdrop.cs
2025-11-04 14:51:46 +08:00

99 lines
2.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using DragonLi.Core;
using Mirror;
using UnityEngine;
public class Airdrop : Agent
{
/// <summary>
/// 怪物类型
/// </summary>
#if UNITY_EDITOR
[UnityEngine.DisplayOnly]
#endif
[SyncVar]
public EnemyType type;
[Header("等级")]
#if UNITY_EDITOR
[UnityEngine.DisplayOnly]
#endif
[SyncVar]
public int lvl = 0;
[Header("速度")]
#if UNITY_EDITOR
[UnityEngine.DisplayOnly]
#endif
[SyncVar]
public float speed = 0;
public GameObject kongtou_explosion_prefab;
[SerializeField] private Vector3 startPosition; // 初始位置
[SerializeField] private Vector3 endPosition; // 下落位置
[SerializeField] private float duration = 5.0f; // 下落时间
/// <summary>
/// 落地需要隐藏的节点
/// </summary>
public GameObject[] hideNodes;
private Transform _transform;
[Server]
public virtual void OnSpawn(EnemyType type, int lvl)
{
base.OnSpawn();
_transform = transform;
this.type = type;
this.lvl = lvl;
EnemyInfo enemyInfo = GameManager.Ins.EnemyInfos[type][lvl];
speed = enemyInfo.Speed;
health = enemyInfo.Hp;
originHealth = enemyInfo.Hp;
startPosition = transform.position;
endPosition = new Vector3(transform.position.x, 0, transform.position.z);
Fall();
}
public void Fall()
{
//模拟降落伞运动
transform.DOJump(endPosition, 1.0f, 1, duration).SetEase(Ease.Linear)
.OnComplete(() =>
{
for (int i = 0; i < hideNodes.Length; i++)
{
hideNodes[i].SetActive(false);
}
CoroutineTaskManager.Instance.WaitSecondTodo(() =>
{
if (_transform != null)
{
Vector3 newEndPosition = endPosition + Vector3.down * 5.0f; // 示例:向下移动 10 个单位
_transform.DOJump(newEndPosition, 1.0f, 1, duration).SetEase(Ease.Linear)
.OnComplete(() =>
{
NetworkServer.Destroy(_transform.gameObject);
});
}
}, 2F);
});
}
public void CreatEexplosion()
{
GameObject explosion = Instantiate(kongtou_explosion_prefab);
NetworkServer.Spawn(explosion);
explosion.transform.position = transform.position;
CoroutineTaskManager.Instance.WaitSecondTodo(() =>
{
NetworkServer.Destroy(explosion);
}, 2F);
}
}