国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

NGUI研究之3D模型坐標轉(zhuǎn)2D屏幕坐標

php中文網(wǎng)
發(fā)布: 2016-06-07 15:12:51
原創(chuàng)
2257人瀏覽過

剛好今天有朋友問我,比較典型的例子就是游戲里面人物的血條。原理很簡單就是把3D點換算成2D的點,但是由于NGUI自身是3D所以我們需要先把NGUI下的點轉(zhuǎn)成2D點,然后在把他轉(zhuǎn)成3D的點。聽起來有點繞,不要緊我直接上代碼。對屏幕自適應不明白的看NGUI研究之如

??

剛好今天有朋友問我,比較典型的例子就是游戲里面人物的血條。原理很簡單就是把3D點換算成2D的點,但是由于NGUI自身是3D所以我們需要先把NGUI下的點轉(zhuǎn)成2D點,然后在把他轉(zhuǎn)成3D的點。聽起來有點繞,不要緊我直接上代碼。對屏幕自適應不明白的看NGUI研究之如何自適應屏幕

目前我一直都是用NGUI來做人物血條,但是2D血條都會有個限制,就是它不能和模型有遮擋關系。不過血條可以根據(jù)人物的位置調(diào)節(jié),比如遠一點的人物血條會小一些,近一點的人物血條會大一些。

最好讓美術做FBX的時候直接內(nèi)置一個GameObject 的點,因為模型有的高有的低,所以血條的位置高度是不一樣的,如果美術內(nèi)置的話可以讓美術來調(diào)節(jié)模型頭頂上的點,這樣比較方便。


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;

?

publicclassNewBehaviourScript :MonoBehaviour{

?

??//角色

????publicTransform Cube;

????//角色的血條

????publicTransform UI;

?

??//默認血條縮與攝像機的距離

????privatefloatFomat;

????//角色頭頂?shù)狞c, 最好讓美術把這個點直接做在fbx模型里面。

????privateTransform Head;

?

????voidStart()

????{

??????//找到角色身上頭頂?shù)狞c

????????Head=Cube.Find("head");

????????//計算以下默認血條的距離,也可以寫個常量,就是標記一下

????????Fomat??=Vector3.Distance(Head.position,Camera.main.transform.position);

????}

?

????voidUpdate()

????{

??????//這里可以判斷一下 如果位置沒有變化就不要在賦值了

????????floatnewFomat=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點。

????publicstaticVector3 WorldToUI(Vector3 point)

????{

????????Vector3 pt=Camera.main.WorldToScreenPoint(point);

????????//我發(fā)現(xiàn)有時候UICamera.currentCamera 有時候currentCamera會取錯,取的時候注意一下啊。

????????Vector3 ff= ????UICamera.currentCamera.ScreenToWorldPoint(pt);

????????//UI的話Z軸 等于0

????????ff.z=0;

????????returnff;

????}

}

?

再說一下,一般血條可能都是由多個UISprite組成,那么最好把這些Sprite都掛在同一個GameObject下面,這樣只需要修正父對象,所以子對象的縮放都會正確。控制角色移動近一點的截圖。

NGUI研究之3D模型坐標轉(zhuǎn)2D屏幕坐標

控制角色移動遠一點的截圖,你會發(fā)現(xiàn)血條在屏幕上的比例是不會變化的。

NGUI研究之3D模型坐標轉(zhuǎn)2D屏幕坐標

祝大家學習愉快,歡迎討論,嘿嘿嘿嘿

最佳 Windows 性能的頂級免費優(yōu)化軟件
最佳 Windows 性能的頂級免費優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號