zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    sql server 2000系统表sysproperties在SQL 2008中无效的问题
    查询字段的默认值
    OBJECT_ID()的使用方法
    查询指定表的数据类型和长度
    SQL SERVER 比较两个数据库中表和字段的差异
    [再寄小读者之数学篇](2014-06-26 Logarithmical Sobolev inequality using BMO space)
    [再寄小读者之数学篇](2014-06-26 Besov space estimates)
    [再寄小读者之数学篇](2014-06-23 Bernstein's inequality)
    [再寄小读者之数学篇](2014-06-26 绝对值不等式)
    [再寄小读者之数学篇](2014-06-23 Gronwall-type inequality)
  • 原文地址:https://www.cnblogs.com/tntboom/p/4773133.html
Copyright © 2011-2022 走看看