当前位置:网站首页>【Unity入门计划】用双血条方法控制伤害区域减血速度
【Unity入门计划】用双血条方法控制伤害区域减血速度
2022-08-08 14:59:00 【flashinggg】
目录
学习的教程
【unity2021入门教程】69-2D游戏开发教程系列-03-RubyAdventure2DRpg官方教程-17-设置掉血区域_哔哩哔哩_bilibili
1 伤害区域减伤太快
跟之前的一样,这篇博客依旧是基于B站这个入门教程来写的。起因也很简单,在跟着教程学习设置掉血区域时遇到了如下问题:
如果仅仅使用OnTriggerStay进行减伤,由于这个调用是逐帧的,会造成减伤区域减伤速度太快的问题。
跟着教程的方法修改了玩家对象的Rigidbody2D组件中的Sleeping Mode,也达不到延缓的效果,也没办法控制减血速度。
2 双血条方法
所谓的双血条,其实就是添加真、假两个减血变量。
- 真血条用来给当前血量减伤
- 假血条用来控制随着时间的减伤量
基于教程给的原始代码,我新定义了一些参数:
- damageSpeed——public,用户可以控制减血速度
- TruedamageHealth——与Speed相乘,成为真血条减血量
- True&round——用以判断是否调用ChangeHealth()
具体可以看以下给减伤区域挂的触发器脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DamageZone : MonoBehaviour
{
public int damageHealth = -1;
public int damageSpeed;
private double TruedamageHealth = -0.02;
private double True = 0;
int round=1;
private void OnTriggerStay2D(Collider2D other)
{
RubyController rubyController=other.GetComponent<RubyController>();
if(rubyController != null)
{
True += damageSpeed*TruedamageHealth;
if (round==1||True < round * damageHealth)
{
round++;
rubyController.ChangeHealth(damageHealth);
}
}
}
}
其中的ChangeHealth()方法,是在给玩家对象挂的脚本中定义的一个方法:
//更改生命值
//amount是游戏中加血/减血的操作
public void ChangeHealth(int amount)
{
//限制当前生命值范围为[0,maxHealth]
currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth);
//输出
if(currentHealth < maxHealth)
Debug.Log("当前生命值为:" + currentHealth + "/" + maxHealth);
}
其中,round==1情况单独提出来作为其中一个或条件,是因为考虑到游戏本身的情况。当玩家走入Trigger的瞬间当下是会立马减血的,Stay在减伤范围中再缓慢减血:
进入减伤触发器范围 -> 立马减伤 -> 持续呆在减伤触发器范围 -> 持续掉血
Speed控制减伤速度
最终效果
玩家进入了伤害区域
伤害情况
当然,以上只是一个超级简单的一种方法,在之后的学习一定还会涉及到比如:GUI血条体现血量等,到时候会再进行补充。
边栏推荐
- 幂等性~~
- PHP —— 用 ThinkPHP5.0 实现微信小程序登陆
- 面试官:Redis 大 key 要如何处理?
- 循环神经网络RNN入门介绍
- JS-BOM-for, if (string to case)
- 儿子满墙奖状却没考上重点高中,妈妈愤怒撕下痛哭:不读出去打工
- Ubuntu下使用sudo dpkg --configure -a后数据库出现问题
- Make mistakes small yards artisan study room 】 【 the ladder of the progress of children
- LeetCode Daily Question 2022/8/1-2022/8/7
- 依赖传递和依赖调解
猜你喜欢
随机推荐
俄驻美大使馆:扎波罗热核电站遭炮击威胁欧洲核安全
JS-BOM-阶乘计算
把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统
HMS Core分析服务智能运营6.5.1版本上线
RecyclerView 实现拖拽、滑动删除
一万块钱能做一手尿素期货吗?尿素期货怎么做才安全?
(1)通过FlinkSQL将数据写入mysql demo
Mysql的分布式事务原理理解
H5不同屏幕大小显示不同的文字大小图片大小
P8352-[SDOI/SXOI2022]小N的独立集【dp套dp】
掌握财富密码,运维需要了解这些技术
HMS Core Analysis Service Intelligent Operation Version 6.5.1 Launched
vijos1212 Way Selection
PAT甲级:1056 Mice and Rice
shell三剑客-----sed命令
[Small Coder Study Room] [NOI Online 2020-2 Beginner Group] Finished: Abominable precision will make you burnt
Talking about the underlying data structure of Redis
手把手教你设计一个全局异常处理器
SAP系统为什么要迁移上云?
kali换源详细步骤