unity3d 攝像機(jī)跟隨角色時(shí)被物體遮擋解決方案_第1頁(yè)
unity3d 攝像機(jī)跟隨角色時(shí)被物體遮擋解決方案_第2頁(yè)
unity3d 攝像機(jī)跟隨角色時(shí)被物體遮擋解決方案_第3頁(yè)
unity3d 攝像機(jī)跟隨角色時(shí)被物體遮擋解決方案_第4頁(yè)
unity3d 攝像機(jī)跟隨角色時(shí)被物體遮擋解決方案_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、在看此文章時(shí)請(qǐng)先看上面的參考文章。更多精彩請(qǐng)關(guān)注【狗刨學(xué)習(xí)網(wǎng)】 看完以上文章后,你也許會(huì)想人家都已經(jīng)給出所有代碼了,你還寫(xiě)個(gè)毛啊 別急,現(xiàn)在進(jìn)入主題 在我的項(xiàng)目中,我采用的是物體遮擋作半透明處理,如果按照上述文章中的思路來(lái)寫(xiě)代碼的話,那么結(jié)果就是當(dāng)多個(gè)物體遮擋角色時(shí),只有第一個(gè)物體會(huì)半透明,如圖: 角色被墻和屋頂遮擋住了,但是可以清楚的看見(jiàn)左下角的墻呈半透明狀態(tài),而屋頂依舊不透明 為了解決這個(gè)問(wèn)題,我們不采用上述文章中的 physics.Linecast,在這里我們需要用到 Physics.RaycastAll;使用方法詳見(jiàn)圣典 ok,現(xiàn)在我們開(kāi)始敲代碼 首先 ,我們引入命名空間 System

2、.Collections.Generic,然后在聲明三個(gè)需要用到的變量1. using System.Collections.Generic;/引入命名空間2.3. public class MyCamera1 : MonoBehaviour4. 5. /觀察目標(biāo)6. public Transform Target;7.8. /上次碰撞到的物體9. private List lastColliderObject;10.11. /本次碰撞到的物體12. private List colliderObject;13. 復(fù)制代碼 我們需要發(fā)射一條射線,這條射線從角色當(dāng)前位置發(fā)射置攝像機(jī)的方向1. /

3、*射線可以從頭部起始*/2. 23. 3 /這里是計(jì)算射線的方向,從主角發(fā)射方向是射線機(jī)方向4. 4 Vector3 aim = Target.position;5. 5 /得到方向6. 6 Vector3 ve = (Target.position - transform.position).normalized;7. 7 float an = transform.eulerAngles.y;8. 8 aim -= an * ve;9. 910. 10 /在場(chǎng)景視圖中可以看到這條射線11. 11 /Debug.DrawLine(target.position, aim, Color.red)

4、;12. 1213. 13 RaycastHit hit;14. 14 hit = Physics.RaycastAll(Target.position, aim, 100f);/起始位置、方向、距離復(fù)制代碼 射線發(fā)送完畢后,我們獲取發(fā)送射線時(shí)碰撞到的所有物體,并且添加進(jìn)本次碰撞到的物體(colliderObject)變量中 因?yàn)槲业牡貓D、護(hù)欄碰撞(不可見(jiàn))、地面碰撞(不可見(jiàn))是三個(gè)模型,也就是說(shuō)地圖本身是沒(méi)有任何碰撞的 所以當(dāng)碰撞到的物體名為護(hù)欄或地面時(shí),就不修改其透明度,因?yàn)樗旧砭筒豢梢?jiàn) 這里我偷懶了,直接判斷物體名稱,可自行改為判斷物體 tag 當(dāng)視角旋轉(zhuǎn)的時(shí)候,射線有時(shí)候會(huì)碰撞到角色

5、,所以,我們獲取 tag 判斷是否碰撞的物體為角色1. 1 /將 colliderObject 中所有的值添加進(jìn) lastColliderObject2. 2 for (int i = 0; i colliderObject.Count; i+)3. 3 lastColliderObject.Add(colliderObjecti);4. 45. 5 colliderObject.Clear();/清空本次碰撞到的所有物體6. 6 for (int i = 0; i hit.Length; i+)/獲取碰撞到的所有物體7. 7 8. 8 if (hiti.collider.gameObject

6、.name != Editable Poly 1/護(hù)欄9. 9 & hiti.collider.gameO != Editable Poly/地面10. 10 & hiti.collider.gameObject.tag != Player)/角色11. 11 12. 12 /Debug.Log(hiti.collider.gameO);13. 13 colliderObject.Add(hiti.collider.gameObject);14. 14 SetMaterialsColor(hiti.collider.gameObject.renderer

7、, 0.4f);/置當(dāng)前物體材質(zhì)透明度15. 15 16. 16 復(fù)制代碼 當(dāng)獲取到所碰撞到的所有物體后,我們要修改他的材質(zhì)透明度,有些物體有很多材質(zhì),不知道怎么解決的請(qǐng)看我下面這個(gè)方法:1. 1 / 置物體所有材質(zhì)球顏色 2. 2 / 置物體所有材質(zhì)球顏色3. 3 / 4. 4 / 材質(zhì)5. 5 / 透明度6. 6 private void SetMaterialsColor(Renderer _renderer, float Transpa)7. 7 8. 8 /獲取當(dāng)前物體材質(zhì)球數(shù)量9. 9 int materialsNumber = _renderer.sharedMaterials.

8、Length;10. 10 for (int i = 0; i materialsNumber; i+)11. 11 12. 12 /獲取當(dāng)前材質(zhì)球顏色13. 13 Color color = _renderer.materialsi.color;14. 1415. 15 /設(shè)置透明度取值范圍:01;0 = 完全透明16. 16 color.a = Transpa;17. 1718. 18 /置當(dāng)前材質(zhì)球顏色19. 19 _renderer.materialsi.SetColor(_Color, color);20. 20 21. 21 復(fù)制代碼 如果本次碰撞到的物體存在于上個(gè)物體,那么則說(shuō)明

9、當(dāng)前物體還處于遮擋角色狀態(tài),所以我們賦值為null1. 1 /上次與本次對(duì)比,本次還存在的物體則賦值為null2. 2 for (int i = 0; i lastColliderObject.Count; i+)3. 3 4. 4 for (int ii = 0; ii colliderObject.Count; ii+)5. 5 6. 6 if (colliderObjectii != null)7. 7 8. 8 if (lastColliderObjecti = colliderObjectii)9. 9 10. 10 lastColliderObjecti = null;11. 11 break;12. 12 13. 13 14. 14 15. 15 復(fù)制代碼 還處于遮擋狀態(tài)的物體已被賦值為null,那么剩下的物體就是沒(méi)有處于遮擋狀態(tài)的,所以我們要重置該物體材質(zhì)為不透明1. 1 /當(dāng)值為null時(shí)則可判斷當(dāng)前物體還處于遮擋狀態(tài)2. 2 /值不為null時(shí)則可恢復(fù)默認(rèn)狀態(tài)(不透明)3. 3 for (int i = 0; i lastColliderObject.Count; i+)4. 4 5. 5 if (las

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論