版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年豐城新高焦化有限公司本部(第2批次)招聘4人備考題庫(kù)附答案
- 2025年聊城臨清市衛(wèi)健系統(tǒng)事業(yè)單位公開(kāi)招聘工作人員筆試考試題庫(kù)附答案
- 2025宿遷市泗陽(yáng)縣招聘合同制和公益性崗位工作人員38人(公共基礎(chǔ)知識(shí))綜合能力測(cè)試題附答案
- 2025年湖北省建設(shè)科技與建筑節(jié)能辦公室統(tǒng)一組織公開(kāi)招聘工作人員(公共基礎(chǔ)知識(shí))測(cè)試題附答案
- 2025年湖北省教育科學(xué)研究院專(zhuān)項(xiàng)公開(kāi)招聘3人考試參考題庫(kù)附答案
- 2026廣西北海市第三人民醫(yī)院招聘筆試備考題庫(kù)及答案解析
- 2026上海復(fù)旦大學(xué)環(huán)境科學(xué)與工程系招聘王戎課題組科研助理崗位2人筆試備考試題及答案解析
- 2026青海省海西州德令哈市司法局招聘1人筆試備考試題及答案解析
- 2025秋人教版道德與法治八年級(jí)上冊(cè)9.1社會(huì)責(zé)任我擔(dān)當(dāng)教學(xué)設(shè)計(jì)
- 2026湖南長(zhǎng)沙市天心區(qū)實(shí)驗(yàn)小學(xué)教師招聘筆試備考試題及答案解析
- 2025版國(guó)家開(kāi)放大學(xué)法學(xué)本科《知識(shí)產(chǎn)權(quán)法》期末紙質(zhì)考試總題庫(kù)
- DB11T 354-2023 生活垃圾收集運(yùn)輸管理規(guī)范
- 赤石特大橋施工安全風(fēng)險(xiǎn)評(píng)估報(bào)告
- 九宮數(shù)獨(dú)200題(附答案全)
- QBT 2770-2006 羽毛球拍行業(yè)標(biāo)準(zhǔn)
- 部編版八年級(jí)上冊(cè)語(yǔ)文《期末考試卷》及答案
- 售后服務(wù)流程管理手冊(cè)
- 2020-2021學(xué)年新概念英語(yǔ)第二冊(cè)-Lesson14-同步習(xí)題(含答案)
- 地下車(chē)庫(kù)建筑結(jié)構(gòu)設(shè)計(jì)土木工程畢業(yè)設(shè)計(jì)
- PDM結(jié)構(gòu)設(shè)計(jì)操作指南v1
- 投資學(xué)-課件(全)
評(píng)論
0/150
提交評(píng)論