『功能项目』战士职业平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

相关推荐
William_cl8 小时前
C# MVC 修复DataTable时间排序以及中英文系统的时间筛选问题
开发语言·c#·mvc
c#上位机8 小时前
wpf之RelativeSource用法总结
c#·wpf
Dm_dotnet9 小时前
WPF应用最小化到系统托盘
c#
*长铗归来*11 小时前
ASP.NET Core Web API 中控制器操作的返回类型及Swagger
后端·c#·asp.net·.netcore
R-G-B13 小时前
【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件
开发语言·c#·c# 多个 .cs文件项目
懒人Ethan1 天前
解决一个C# 在Framework 4.5反序列化的问题
java·前端·c#
mysolisoft1 天前
Avalonia+ReactiveUI实现记录自动更新
c#·avalonia·reactiveui·sourcegenerator
心疼你的一切1 天前
使用Unity引擎开发Rokid主机应用的模型交互操作
游戏·ui·unity·c#·游戏引擎·交互
韩立学长1 天前
【开题答辩实录分享】以《C#大型超市商品上架调配管理系统的设计与实现》为例进行答辩实录分享
开发语言·c#
玩泥巴的1 天前
.NET驾驭Word之力:数据驱动文档 - 邮件合并与自定义数据填充完全指南
c#·word·.net·com互操作