顯示具有 unity 標籤的文章。 顯示所有文章
顯示具有 unity 標籤的文章。 顯示所有文章

2023年3月28日 星期二

【Unity】TextMesh Pro跟Text有什麼不同?

Unity中的Text是一個基本的UI元素,可以用來顯示簡單的文字內容。而TextMesh Pro則是一個高級的文字顯示插件,它提供了比Text更豐富的文字顯示功能。

以下是TextMesh Pro相對於Unity的Text的一些主要不同之處:

  • 字體質量:TextMesh Pro支持更高質量的字體,包括自定義字體和向量字體。相比之下,Unity的Text只支持TrueType字體。
  • 文字排版:TextMesh Pro提供了更強大的文字排版功能,包括文字對齊、自動換行、字符間距和行間距等。
  • 文字效果:TextMesh Pro支持許多文本效果,如陰影、輪廓、梯度和傾斜等。這些效果可以幫助文本在遊戲中更加鮮明突出。
  • 顯示效率:由於 TextMesh Pro 的優化,其在顯示大量文本時效率更高,能够更好的支援場景中大量文本的應用。

TextMesh Pro是一個更高級、更強大的文字顯示插件,它能夠讓遊戲中的文字更加美觀和功能更加強大。

2023年3月27日 星期一

【Unity】awake()跟start()有什麼不同?

在Unity中,Awake()和Start()都是MonoBehaviour生命週期中的方法,它們在物件被建立時執行。但是它們的執行時間有所不同,具體差異如下:

Awake()方法是在物件被建立時就會執行,而且只會執行一次,通常用於進行初始化設置,例如取得對其他物件的參考、設置初始變數等。Awake()方法在腳本啟用前被調用,可以用來設置一些不依賴其他物件的變量和屬性。

Start()方法在Awake()方法後執行,並在物件啟用時被調用,通常用於初始化腳本和設置初始值,例如設置相機的視角和位置、設置遊戲中的初始變量等。Start()方法是在第一次Update之前被調用,所以它是用於設置一些需要在遊戲中動態調整的變量和屬性。

Awake()方法用於設置一些靜態變量和初始化遊戲物件,Start()方法用於設置動態變量和初始化遊戲邏輯。

2023年3月22日 星期三

【Unity】interface接口的概念

 interface接口,主要是可以在不同腳本中共用相同的類,只要多個不同腳本接上同樣的接口

那麼各個腳本中符合該接口的函式就都可以被外部使用。

下面這部影片8:30秒開始的說明可以比較清楚了解。

2023年3月21日 星期二

【Unity】IEnumerator筆記

 在Unity中,IEnumerator是一個接口,它可以用來實現一種特殊的方法,稱為協程(Coroutine)。

協程是一種能夠讓程式在執行到特定點時暫停,並且在之後的某個時間點繼續執行的方法。它可以讓開發者實現一些需要等待或分段執行的功能,比如動畫效果、延遲操作、遊戲流程控制等等。

IEnumerator接口是協程的核心,它提供了一些必要的方法和屬性,使得協程的實現變得容易。在使用協程時,開發者可以創建一個IEnumerator對象,並且在其中編寫協程所需要執行的代碼。然後,開發者可以使用Unity的協程系統來啟動這個IEnumerator對象,並且在需要的時間點暫停和繼續執行。

IEnumerator接口是Unity協程的核心,它可以讓開發者輕鬆地實現一些需要等待或分段執行的功能。

2023年2月22日 星期三

【Unity】Update和FixedUpdate有什麼不同?

Update和FixedUpdate是Unity3D中的兩個常見的函數,不僅適用於2D,也適用於3D開發。這兩個函數是MonoBehaviour類的兩個方法,用於更新遊戲物體的狀態,實現遊戲物體的運動、動畫、碰撞檢測等功能。

Update函數在每一個畫面更新(幀)時都被調用,通常用於處理與時間有關的遊戲邏輯,例如遊戲物體的移動、旋轉、動畫播放、鍵盤輸入檢測等。

FixedUpdate函數在固定時間間隔(通常是每0.02秒)被調用,用於處理與物理引擎有關的邏輯,例如碰撞檢測、剛體運動、物體受力等。由於FixedUpdate的調用頻率比Update低,因此對於遊戲物體的物理模擬來說更加穩定,避免了物理模擬的抖動和錯誤。

總之,Update和FixedUpdate是Unity3D開發中非常重要的函數,無論是2D還是3D開發,都需要掌握它們的使用方法。

在Unity中,Update和FixedUpdate都是用來更新場景中物體的函數,但它們的執行時間和更新方式有所不同。

Update函數會在每一個遊戲畫面渲染時執行一次,它的更新頻率取決於當前的幀率,因此會根據電腦性能而有所不同。由於Update函數的執行時間不固定,因此它比FixedUpdate函數更容易受到性能波動的影響。通常用來更新遊戲物體的位置和旋轉等操作,以及處理玩家輸入和響應遊戲事件等。

FixedUpdate函數則是固定時間間隔執行的,每個固定的時間間隔(通常為0.02秒)執行一次,這意味著它的更新頻率是固定的,不受幀率的影響。由於FixedUpdate函數的執行時間是固定的,因此它比Update函數更穩定,適合用於處理物理引擎的運算,例如剛體運動計算等。

