『功能项目』战士职业平A怪物掉血【44】

我们打开上一篇43事件中心的项目,

本章要做的事情是给主角增加一个xxxCtrl.cs脚本,再创建一个xxxOpt.cs调用xxxCtrl.cs机制层利用事件中心再写一个主角战士平A对怪物的伤害

首先创建脚本:PlayerCtrl.cs

cs 复制代码
using UnityEngine;
public class PlayerCtrl : MonoBehaviour{
    BossCtrl bossCtrl;
    public void Start() {
        bossCtrl = FindObjectOfType<BossCtrl>();
    }
    public void SetPlayerHpValueChange(float attackValue){
        bossCtrl.currentHp -= (int)((attackValue - 
            bossCtrl.defineValue) * (1 + Random.Range(-0.3f,0.3f)));
    }
}

将xxxCtrl.cs脚本增加到主角资源框架上

再创建脚本:PlayerOpt.cs

cs 复制代码
using UnityEngine;
public class PlayerOpt : MonoBehaviour{
    GameManager gm;
    PlayerRayClickNavigation player;
    #region 事件中心
    BossCtrl bossCtrl;
    PlayerCtrl playerCtrl;
    Vector3 monsterPos;
    Vector3 selfPos;
    #endregion
    public void Start(){
        gm = GameManager.Instance;
        player = gameObject.GetComponent<PlayerRayClickNavigation>();
        #region 事件中心
        bossCtrl = FindObjectOfType<BossCtrl>();
        playerCtrl = gameObject.AddComponent<PlayerCtrl>();
        EventCenter.Instance.AddEventListener<Vector3>("MonsterPositionChanged", OnMonsterPositionChanged);
        monsterPos = GameObject.FindWithTag("Monster").gameObject.transform.position;
        #endregion
    }
    void Update(){
        #region 事件中心
        selfPos = transform.position;
        Player01A(selfPos, monsterPos);
        #endregion
    }
    #region 事件中心
    void Player01A(Vector3 selfPos, Vector3 monsterPos){
        this.selfPos = selfPos;
        this.monsterPos = monsterPos;
        if (Vector3.Distance(selfPos, monsterPos) < 10){
            if (player.changeProfess == 2){
                if (Input.GetKeyDown(KeyCode.A)){
                    playerCtrl.SetPlayerHpValueChange(gm.infoSys.attackValue);
                }
            }
        }
    }
    void OnDestroy(){
        EventCenter.Instance.RemoveEventListener<Vector3>("MonsterPositionChanged", OnMonsterPositionChanged);
    }
    void OnMonsterPositionChanged(Vector3 newPosition){
        monsterPos = newPosition;
        Player01A(transform.position, monsterPos);
    }
    #endregion
}

再将该脚本增加到资源框架上

保存后运行项目

本章利用事件中心实现了主角战士平A(按A键)对怪物血量造成伤害的效果

接下来的文章内容:

1.战士职业的伤害型技能

2.窗口可拖拽脚本

3.点击名称寻找地点功能

4.隐藏怪物的生成

5.怪物I攻击范围内的主动攻击

6.掉落坐骑蛋的获取

7.异步传送转换场景

以及开放回合制、坐骑系统、宠物系统、背包系统、神炼系统、商城系统、Boss的目标跟随任务导航系统以及UI播放3D动画效果等等。

具体项目运行效果请关注water1024的b站视频项目演示《破碎纪元》

【Unity回合2.5D】破碎纪元_单机游戏热门视频 (bilibili.com)https://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0&vd_source=547091a95b03acfa8e8a9e46ef499cd6

相关推荐
专注VB编程开发20年3 小时前
c#语法和java相差多少
java·开发语言·microsoft·c#
SmoothSailingT4 小时前
C#——Lazy<T>懒加载机制
开发语言·单例模式·c#·懒加载
czhc11400756634 小时前
c# 1216
windows·microsoft·c#
幸存者letp4 小时前
为什么 max(words, key=len) 中需要传 key=len
服务器·开发语言·c#
SmoothSailingT5 小时前
C#——Interface(接口)
开发语言·c#·接口
Henry_Wu0015 小时前
go与c# 及nats和rabbitmq交互
golang·c#·rabbitmq·grpc·nats
烛阴6 小时前
深入 C# 字符串世界:基础语法、常用方法与高阶实战
前端·c#
用户4488466710606 小时前
.NET进阶——深入理解线程(2)Thread入门到精通
c#·.net
民乐团扒谱机7 小时前
【微实验】基于Python实现的实时键盘鼠标触控板拾取检测(VS2019,附完整代码)
python·c#·计算机外设
CreasyChan7 小时前
Unity中C#状态模式详解
unity·c#·状态模式