刚好今天有朋友问我,比較典型的样例就是游戏里面人物的血条。

原理非常easy就是把3D点换算成2D的点。可是因为NGUI自身是3D所以我们须要先把NGUI下的点转成2D点。然后在把他转成3D的点。

听起来有点绕,不要紧我直接上代码。

对屏幕自适应不明确的看

p=852" rel="bookmark">NGUI研究之怎样自适应屏幕

眼下我一直都是用NGUI来做人物血条,可是2D血条都会有个限制。就是它不能和模型有遮挡关系。只是血条能够依据人物的位置调节。比方远一点的人物血条会小一些,近一点的人物血条会大一些。

最好让美术做FBX的时候直接内置一个GameObject 的点。由于模型有的高有的低,所以血条的位置高度是不一样的,假设美术内置的话能够让美术来调节模型头顶上的点,这样比較方便。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using
UnityEngine;
using System.Collections;
 
public class
NewBehaviourScript
: MonoBehaviour
{
 
  //角色
    public
Transform Cube;
    //角色的血条
    public
Transform UI;
 
  //默认血条缩与摄像机的距离
    private
float Fomat;
    //角色头顶的点, 最好让美术把这个点直接做在fbx模型里面。
    private
Transform Head;
 
    void
Start ()
    {
      //找到角色身上头顶的点
        Head
= Cube.Find("head");
        //计算下面默认血条的距离,也能够写个常量,就是标记一下
        Fomat  =
Vector3.Distance(Head.position,Camera.main.transform.position);
    }
 
    void
Update ()
    {
      //这里能够推断一下 假设位置没有变化就不要在赋值了
        float
newFomat =
Fomat /
Vector3.Distance(Head.position,Camera.main.transform.position);
        UI.position  =
WorldToUI(Head.position);
        //计算出血条的缩放比例
        UI.localScale
= Vector3.one *
newFomat;
 
    //測试代码。按下W S键前后移动角色
        if(Input.GetKey(KeyCode.W))
            Cube.Translate(Vector3.forward);
        if(Input.GetKey(KeyCode.S))
            Cube.Translate(Vector3.back);
    }
 
  //核心代码在这里把3D点换算成NGUI屏幕上的2D点。
    public
static Vector3
WorldToUI(Vector3
point)
    {
        Vector3 pt
= Camera.main.WorldToScreenPoint(point);
        //我发现有时候UICamera.currentCamera 有时候currentCamera会取错。取的时候注意一下啊。
        Vector3 ff
=     UICamera.currentCamera.ScreenToWorldPoint(pt);
        //UI的话Z轴 等于0
        ff.z
= 0;
        return
ff;
    }
}

再说一下,一般血条可能都是由多个UISprite组成。那么最好把这些Sprite都挂在同一个GameObject以下,这样仅仅须要修正父对象。所以子对象的缩放都会正确。控制角色移动近一点的截图。

控制角色移动远一点的截图,你会发现血条在屏幕上的比例是不会变化的。

NGUI研究之3D模型坐标转2D屏幕坐标-血条的更多相关文章

  1. unity3d设置3D模型显示在2D背景之前(多个相机分层显示)(转)

    解决步骤: 1.添加一个摄像机,命名为BackgroundCamera,然后在Layer添加一个background层.并且将plane拖放到改相机节点下. 然后将BackgroundCamera和P ...

  2. OpenGL编程(七)3D模型的深度(z轴)检测

    下图是我们要修改后的效果图: 一.深度检测 1.模型Z轴显示有问题: 上一次试验中,如果认真留意,会发现一个问题.当控制锥体在左右或上下旋转时,你会发现锥体看起来是在+-180度之间来回摆动,而不是3 ...

  3. Shader实例:NGUI制作网格样式血条

    效果: 思路: 1.算出正确的uv去采样过滤图,上一篇文章说的很明白了.Shader实例:NGUI图集中的UISprite正确使用Shader的方法 2.用当前血量占总血量的百分比来设置shader中 ...

  4. Flash Stage3D 在2D UI 界面上显示3D模型问题完美解决

    一直以来很多Stage3D开发者都在为3D模型在2DUI上显示的问题头疼.Stage3D一直是在 Stage2D下面.为了做到3D模型在2DUI上显示通常大家有几种实现方式,下面来说说这几种实现方式吧 ...

  5. 如何让NGUI的对象在3D模型之上

    假设场景中有两台摄像机, 一台是NGUI的摄像机, 另外一台是投影摄像机. 投影摄像机看的是3D模型, Depth比NGUI的摄像机要大, Clear Flags设置的是Depth only. 现在想 ...

  6. 从2D图片生成3D模型(3D-GAN)

    https://blog.csdn.net/u014365862/article/details/54783209 3D-GAN是使用生成对抗网络学习2D图像到3D模型的映射,生成网络负责生成3D模型 ...

  7. Unity NGUI和UGUI与模型、特效的层级关系

    目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...

  8. NGUI研究之开发项目的一些使用心得比較细节

     不知不觉使用NGI插件已经有一段时间了.感觉NGUI真的是眼下Unity3D中最好用的UI插件. 可是它也有一些不是BUG的BUG,这些问题可能会让新人摸不着头脑,那么这篇文章将总结一下这段时间 ...

  9. c# winform用sharpGL(OpenGl)解析读取3D模型obj

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11783026.html 自己写了个简单的类读取解析obj模型,使用导入类,然后new个对象,在 ...

随机推荐

  1. hdu 1277 AC自动机

    全文检索 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. Yii查看(输出)当前页面执行的sql语句

    在Yii框架下查看当前页面执行的所有sql语句的方法,主要是通过配置相关文件来达到调试sql的目的,具体方法如下: (1)修改 index.php 开启调试模式 在 index.php 文件内增加如下 ...

  3. HTTP/1.1标准请求方法和状态码

    HTTP/1.1标准自从1999年制定以来至今仍然是一个应用广泛并且通行的标准 相关文档 RFC2616:Hypertext Transfer Protocol -- HTTP/1.1 在RFC658 ...

  4. K&R——第五章 指针与数组

    #include <stdio.h> #define maxsize 5000 char buf[maxsize]; char *head = buf; char *new(int siz ...

  5. commons-lang3工具类学习--------ObjectUtils

    Object工具类 allNotNull(Object... values) 检查所有元素是否为空,返回一个boolean 如果有一个元素为空返回false,所有元素不为空或元素为empty返回tru ...

  6. 小程序使用wxParse插件解析html标签图片间距问题

    转自:https://www.cnblogs.com/likun123/p/9543376.html 小程序解析html标签,就需要用到wxParse啦.但是在解析连续图片的时候,会发现图片之间会有间 ...

  7. list all of the Oracle 12c hidden undocumented parameters

    http://www.dba-oracle.com/t_12c_hidden_undocumented_parameters.htm select ksppinm, ksppdesc from x$k ...

  8. SQL Server 2008 镜像的监控 - Joe.TJ -

    http://www.cnblogs.com/Joe-T/archive/2012/09/06/2673237.html

  9. Silverlight 离线安装包

    直接下载地址 https://www.microsoft.com/getsilverlight/locale/en-us/html/Microsoft%20Silverlight%20Release% ...

  10. xamarin studio 安装

    公司wpf项目移植到mac,用到mono来进行重写,不会,自己开搞 首先一个问题Xamarin怎么读,xaml熟悉吧,xaml读作Zamel,xamarin也就读作Zamerin,恩,就是它了... ...