Unity菜鳥 筆記2 問題篇

2022-01-15 23:43:55 字數 2544 閱讀 9514

記錄在學習《unity 3.x 遊戲開發 經典教材》時遇到的各種問題與筆記

1. 初始不能降低terrain的高度,需要到terrain設定的第二個按鈕中將height從0調高

(注意:最右邊齒輪按鈕裡的terrain height是整個地形的最大高度,左圖是當前筆刷繪製的最大高度)

2. sendmessage() 可以直接呼叫物體中的乙個函式,而不在乎函式屬於哪個指令碼

// ① 書中p151

currentdoor.sendmessage("doorcheck");

//此處,sendmessage()函式檢查在currentdoor變數所儲存的物體的所有指令碼中是否存在乙個名為 doorcheck()的函式,如果找到了,就呼叫該函式

// ② 官方示例

// every script attached to the game object

3. 碰撞檢測 

oncontrollercolliderhit() 這個函式的指令碼不能隨便繫結,要繫結到有角色控制器的物件上,比如player

charactercontroller.oncontrollercolliderhit 控制碰撞器碰撞

缺陷:◇ **被放到玩家物體中,隨著不斷完善**,整個指令碼會變得越來越龐大,難以維護

◇ 使用拓展後的碰撞器來啟用門狀態的改變,這樣玩家會突然撞到一面無形的牆,從而突然停下移動的腳步,這一點影響了遊戲可玩性

4. collidion  trigger 碰撞 和 觸發

要使用trigger檢測物體進入,則需要勾選is trigger選項。否則物體就會被擋在碰撞區外,無法進入。

碰撞檢測觸發器trigger 有別於碰撞檢測器 collision,其可以不受物理效果影響,一些可穿透區域的碰撞檢測,可以使用trigger來進行碰撞檢測。

trigger例子:

// 進入碰撞區域,觸發canthrow = true

void ontriggerenter(collider col)

}// 離開碰撞區域,觸發canthrow = false

void ontriggerexit(collider col)

}

跟 ontriggerenter() 函式不同,oncollisionenter() 函式處理的是原型碰撞器之間的普通碰撞,也就是說,沒有角色控制器碰撞器和處於觸發模式的碰撞器。

在這個函式中,引數theobject是乙個collision類的例項,這樣的乙個例項儲存著關於速率、剛體、碰撞器、變換、遊戲物體的資訊,另外還有碰撞發生時的接觸點。

collision 例子:

5. audiosource.playclipatpoint()

audiosource.playclipatpoint(testsound,transform.position);

6. instantiate 例項化

public rigidbody coconutprefab;  //發射的椰子預設

public float throwspeed = 30f; //發射速度

void update ()

}

7. destroy

destory(需要被移除的物體或者元件,多長時間後執行此移除函式);

// 編寫以下指令碼,並直接繫結到「椰子」預設上,生成的「椰子」轉殖體就會在3秒後自動被刪除,以此來減小遊戲的開銷。

void start ()

8. 陣列越界問題

public vector3 dalou_correct ;   //大樓正確的位置

public vector3 chuang_correct ; //窗戶正確的位置

// 如果在這裡定義成 public vector3 dalou_correct = new vector3[14];

// 在下面呼叫chuang_correct[0] 就會報錯超出陣列界限

void start ()

for (int j = 0; j < dalou_now.transform.childcount; j++)

9. 透明 問題

參考10. ngui如果用setactive(false)隱藏面板,當它上面還有正在執行的協程時就會報錯

可以用uipanel.alpha=0來隱藏

11. start函式只會執行一次,如果乙個cube上有start函式,在另乙個物體上控制cube.setactive(false),再cube.setactive(true)

此時cube再次啟用時,start函式不會被執行

12. 陣列本身是引用傳遞,但是陣列元素可以是值傳遞,不要直接記錄原來的transform陣列,用transform記錄position是儲存不了值的,用vector3陣列去記錄position就可以了

unity學習筆記2

自 對於新手學習unity碰撞講的還是比較清楚的 ontriggerenter和oncollisionenter的觸發條件是不同的,需要在設計的過程中加以關注。碰撞的兩個物體a,b,都要有碰撞體 collider box collider,sphere collider,capsule collid...

菜鳥筆記 SQL語句 2

菜鳥筆記 sql語句 2 資料查詢語句 1 檢視某張表有哪些字段 desc 表名 2 oracle 資料庫 寫完sql執行要加 分號,mysql加不加都行 3 select from emp 使用萬用字元 書寫方便,檢索未知,但會降低檢索效率 4 起別名as 或者加雙引號為固定格式 或者啥也不加會把...

Unity菜鳥開發紀要 2D描邊

3d模型的描邊漫天飛,通過法線計算就行,但是2d還是雖然也有,但不是自己想要的,畢竟只是想調一下顏色,閾值,邊緣大小就行。之前是做影象處理的,用的波門處理,計算乙個畫素點與周圍的梯度值差異,大於閾值的就是邊緣點。求的邊緣點與邊緣色混合,再與原色混合輸出就可以。直接上 在這裡插入 片 shader u...