zoukankan      html  css  js  c++  java
  • 简单3d RPG游戏 之 002 生命条(二)

    在游戏中,游戏人物的血条可能会因为受伤或吃血瓶而长度变化,所以需要将血条的长度单独提出来作为一个变量,方便直接修改数值。

    public float healthBarLength;

    改变生命值函数如下:

    void AddjustCurrentHealth(int adj){
            curHealth += adj;
            if (curHealth < 0) {
                curHealth = 0;
            } else if (curHealth > maxHealth) {
                curHealth = maxHealth;            
            }
    
            if(maxHealth < 1){
                maxHealth = 1;
            }
            healthBarLength = (Screen.width / 2 * (curHealth / maxHealth));
        }

    在Update中调用

        void Update () {
            AddjustCurrentHealth (0);
        }

    运行后查看效果,当修改CurHealth的值为-1的时候,它自动变为0。

    但是当修改CurHealth为50的时候,发现血条长度始终为0,后来发现原来curHealth / maxHealth由于都是整数,所以结果是零,应该在maxHealth前面加float。

    healthBarLength = (Screen.width / 2 * (curHealth / (float)maxHealth));

    这样运行再修改CurHealth值,对应的长度就正确了。
    完整PlayerHealth.cs

    public class PlayerHealth : MonoBehaviour {
        public int maxHealth = 100;
        public int curHealth = 100;
        public float healthBarLength;
        // Use this for initialization
        void Start () {
            
        }
        
        // Update is called once per frame
        void Update () {
            AddjustCurrentHealth (0);
        }
    
        void OnGUI(){
            GUI.Box (new Rect(10,10,healthBarLength,20),curHealth + "/" + maxHealth);
        }
    
        void AddjustCurrentHealth(int adj){
            curHealth += adj;
            if (curHealth < 0) {
                curHealth = 0;
            } else if (curHealth > maxHealth) {
                curHealth = maxHealth;            
            }
    
            if(maxHealth < 1){
                maxHealth = 1;
            }
    
            healthBarLength = (Screen.width / 2 * (curHealth / (float)maxHealth));
        }
    }
    View Code

    下面创建敌人的血条脚本:

    在Unity编辑器的Assets/Scripts文件夹内,选中PlayerHealth,按键盘ctrl+d,复制一份,重命名为EnemyHealth。

    双击打开Enemy,修改类名为EnemyHealth,然后将血条位置离top设为40,拖动它到Hierarchy里的cube上。

    GUI.Box (new Rect(10,40,healthBarLength,20),curHealth + "/" + maxHealth);


    运行如图

  • 相关阅读:
    dialog draggable
    sql删除重复数据
    winform截取屏幕并发送邮件
    TreeView 一些总结
    省市互连
    查找 ASP.NET 进程的名称
    不错的sql面试题
    在javascript中获取用户控件里的子控件的值;另打开新窗口传值回原窗口
    根据日期显示星期几
    不想让别人使用电脑某个软件的小技巧
  • 原文地址:https://www.cnblogs.com/rentianlong/p/3629776.html
Copyright © 2011-2022 走看看