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

原文地址:https://www.cnblogs.com/tntboom/p/4773133.html