close
使用 Resources 動態載入物件的方法有:
 
該函數會將物件載入,並且預設為 UnityEngine.Object 的類型。
Resources.Load( 位置+檔名 );
 
該函數會將物件載入,並且會將物件轉成指定的類型。
Resources.Load< 指定的類型 >( 位置+檔名 );
 
 
以下示範如何使用:
 
該講解中,是直接使用 "Unity 動態載入物件" 的範例檔來做示範的,若有需要可直接前往下載。
 
 
步驟一:
在 "Assets" 資料夾中建立一個資料夾,名稱為 "Resources",這些名稱是 Unity 規定的,記得不能夠打錯!

image01.jpg

image02.jpg

 
 
步驟二:
將 Cube 物件,從場景上拖曳到剛剛建立好的 Resources 資料夾中。

image03.jpg

 
 
步驟三:
開啟 Create 腳本,修改如下。
 
using UnityEngine;

public class Create : MonoBehaviour
{
    // 這裡會在持續檢查是否有按下鍵盤監聽的按鍵, 
    // 若有按下監聽按鍵的話則將 Resources 資料夾中的物件載入, 
    // 並且複製到場景上. 
    private void Update()
    {
        // 從 Resources 下載入 Cube 物件
        if ( Input.GetKeyDown(KeyCode.A) ) 
        {
            Object obj = Resources.Load( "Cube" );
            Instantiate( obj );
        }
    }
}
 
 
因為 Resources.Load 該函數就是從 Resources 資料夾中載入的,所以不需要輸入 Resources 這路徑。
但你如果在 Resources 資料夾裡面還有資料夾的話,就必須加入路徑。
 

image04.jpg

如上圖,我想要載入 Resources 底下 Folder 中的 Cube 物件,那我就要將 Resources.Load( "Cube" ); 改成 Resources.Load( "Folder/Cube" );
 
// 從 Resources 下的 Folder 資料夾中載入 Cube 物件
if ( Input.GetKeyDown(KeyCode.S) ) 
{
    Object obj = Resources.Load( "Folder/Cube" );
    Instantiate( obj );
}

 
 
步驟五:
若你想要取得並修改複製出來的 GameObject,你可以建一個 GameObject 去接收回傳值,不過記得要轉型,因為它是預設 Object 類型。
 
// 從 Resources 下載入 Cube 物件, 
// 並且改變尺寸為原來的 2 倍
if ( Input.GetKeyDown(KeyCode.D) ) 
{
    Object obj = Resources.Load( "Cube" );
    GameObject gobj = Instantiate( obj ) as GameObject;

    // 這邊我將物件設定成兩倍
    gobj.transform.localScale = new Vector3( 2.0f, 2.0f, 2.0f );

    // 該方法為 Unity 5 以上才有的功能
    // GameObject gobj = Instantiate< GameObject >( obj );
}

 
 
 
步驟六:
上一個範例中, 我們已經有將 Create 腳本拉上場景中的 "Main Camera" 物件上了。
執行後按下 A、S、D 的結果。

image05.jpg

 
 
 
arrow
arrow
    文章標籤
    C# Unity Resources
    全站熱搜

    岳 發表在 痞客邦 留言(0) 人氣()