101 lines
3.2 KiB
C#
101 lines
3.2 KiB
C#
![]() |
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using DG.Tweening;
|
||
|
using Sirenix.OdinInspector;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 以撒鬼魂类,控制以撒攻击时出现的鬼魂
|
||
|
/// </summary>
|
||
|
public class YiSaGoust : MonoBehaviour
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 冲撞将消耗的时间
|
||
|
/// </summary>
|
||
|
[Header("冲撞将消耗的时间")]
|
||
|
public float rushTime;
|
||
|
private YiSa owner;
|
||
|
/// <summary>
|
||
|
/// 落雷的游戏物体
|
||
|
/// </summary>
|
||
|
[Header("落雷的游戏物体")]
|
||
|
public GameObject lightning;
|
||
|
void Start(){
|
||
|
Init();
|
||
|
}
|
||
|
private void Init(){
|
||
|
//找到必要的组件和物体
|
||
|
owner = FindObjectOfType<YiSa>();
|
||
|
//如果落雷没有落雷组件,则添加一个
|
||
|
if(!lightning.TryGetComponent<Lightning>(out Lightning t))
|
||
|
lightning.AddComponent<Lightning>();
|
||
|
}
|
||
|
public void RushATK(Vector2 rushDir){
|
||
|
//创建并执行一段冲锋的动画
|
||
|
Tweener tweener = transform.DOMove(
|
||
|
transform.position + (Vector3)rushDir * 2,
|
||
|
rushTime
|
||
|
);
|
||
|
tweener.SetEase(Ease.InElastic);
|
||
|
//结束后,鬼魂逐渐消隐
|
||
|
TweenCallback action = () => {
|
||
|
GetComponent<SpriteRenderer>().DOFade(0,1);
|
||
|
//消隐结束后删除自己
|
||
|
Invoke("DestroySelf",1.1f);
|
||
|
//宣告攻击结束
|
||
|
owner.ATKEnd();
|
||
|
};
|
||
|
tweener.OnStepComplete(action);
|
||
|
}
|
||
|
|
||
|
|
||
|
public void LightningATK(){
|
||
|
//激活落雷
|
||
|
lightning.SetActive(true);
|
||
|
//将落雷的X位置改变到鬼魂的X
|
||
|
lightning.transform.position = new Vector3(
|
||
|
transform.position.x,
|
||
|
lightning.transform.position.y,
|
||
|
lightning.transform.position.z
|
||
|
);
|
||
|
//极短的时间后关闭落雷
|
||
|
Invoke("TurnOffLightning",0.2f);
|
||
|
//宣告攻击结束
|
||
|
owner.ATKEnd();
|
||
|
//淡出鬼魂
|
||
|
GetComponent<SpriteRenderer>().DOFade(0,1).OnStepComplete(()=>{
|
||
|
//淡出结束后,删除游戏物体
|
||
|
Destroy(gameObject);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
private void TurnOffLightning(){lightning.SetActive(false);}
|
||
|
private void DestroySelf(){Destroy(gameObject);}
|
||
|
|
||
|
void OnTriggerEnter2D(Collider2D other)
|
||
|
{
|
||
|
//如果创到玩家
|
||
|
if(other.gameObject.TryGetComponent<MyPlayer>(out MyPlayer player)){
|
||
|
//告诉玩家,你被攻击了
|
||
|
player.OnBeHit(owner.ATK,
|
||
|
((transform.position.x -
|
||
|
player.transform.position.x)
|
||
|
> 0) ? 1 : -1);//通过自身位置和玩家位置的比较来返回玩家本次的受击方向
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private class Lightning : MonoBehaviour
|
||
|
{
|
||
|
void OnTriggerStay2D(Collider2D other){
|
||
|
//如果创到玩家
|
||
|
if(other.gameObject.TryGetComponent<MyPlayer>(out MyPlayer player)){
|
||
|
//告诉玩家,你被攻击了
|
||
|
player.OnBeHit(FindObjectOfType<YiSa>().ATK,
|
||
|
((transform.position.x -
|
||
|
player.transform.position.x)
|
||
|
> 0) ? 1 : -1);//通过自身位置和玩家位置的比较来返回玩家本次的受击方向
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|