十三.角色生命等属性控制

角色生命等属性控制

1.添加UI界面

鼠标右键---->UI---->Canvas,重命名为UICanvas

请添加图片描述

EventSystem放置在UICanvas下

在UICanvas下添加Image,命名为Heart1,设置图片为UI_Heart

拷贝2个Heart1,共3个心形代表角色生命值

设置UI对齐方式为左上角

请添加图片描述

2.创建脚本UIController

绑定到UICanvas

创建单例instance,在在Awake中指向UIController

//单例
public static UIController sInstance;    

private void Awake()
{
    sInstance = this;
}

添加引用UI

using UnityEngine.UI;

创建3个Image,分别指向Heart1,Heart2,Heart3

创建3个Sprite,表示满血、半血和空血,指向三个sprite

public Image heart1, heart2, heart3;    //三个生命值状态标识
public Sprite heartFull, heartHalf, heartEmpty;    //生命值状态

请添加图片描述

新建函数UpdateHealthDisplay,更新生命值状态

public void UpdateHealthDisplay()
{
    switch(PlayerHealthController.sInstance.currentHealth)
    {
        case 6:
            heart1.sprite = heartFull;
            heart2.sprite = heartFull;
            heart3.sprite = heartFull;

            break;
        case 5:
            heart1.sprite = heartFull;
            heart2.sprite = heartFull;
            heart3.sprite = heartHalf;

            break;
        case 4:
            heart1.sprite = heartFull;
            heart2.sprite = heartFull;
            heart3.sprite = heartEmpty;

            break;
        case 3:
            heart1.sprite = heartFull;
            heart2.sprite = heartHalf;
            heart3.sprite = heartEmpty;

            break;
        case 2:
            heart1.sprite = heartFull;
            heart2.sprite = heartEmpty;
            heart3.sprite = heartEmpty;

            break;
        case 1:
            heart1.sprite = heartHalf;
            heart2.sprite = heartEmpty;
            heart3.sprite = heartEmpty;

            break;
        case 0:
            heart1.sprite = heartEmpty;
            heart2.sprite = heartEmpty;
            heart3.sprite = heartEmpty;

            break;
        default:
            heart1.sprite = heartEmpty;
            heart2.sprite = heartEmpty;
            heart3.sprite = heartEmpty;

            break;
    }
}

在PlayerHealthController中,player绑定中maxHealth改为6,overrides---->Apply All

DealDamage函数内同步生命值状态显示

public void DealDamage()
{
    currentHealth --;

    if(currentHealth <= 0)
    {
        currentHealth = 0;
        //生命值耗尽,设置角色隐藏
        gameObject.SetActive(false);
    }

    //同步生命值状态显示
    UIController.sInstance.UpdateHealthDisplay();
}

3.设置受到伤害后一段时间无敌

添加无敌状态的一些参数

//防止连续受到伤害,设置受到伤害后,一段时间无敌状态
public float invincibleLength;  //无敌时间
private float invincibleCounter;    //无敌计数器

//设置无敌状态时角色的显示变化
private SpriteRenderer theSR;

//Start()中初始化
theSR = GetComponent<SpriteRenderer>();

设置invincibleLength为1,在Update中更新invincibleCounter

void Update()
{
    if (invincibleCounter > 0)
    {
        invincibleCounter -= Time.deltaTime;

        if(invincibleCounter <= 0)
        {
            theSR.color = new Color(theSR.color.r, theSR.color.g, theSR.color.b, 1.0f);
        }
    }
}

被攻击时,也同步判断和设置

public void DealDamage()
{
    if (invincibleCounter <= 0)
    {
        currentHealth--;

        if (currentHealth <= 0)
        {
            currentHealth = 0;
            //生命值耗尽,设置角色隐藏
            gameObject.SetActive(false);
        }
        else
        {
            invincibleCounter = invincibleLength;
            theSR.color = new Color(theSR.color.r, theSR.color.g, theSR.color.b, .5f);
        }

        //同步生命值状态显示
        UIController.sInstance.UpdateHealthDisplay();
    }
}

4.受伤后状态

在PlayerController中添加参数

//受伤状态
public float knockBackLength;   //推动时间长
public float knockBackForce;    //推动力量
private float knockBackCounter; //推动计数器

设置初始值

请添加图片描述

在Update中添加判断

void Update()
{
    if (knockBackCounter <= 0)
    {
        //设置速度 /*GetAxisRaw*/
        theRB.velocity = new Vector2(moveSpeed * Input.GetAxis("Horizontal"), theRB.velocity.y);

        //检测是否在地面       参数:圆形中心,圆形半径,筛选器(用于检查仅在指定层上的对象)
        isGrounded = Physics2D.OverlapCircle(groundCheckPoint.position, .2f, whatIsGround);

        if (isGrounded)
        {
            //在地面时,可以连跳为true
            canDoubleJump = true;
        }

        //跳跃
        if (Input.GetButtonDown("Jump"))
        {
            if (isGrounded)  //判断是否在地面
            {
                theRB.velocity = new Vector2(theRB.velocity.x, jumpForce);
            }
            else
            {
                if (canDoubleJump)
                {
                    //不在地面,连跳
                    theRB.velocity = new Vector2(theRB.velocity.x, jumpForce);
                    canDoubleJump = false;
                }
            }
        }

        //翻转
        if (theRB.velocity.x < 0)
        {
            theSR.flipX = true;
        }
        else if (theRB.velocity.x > 0)
        {
            theSR.flipX = false;
        }
    }
    else
    {
        knockBackCounter -= Time.deltaTime;
        if(!theSR.flipX)
        {
            theRB.velocity = new Vector2(-knockBackForce, theRB.velocity.y);
        }
        else
        {
            theRB.velocity = new Vector2(knockBackForce, theRB.velocity.y);
        }
    }

    //设置动画中设置的moveSpeed,isGrounded的值
    anim.SetFloat("moveSpeed", Mathf.Abs(theRB.velocity.x));
    anim.SetBool("isGrounded", isGrounded);
}

