141 lines
4.6 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Sirenix.OdinInspector;
/// <summary>
任务:搭建基本的系统 1.替换动画源图片为攻击加长版 (*:新建动画“被击飞”并完成状态机逻辑 (*:删除旧动画源图片素材减小项目体积 *:修复攻击动画卡手问题 *:修复被击飞后朝向影响击飞结果的Bug 2.编写佛教小怪逻辑 (1.继承自NormalEnemy(*:与原备注不同,因为后期我发现用NormalEnemy更加合适更加简单) (2.与普通小怪一样,默认状态会巡逻 (3.当玩家进入感知范围,触发Seek (4.当玩家创到怪物,触发Atk (*:改变自身状态为ATK (*:关闭自身碰撞体,因为要贴在玩家身上 (*:将自身位置和玩家位置同步,但是需要一个附身offset二维向量,因为玩家的图片不在游戏物体的中心 (*:通知玩家,你被爱欲品附身了 (5.当怪物收到伤害,触发Seek (*:我决定后期根据具体地形完善爱欲品的Seek函数 (6.编写完全挣脱事件 (*:触发死亡事件 (*:死亡后给予随机方向的击飞和旋转 (*:添加public变量breakFreeCount,代表挣脱需要触发多少次方向变换 (*:添加public变量breakFreeCountLeft,代表现在还需要方向变换多少次才能挣脱 (7.添加挣脱行为事件,从player传来,减一点Left并且判断是否完全挣脱,若是则执行完全挣脱事件 3.整理脚本分层,添加摘要和注释 下班,明天写玩家挣脱逻辑和被抓逻辑 🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱
2021-12-03 01:23:07 +08:00
/// 敌人的基类,包含一些基本的功能和事件的虚函数
/// </summary>
public class Enemy : MonoBehaviour
{
// _____ _ _ _
// | __ \ | | | (_)
// | |__) | _| |__ | |_ ___
// | ___/ | | | '_ \| | |/ __|
// | | | |_| | |_) | | | (__
// |_| \__,_|_.__/|_|_|\___|
/// <summary>
/// 生命值上限
/// </summary>
[FoldoutGroup("属性")][Header("生命值上限")]
public float HP;
/// <summary>
/// 攻击力
/// </summary>
[FoldoutGroup("属性")][Header("攻击力")]
public float ATK;
/// <summary>
/// 速度
/// </summary>
[FoldoutGroup("属性")][Header("移动速度")]
public float speed;
/// <summary>
/// 打死后掉多少金币
/// </summary>
[FoldoutGroup("属性")][Header("掉落金币数")]
public int coin;
/// <summary>
/// 怪物拥有的几种状态
/// </summary>
public enum State{wander,seek,atk,dead};
/// <summary>
/// 此时怪物能否被攻击
/// </summary>
[FoldoutGroup("状态")][Header("当前是否能被攻击")][ReadOnly]
public bool canBeHit = true;
/// <summary>
/// 当前状态
/// </summary>
[EnumPaging][SerializeField][ReadOnly][Header("当前状态")][FoldoutGroup("状态")]
public State state;
// _____ _ _
// | __ \ (_) | |
// | |__) | __ ___ ____ _| |_ ___
// | ___/ '__| \ \ / / _` | __/ _ \
// | | | | | |\ V / (_| | || __/
// |_| |_| |_| \_/ \__,_|\__\___|
/// <summary>
/// 当前生命值
/// </summary>
[ReadOnly][SerializeField][ProgressBar(0,10,0.15f,0.47f,0.74f)][FoldoutGroup("状态")]
protected float HPLeft;
// ______ _
// | ____| | |
// | |____ _____ _ __ | |_
// | __\ \ / / _ \ '_ \| __|
// | |___\ V / __/ | | | |_
// |______\_/ \___|_| |_|\__|
/// <summary>
/// 当怪物死的时候Call这个函数
/// </summary>
protected virtual void OnDead(){}
/// <summary>
/// 当怪物触碰到玩家的时候Call这个
/// </summary>
protected virtual void OnTouchThePlayer(MyPlayer player){}
/// <summary>
/// 当怪物被打的时候触发
/// </summary>
/// <param name="hitMethod">攻击方式枚举类型具体看MyPlayer</param>
/// <param name="hitDir">受击方向,-1左1右</param>
public virtual void OnBeHit(MyPlayer.AtkMethod hitMethod,int hitDir){}
/// <summary>
/// 当怪物发现玩家的时候Call这个
/// </summary>
任务:搭建基本的系统 1.替换动画源图片为攻击加长版 (*:新建动画“被击飞”并完成状态机逻辑 (*:删除旧动画源图片素材减小项目体积 *:修复攻击动画卡手问题 *:修复被击飞后朝向影响击飞结果的Bug 2.编写佛教小怪逻辑 (1.继承自NormalEnemy(*:与原备注不同,因为后期我发现用NormalEnemy更加合适更加简单) (2.与普通小怪一样,默认状态会巡逻 (3.当玩家进入感知范围,触发Seek (4.当玩家创到怪物,触发Atk (*:改变自身状态为ATK (*:关闭自身碰撞体,因为要贴在玩家身上 (*:将自身位置和玩家位置同步,但是需要一个附身offset二维向量,因为玩家的图片不在游戏物体的中心 (*:通知玩家,你被爱欲品附身了 (5.当怪物收到伤害,触发Seek (*:我决定后期根据具体地形完善爱欲品的Seek函数 (6.编写完全挣脱事件 (*:触发死亡事件 (*:死亡后给予随机方向的击飞和旋转 (*:添加public变量breakFreeCount,代表挣脱需要触发多少次方向变换 (*:添加public变量breakFreeCountLeft,代表现在还需要方向变换多少次才能挣脱 (7.添加挣脱行为事件,从player传来,减一点Left并且判断是否完全挣脱,若是则执行完全挣脱事件 3.整理脚本分层,添加摘要和注释 下班,明天写玩家挣脱逻辑和被抓逻辑 🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱
2021-12-03 01:23:07 +08:00
protected virtual void OnFindThePlayer(Transform target){}
/// <summary>
/// 当怪物着地的时候触发一次
/// </summary>
public virtual void OnRetouchedTheGround(){}
// _ _ _
// | \ | | | |
// | \| | ___ _ __ _ __ ___ __ _| |
// | . ` |/ _ \| '__| '_ ` _ \ / _` | |
// | |\ | (_) | | | | | | | | (_| | |
// |_| \_|\___/|_| |_| |_| |_|\__,_|_|
/// <summary>
/// 看看死了没
/// </summary>
protected bool CheckDead(){return !(HPLeft > 0);}
// _____ _ _ _ _
// / ____| | | (_) (_)
// | | ___ | | |_ ___ _ ___ _ __
// | | / _ \| | | / __| |/ _ \| '_ \
// | |___| (_) | | | \__ \ | (_) | | | |
// \_____\___/|_|_|_|___/_|\___/|_| |_|
protected void OnCollisionEnter2D(Collision2D other)//当有物体碰上
{
if(other.collider.gameObject.TryGetComponent<MyPlayer>(out MyPlayer player))
{OnTouchThePlayer(player);}//如果创到的是玩家则Call事件
//如果被镰刀创到Call一下OnBeHit事件传入攻击方式和攻击来袭方向
else if(other.collider.gameObject.TryGetComponent<Sickle>(out Sickle sickle))
{OnBeHit(MyPlayer.AtkMethod.,
(transform.position.x -
sickle.transform.position.x > 0) ? -1 : 1);
Destroy(sickle.gameObject);}
else if(other.gameObject.tag == "地面")
{OnRetouchedTheGround();}
}
protected virtual void OnTriggerEnter2D(Collider2D other)
{
if(other.gameObject.TryGetComponent<MyPlayer>(out MyPlayer player))
任务:搭建基本的系统 1.替换动画源图片为攻击加长版 (*:新建动画“被击飞”并完成状态机逻辑 (*:删除旧动画源图片素材减小项目体积 *:修复攻击动画卡手问题 *:修复被击飞后朝向影响击飞结果的Bug 2.编写佛教小怪逻辑 (1.继承自NormalEnemy(*:与原备注不同,因为后期我发现用NormalEnemy更加合适更加简单) (2.与普通小怪一样,默认状态会巡逻 (3.当玩家进入感知范围,触发Seek (4.当玩家创到怪物,触发Atk (*:改变自身状态为ATK (*:关闭自身碰撞体,因为要贴在玩家身上 (*:将自身位置和玩家位置同步,但是需要一个附身offset二维向量,因为玩家的图片不在游戏物体的中心 (*:通知玩家,你被爱欲品附身了 (5.当怪物收到伤害,触发Seek (*:我决定后期根据具体地形完善爱欲品的Seek函数 (6.编写完全挣脱事件 (*:触发死亡事件 (*:死亡后给予随机方向的击飞和旋转 (*:添加public变量breakFreeCount,代表挣脱需要触发多少次方向变换 (*:添加public变量breakFreeCountLeft,代表现在还需要方向变换多少次才能挣脱 (7.添加挣脱行为事件,从player传来,减一点Left并且判断是否完全挣脱,若是则执行完全挣脱事件 3.整理脚本分层,添加摘要和注释 下班,明天写玩家挣脱逻辑和被抓逻辑 🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱
2021-12-03 01:23:07 +08:00
{OnFindThePlayer(other.transform);}//如果监视范围出现玩家则Call事件
}
}