總體來說,如果需要更新物體的位置和旋轉等操作,或者需要處理玩家輸入和響應遊戲事件等,就應該使用Update函數;如果需要處理物理引擎的運算,就應該使用FixedUpdate函數。

【Unity】Unity 2D上的碰撞要怎麼寫?有哪幾種判斷方式?

在Unity 2D中,碰撞通常是通過Collider和Rigidbody組件的搭配實現的。以下是幾種常見的碰撞判斷方式:

  1. OnCollisionEnter2D(Collision2D collision):當一個物體碰撞到另一個物體時,Unity會調用此方法。這個方法的參數包含碰撞信息,例如碰撞點,碰撞的法線等。

  2. OnTriggerEnter2D(Collider2D other):當一個物體進入另一個物體的碰撞區域時,Unity會調用此方法。這個方法的參數包含進入碰撞區域的物體的Collider組件。

  3. OnTriggerExit2D(Collider2D other):當一個物體離開另一個物體的碰撞區域時,Unity會調用此方法。這個方法的參數包含離開碰撞區域的物體的Collider組件。

  4. OnCollisionStay2D(Collision2D collision):當兩個物體正在碰撞且仍在接觸時,Unity會每幀調用此方法。這個方法的參數包含碰撞信息,例如碰撞點,碰撞的法線等。

  5. OnTriggerStay2D(Collider2D other):當一個物體進入另一個物體的碰撞區域且仍在接觸時,Unity會每幀調用此方法。這個方法的參數包含進入碰撞區域的物體的Collider組件。

在使用這些方法時,需要注意以下幾點:

  1. 這些方法必須在MonoBehaviour的派生類中實現。

  2. 每個Collider必須設置為觸發器(IsTrigger)或非觸發器,這決定了碰撞的行為。

  3. 如果物體需要進行物理運動,需要將物體的Rigidbody設置為可運動的(Rigidbody Type)。

  4. 碰撞判斷通常是在物體的Update方法中進行的,因此需要注意碰撞的性能問題。如果需要高效的碰撞判斷,可以使用物理引擎提供的碰撞檢測方法,如Raycast、SphereCast、CapsuleCast等。

2020年5月1日 星期五

【Unity3D】已經製作成prefab但是還留在Scene場境上的物件,可以刪除也可以disable

在unity上已經製作成prefab但是還留在Scene場境上的物件,可以直接刪除也可以選擇disable,讓物件在scene上消失,以防之後可能還會需要叫出來調整。

刪除或disable都可以

把物件disable的方式是  在Hierarchy視窗上點遠物件後,在inspector標籤下面物件名稱前的checkBox取消打勾即可(如下圖)。



取消打勾後物件就會從Scene上消失了。
要讓物件出現只要再把checkBox打勾就可以了

【Unity3D】使用OnTriggerEnter偵測碰撞並destroy物件時要注意的小地方

在語法上使用OnTriggerEnter語法偵測碰撞時,下列語法可以同時destroy自己跟與自身碰撞的物件

private void OnTriggerEnter(Collider other)
    {
        Destroy(gameObject); //當自己跟其他物件相撞時,destroy自己
        Destroy(other.gameObject); //同時也destroy其他物件
    }

這樣的方式在某些狀況下會有一點小問題,如下: 
譬如是射擊遊戲類的型態,當對面很多敵人物件飛過來時,
敵人物件通常也是做成prefab物件,所以裡面的基本元素是相同的來源。

那麼在遊戲畫面上兩個相同的基本元素也有可能相碰,這時使用上面的語法就會有一點矛盾的地方,也就是說當兩個相同的敵方元素相碰,會執行第一段destroy自己,然後再執行下一段destroy碰撞自己的其他物件,但是碰撞自己的其他物件其實也就是上一段已經destroy的同一個物件,這樣可能就會產生error。

在這種情況下只要不在這個物件上加上RigidBody Commpont就可以了,只要把RigidBody加在自己發射的飛彈上,讓飛彈碰撞到敵方物件時,摧毀自己也摧毀敵方。 這樣就可以避免上述的矛盾錯誤。

來源自:Unity tutorial:create with code live Week 3 | Session 4 - Spawn Animals at Intervals - April 9, 2020

9am PST 影片內 49分10秒處的說明

2020年4月29日 星期三

【Unity3D】Input.GetKey, Input.GetKeyUp, Input.GetKeyDown 三者的差別


Input.GetKey : 一直按著按鍵也會觸發動作,譬如連發的機關槍
Input.GetKeyUp : 會在按下按鍵然後放開按鍵後觸發一次,然後就不再觸發
Input.GetKeyDown : 會在按下按鍵的當下觸發一次,然後就不再觸發



【Unity3D】在沒有鍵盤或是觸控的裝置上 無法使用Input.GetKey的情況下可以使用GetButton

在沒有鍵盤或是觸控的裝置上
無法使用Input.GetKey的情況下可以使用GetButton來操控定義了ButtonName的虛擬按鍵

Returns true while the virtual button identified by buttonName is held down.