项目经验总结(3)

来源:互联网 发布:网络名字大全女孩 编辑:程序博客网 时间:2024/05/05 10:55
欢迎来到unity学习、unity培训
这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌


项目经验总结(3)


    前两天太累了,本来想写着,躺了会就第二天了。好了,废话不多说,今天就把血条和名字来写下来。

    1、血条

    首先是两张作为血条的图片,一条设置好想要的长度,放在下面,另一条要根据自己的总血量,然后分成那么多分,让Update实时的更新血条,然后通过OnGUI让你想要的长度除以最大血量,然后乘以现有血量,并且位置要和上一条一样,并且覆盖在上面,这样就可以是一个血条了。

    我的代码:

    //这是两个血条的图片
    public Texture2D blood_Red;
    public Texture2D blood_Black;

    void OnGUI() //血条的GUI显示
    {

        int blood_width = 172 * Player.HP / 20;  //这个是实时更新的血条长度

        //两个血条图片的GUI
        GUI.DrawTexture(new Rect(111f, 31.5f, 172, 17.7f), blood_Black); 
        GUI.DrawTexture(new Rect(111f, 31.5f, blood_width, 17.7f), blood_Red);

        GUI.color = Color.red;//用来设置下面在血条上的文字的颜色的
        GUI.skin.label.fontSize = 12;//用来设置下面在血条上的文字的大小的

        //血条上加文字,显示血,还可以获取任务的血量,然后让血量显示在上面
        GUI.Label(new Rect(114f, 31.5f, 100, 17.7f), "人血:" + Player.HP);
    }


    2、头顶名字

    这个应该比较常用,在游戏中好多都是要有名字的,这个为了好看当然是要加载人物的头顶上了。。。算了,废话我也不多说,来说一下具体的实现吧。就是通过将在应该在游戏里的3D坐标转换成2D坐标,获取x和z的坐标,然后加上y周的高度,就可以加载你想要的地方了,估计遮掩解释很难看懂,下面看看代码吧,基本是粘上就能用的代码

    我的代码:

    //首先是先声明需要的对象,这里因为要用到摄像机来寻找坐标,所以声明了摄像机
     private Camera camera; //主摄像机对象
    private string name = "NPC2"; //NPC名称
    private float npcHeight = 1.5f; //NPC模型高度

    void Start () {
        camera = Camera.main;  //通过start来寻找主摄像机
    }
    void OnGUI()
    {
        GUI.skin.label.fontSize = 20;  //这个是改变名字的大小的,因为GUI是一步一步执行的,所以每变化一次大小或颜色就要写一个

        Vector3 worldPosition = new Vector3(transform.position.x, transform.position.y + npcHeight, transform.position.z);
        Vector2 position = camera.WorldToScreenPoint(worldPosition);//根据NPC头顶的3D坐标换算成它在2D屏幕中的坐标

        position = new Vector2(position.x, Screen.height - position.y);//得到真实NPC头顶的2D坐标

        Vector2 nameSize = GUI.skin.label.CalcSize(new GUIContent(name));//计算NPC名称的宽高

        GUI.color = Color.green;//设置显示颜色为绿色

        //绘制NPC名称
        GUI.Label(new Rect(position.x - (nameSize.x / 2), position.y - nameSize.y - 20, nameSize.x, nameSize.y), name);

        GUI.color = Color.white;//最后还原颜色,防止下一次执行时前面的颜色有变化
    }

好了,老样子,碎叫去了,困死了,明天继续来
0 0
原创粉丝点击