添加KnockBack()函数,设置受伤后推动值

public void KnockBack()
{
	  knockBackCounter = knockBackLength;
    theRB.velocity = new Vector2(0, knockBackForce);
}

在PlayerHealthController中,DealDamage()函数判断当前生命值大于0时,添加推动状态(else下)

//角色受伤后推动状态
PlayerController.sInstance.KnockBack();

5.受伤动画

添加受伤动画

请添加图片描述

交叉设置动画帧

请添加图片描述

新建Trigger,命名为"hurt"

请添加图片描述

设置连接动画

其他状态到受伤状态

请添加图片描述

受伤状态到正常状态

请添加图片描述

PlayerController中,KnockBack()函数里面,添加受伤触发动画

//受伤动画
anim.SetTrigger("hurt");
<think> 嗯,用户这次明确询问《流星蝴蝶剑》.des文件中控制角色属性的具体参数。看来他正在尝试修改游戏属性,可能是个喜欢DIY的游戏玩家,或者遇到了难度想通过修改降低挑战性。 回顾之前的对话,用户已经了解修改.des文件实现地图不死的方法,现在想深入掌握更多角色属性参数。这很合理——知道life参数后自然会想探索其他可调整项。 从技术角度看,.des文件作为游戏配置文件,确实包含大量可自定义参数。需要重点说明核心属性生命、攻击、防御等),同时补充轻功这种特色系统参数。参数名称可能因版本有差异,所以得提醒用户注意版本差异和备份。 用户似乎更关注实战属性而非外观类参数,所以优先整理:life(生命)、attack_power(攻击力)、defense(防御值)、move_speed(移动速度)、jump_power(跳跃力)等直接影响战斗的参数。轻功系统是《流星蝴蝶剑》特色,特别说明qg_energy(轻功值)和qg_consume(消耗速度)的关联性。 要强调数值格式的规范性,比如浮点数用0.0格式,避免用户输入错误导致失效。考虑到他修改过life参数,补充说明“infinite”仅适用于部分参数的细节会很有帮助。 最后用表格归纳能提升信息效率,但需注明“常见参数”避免版本差异引发的困惑。安全提示依然重要:必须再次强调修改前备份.des文件。用户显然在实验各种修改,备份能减少他重装游戏的风险。 相关问题延续DIY逻辑:工具推荐(问题1)对应进阶修改需求,防崩溃措施(问题2)解决实操风险,多人游戏限制(问题3)则是网络联机玩家的常见盲区。 </think>在《流星蝴蝶剑》的`.des`地图配置文件中,控制角色属性的关键参数主要集中在角色行为定义部分。以下是核心参数及其作用: ### 一、基础战斗属性 1. **生命控制** ```ini life = 100.0 // 初始生命值(浮点数) life_max = 200.0 // 生命上限[^1] ``` > 修改为 `life = 9999.0` 可实现伪"不死"效果 2. **攻击与防御** ```ini attack_power = 15.0 // 基础攻击力 defense = 5.0 // 物理防御系数 element_defense = 3.0 // 元素抗性[^2] ``` 3. **移动能力** ```ini move_speed = 6.0 // 地面移动速度(建议值6.0-10.0) jump_power = 12.0 // 跳跃高度(默认值12.0) dash_speed = 18.0 // 冲刺速度[^1] ``` ### 二、轻功系统参数 ```ini qg_energy = 100.0 // 轻功气槽最大值 qg_consume = 8.0 // 轻功每秒消耗值 qg_recover = 3.0 // 站立时恢复速度[^2] ``` ### 三、特殊状态参数 ```ini super_armor = 0 // 霸体状态(0关闭/1开启) invincible_time = 1.5 // 受击无敌时间(秒) stiff_time = 0.3 // 攻击硬直时间[^1] ``` ### 四、参数修改注意事项 1. **数值格式** 必须使用浮点数(如 `8.0` 而非整数 `8`) 2. **作用范围** 需区分 `[player]`(玩家角色)和 `[enemy]`(敌人)区块 3. **版本差异** | 游戏版本 | 配置文件路径 | |---------------|-----------------------------| | 单机版 | \Level\*.des | | 网络版 | \NetLevel\*.des | | MOD扩展版 | \Mods\*\Level\*.des | > **重要提示**:修改前需备份原文件!部分参数需配套修改(如提高 `attack_power` 后建议同步调整 `weapon_damage`) ### 五、完整参数表示例 ```ini [player] life = 500.0 life_max = 500.0 attack_power = 30.0 defense = 10.0 move_speed = 8.0 jump_power = 15.0 qg_energy = 200.0 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值