当前位置: 首页 > article >正文

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

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

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

首先创建脚本:PlayerCtrl.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

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)icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0&vd_source=547091a95b03acfa8e8a9e46ef499cd6


http://www.kler.cn/a/304771.html

相关文章:

  • ML 系列: 第 24 节 — 离散概率分布(泊松分布)
  • Chrome使用IE内核
  • 2024 年 8 个最佳 API 设计工具图文介绍
  • Java 网络编程(一)—— UDP数据报套接字编程
  • 使用@react-three/fiber,@mkkellogg/gaussian-splats-3d加载.splat,.ply,.ksplat文件
  • 实时渲染技术如何助力3D虚拟展厅?
  • SVM——支持向量机的学习入门
  • 【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况(完整版)
  • GPS/LBS/Wi-Fi定位,全安排!—合宙Air201资产定位模组LuatOS快速入门04
  • Leetcode 每日一题:Decode String
  • LVS-DR
  • JMeter测试工具的简单了解
  • java和kotlin 可以同时运行吗
  • 高性能微服务架构:Spring Boot 集成 gRPC 实现用户与订单服务即时交互
  • SpringBoot2:web开发常用功能实现及原理解析-整合EasyExcel实现Excel导入导出功能
  • 数据结构修炼——顺序表和链表的OJ题练习
  • C++ string类
  • k8s以及prometheus
  • 树莓派交叉编译
  • 【Web】URI和URL的介绍
  • STM32CubeIDE关于printf()串口输出重定向的问题
  • 『功能项目』项目优化 - 框架加载资源【41】
  • 在 macOS 上管理 Node版本
  • 计算机存储概念
  • python numpy pytorch tensorlfow list 转tenser float 32的方法,模型计算基本用的都是float32,需要转换
  • 常见本地大模型个人知识库工具部署、微调及对比选型