unity3d 角色頭頂信息3D&2D遮擋解決方案(一)


 

先上效果圖,只憑文字描述,腦補應該有些困難- -

 如圖:有三個角色(我們暫且從左到右叫它們A、B、C),一個2D UI(中間動作選擇的框框),一個cube(右邊的方塊)

cube擋住了角色C的頭頂信息

2D UI擋住了角色和cube

共同點是只顯示未被遮擋的部分,遮擋的部分不顯示

相信大多數人在看我這篇文章之前已經看過雨松momo的《人物頭頂名稱與血條更新與繪制》

沒看過的可以去看看:http://www.xuanyusong.com/archives/1032

如果直接使用雨松momo文章中的代碼的話,那么你會發現有一些問題,如圖

這里我沒有用血條,只繪制了文字,都一樣的!

第一:因為是用OnGUI繪制的,所以使用的過程之中角色昵稱和血條會擋住NGUI創建的UI。你可以腦補一下當你打開背包時,一排文字和血條擋住了你的背包。。。

第二:當角色被其他物體遮擋時,這里我說的是3D物體,不是UI。怎么說比較好理解呢!!就好比角色走到了牆后面,角色已經被牆遮擋住了,但是角色昵稱和血條依舊顯示(或許有一些人就要這種效果!好吧,至少在我的項目中這種效果給我的感覺是非常差的)

第三:當同一個場景出現兩個角色時,兩個角色都有自己的昵稱和血條,如果你和另個角色距離太遠且旋轉了角度時,名稱和血條居然奇跡的出現在了天上!沒錯,就是天上

......以上所述只是指出一些bug,並沒有多余的意思,大家勿噴,我也是菜鳥,只是和大家分享下經驗!!

雨松momo的寫這篇文章的目的也就是給大家一個思路,具體在項目中怎么實現成預想效果得靠自己了

 這個思路挺好,但是由於一些我自身項目的原因就暫且不用這個思路,這個思路大家可以去看看,以后肯定能用到

 

現在用另外一種思路實現,這里我們要學到一個東西:Layer(層)

關於layer的介紹請看聖典:http://game.ceeger.com/Components/Layers.html

其實我自己也沒有看過,為了寫這篇文章才去搜的,自己沒事的時候瞎點點就知道是干嘛的了

 

因為我們要用到NGUI,所以先導入NGUI插件包

進入正題:

1、創建一個空GameObject,改名為NamePanel,設為角色子物體,然后Reset並且調整位置到角色頭頂位置

2、將NamePanel的Layer設置和角色同一個層,並且添加一個UIPanel

3、在NamePanel下添加UILabel,方法為:選中NamePanel->NGUI->Create->Label,並且將Label Overflow屬性設置為ResizeFreely(自動適應文字大小以及長度的)

4、設置UILabel組件的屬性。字體、顯示文字、字體顏色。Effect選擇OutLine,顏色選擇為黑色,這個參數是描邊的,讓字體更清晰

 

咦,搞毛啊,字體怎么這么大啊?把字體修改小一點,10、5、1,尼瑪怎么還是這么大,而且還看不清了

別急別急,不是你操作錯誤,是還沒操作完!

我一開始遇到這個問題的時候我也納悶了,后來想了想,有可能是沒有添加UIRoot的原因

用過NGUI的都知道,UIRoot是NGUI必不可少的一部分,在手機上自適應分辨率就靠它了

那既然知道原因了,我們就添加一個UIRoot試試唄

 

5、選擇NamePanel,添加一個UIRoot組件,Scaling Style選擇FixedSizeOnMobiles

 哈哈,字體恢復正常了!如果感覺字體比較小,可以在把字體調大一些

運行游戲,你會發現角色移動的時候,頭頂信息雖然跟隨角色了,但是角色旋轉或相機旋轉的時候,頭頂信息旋轉面向攝像機。如果你就想這樣,那是大大滴不行的,不能圖方便就少了代碼

現在我們來寫代碼,代碼很簡單

 1     public GameObject targets;
 2     private Camera camera;
 3     
 4     void Start()
 5     {
 6         //獲得主攝像機
 7         camera = Camera.main;
 8     }
 9 
10     void Update()
11     {
12         //設置旋轉角度
13         targets.transform.rotation = camera.transform.rotation;
14     }

保存代碼,將腳本掛到角色上,然后把NamePanel拖到參數targets

最后運行游戲,在看看效果,ok,完美

 

最后總結一下:

代碼上是非常簡單的,看我代碼就知道了,可以說就只有一句代碼。。。

主要就是設置層,層一定要分清楚,很重要!

本文地址:http://www.cnblogs.com/shenggege/p/4179012.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM