• unity制作简单血条


    学习Unity已经10天了,也没发现有什么长进,真的急。昨天仿着官方Demo做了个射击游戏轮廓,其中需要给每个怪做一个血条。

    搜了一些,挺复杂的,用NGUI或者UGUI,外加很长的代码。。。不过还是找到了一篇简单的。

    但是那一篇把所有的东西都放一起了,不太好,我在这整理分离一下。

    背景:

    官方Demo恶魔射手。其中每个怪都有一个EnemyHealth脚本,该脚本主要有怪物的血量等,然后有个TakeDamage()函数来计算伤害后的血量。

    开始:

    1、制作图片:

    PS一张细长的红色图片作为血量;

    2、制作一个材质球,起名为“XuetiaoMaterial”,单击这个材质球,在Inspector面板中把红色图片加进来,就成了红色的材质球了。

     Inspector面板的Shader下选择Unlit/Transparent

    3、创建一个Cube,放到你需要加血条的怪上,Cube作为怪的子物体。拖动成纸片子的形状,然后拖动到合适的位置即可。

    4、单击这个Cube,你愿意改名就改名。把2中的材质球加到这个Cube中来,它就变成红色的了。把Cube的Collider、俩Shdow勾选掉。毕竟血条不用阴影也不用碰撞嘛。

    5、在你的控制血量的脚本里加点东西,我是在EnemyHealth.cs中加的,如下:

      血条贴图是一个新货,代码计算后会重新赋给Cube

     public Texture2D bloodBarRed;  // 血条贴图
        public Transform bloodBar; // 代表血条的CUBE

    另外还有:

        void Start()
        {
            bloodBar = transform.FindChild("BloodBarCube"); //获得血条物体
           
           
            bloodBarRed = new Texture2D(512, 32); // 新建一个贴图,用以变化后赋给Cube
            bloodBarRed.wrapMode = TextureWrapMode.Clamp; // 拉伸该图
        }

    还有,要使血条时刻正对摄像机的:

     void Update ()
        {
            bloodBar.LookAt(Camera.main.transform.position);  // 朝向摄像机
        }

    下面是加入的一个更新血条的函数:

        public void UpDateBloodBar()
        {
            float cunrrentRed = currentHealth * bloodBarRed.width / startingHealth;  //直接除,会因为两个整型得到0,所以先乘以后除
            for (var x = 0; x < bloodBarRed.width; x++)
            { // 对每个坐标点
                for (var y = 0; y < bloodBarRed.height; y++)
                {//循环执行y轴从0开始,y轴小于血条的宽的话执行下面,否则+
                    if (x < cunrrentRed) 
                        bloodBarRed.SetPixel(x, y, Color.red);   //x小于血条长度的范围涂成红色,
                    else 
                        bloodBarRed.SetPixel(x, y, Color.gray);         //其他部位涂成黑色
                }
            }
            bloodBarRed.Apply(); // 应用该图
            bloodBar.gameObject.renderer.material.mainTexture = bloodBarRed; // 将修改后的贴图给血条Cube
           
        }

    其中 currentHealth是我EnemyHealth类中的成员变量,startingHealth也是,代表了总血量。

    然后你可以在血量改变的函数中调用此函数。从而更新血条。如果有必要,你也可以将当前血量作为形参传入。

    6、将脚本拖入对应的对象(需要血条的怪)中,单击该怪,在Inspector面板中,找到该脚本,把红色图片拖入bloodBarRed中,把血条Cube(该怪的子物体)拖入bloodBar即可。

    运行就OK了。

    致谢:

    http://www.manew.com/forum.php?mod=viewthread&tid=33694&page=1

  • 相关阅读:
    豆瓣评论9.5的《Effective Python》,帮你解决80%难题!
    编程科普|你知道的关于 Python 的那些知识,可能全错了!
    为什么建议使用 Linux?从“白嫖”到精通,只需要这几步!
    交易如钓鱼
    知识图谱学习一:啥是知识图谱,用来干啥,怎么做?
    openpyxl 学习笔记
    使用A卡(AMD Radeon RX470)进行机器学习的失败经历
    activemq 控制台报错 java.lang.SecurityException: User name [system] or password is invalid.
    activemq 安装配置二
    activemq 安装配置一
  • 原文地址:https://www.cnblogs.com/tntboom/p/4773133.html
Copyright © 2020-2023  润新知