NGUI研究之3D模型坐标转2D屏幕坐标-血条
刚好今天有朋友问我,比較典型的样例就是游戏里面人物的血条。
原理非常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以下,这样仅仅须要修正父对象。所以子对象的缩放都会正确。控制角色移动近一点的截图。
控制角色移动远一点的截图,你会发现血条在屏幕上的比例是不会变化的。
解决步骤: 1.添加一个摄像机,命名为BackgroundCamera,然后在Layer添加一个background层.并且将plane拖放到改相机节点下. 然后将BackgroundCamera和P ... 下图是我们要修改后的效果图: 一.深度检测 1.模型Z轴显示有问题: 上一次试验中,如果认真留意,会发现一个问题.当控制锥体在左右或上下旋转时,你会发现锥体看起来是在+-180度之间来回摆动,而不是3 ... 效果: 思路: 1.算出正确的uv去采样过滤图,上一篇文章说的很明白了.Shader实例:NGUI图集中的UISprite正确使用Shader的方法 2.用当前血量占总血量的百分比来设置shader中 ... 一直以来很多Stage3D开发者都在为3D模型在2DUI上显示的问题头疼.Stage3D一直是在 Stage2D下面.为了做到3D模型在2DUI上显示通常大家有几种实现方式,下面来说说这几种实现方式吧 ... 假设场景中有两台摄像机, 一台是NGUI的摄像机, 另外一台是投影摄像机. 投影摄像机看的是3D模型, Depth比NGUI的摄像机要大, Clear Flags设置的是Depth only. 现在想 ... https://blog.csdn.net/u014365862/article/details/54783209 3D-GAN是使用生成对抗网络学习2D图像到3D模型的映射,生成网络负责生成3D模型 ... 目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ... 不知不觉使用NGI插件已经有一段时间了.感觉NGUI真的是眼下Unity3D中最好用的UI插件. 可是它也有一些不是BUG的BUG,这些问题可能会让新人摸不着头脑,那么这篇文章将总结一下这段时间 ... 原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11783026.html 自己写了个简单的类读取解析obj模型,使用导入类,然后new个对象,在 ... 2100年,ACM牌巧克力将风靡全球. “绿的,橘红的,棕色的,红的…”,彩色的糖衣可能是ACM巧克力最吸引人的地方.你一共见过多少种颜色?现在,据说ACM公司从一个24种颜色的调色板中选择颜色来装饰 ... 给你一列数, 询问和最大的子串. N<=10^6 // N <=10^6 #include<cstdio> #include<iostream> using nam ... /** * polyfill for Function */ // from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer ... 今天看了vue.js源码 发现非常不错,想一边看一遍写博客和大家分享 /** * Convert a value to a string that is actually rendered. *转换 ... Python生成二维码,可以使用qrcode模块, github地址 我是搬运工 首先安装, 因为打算生成好再展示出来,所以用到Pillow模块 pip install qrcode pip inst ... http://oj.leetcode.com/problems/plus-one/ 进位加法 #include <iostream> #include <vector> usi ... 让Cache支持SetObject using Microsoft.AspNetCore.Http; using Newtonsoft.Json; public static class Sessio ... 题目链接 ...Wait for it... 考虑树链剖分. 对于树上的每个点开一个set,记录当前该节点上所有的girls. 每个节点初始的权值为set中的最小值. 询问的时候每次在路径上寻找最小 ... 题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 $N$ 座雕塑,为方便起见,我们把这些雕塑从 $1$ 到 $N$ 连续地进行标号,其中第 $i$ 座雕塑的年 ... history的介绍history是shell的内置命令,其内容在系统默认的shell的man手册中.history是显示在终端输入并执行的过命令,系统默认保留1000条.[root@localhos ...
NGUI研究之3D模型坐标转2D屏幕坐标-血条的更多相关文章
随机推荐