對於Prefab預設體的動態生成和名字的注意事項


最近一個項目用到了需要動態創建Button用來顯示點擊按鈕和項目中設備的名字。下面我講一下對於動態生成需要哪幾步。

  1.首先,在Unity3D工程Asset下創建一個空文件夾Resources(注意:名字不要寫錯,這個是特殊文件夾);

 創建Resources文件夾,用於存放要加載的游戲物體

  2. 然后將想要加載的游戲物體放入到Resources中,本次舉例子就用一個Button進行說明,將Button創建好設置好之后,添加在Resources文件夾中,作為Prefabs;

  3.創建腳本,掛載在任意一個游戲物體上均可,這里掛載在了Canvas。並且在Panel上添加了Grid Layout Group組建,只是為了方便動態加載Button,Button能自動排列。腳本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ListButton : MonoBehaviour
{
    // 創建panel,方便作為Button的父類物體
    public GameObject panel;
   // 定義一個字符串
   [HideInInspector] public string data = "a,b,c,d,e,f,g,h"; // 定義一個用來分割data存放數據的數組
[HideInInspector] public string[] datas; void Awake() { // 一般動態資源加載放在Awake中 GameObject button = Resources.Load("Button", typeof(GameObject)) as GameObject; // 將字符串分割開放在datas數組中 datas = data.Split(','); for (int i = 0; i < datas.Length; i++) { // 給生成的Button賦值 button.name = i.ToString(); // 打印button的名字便於控制台觀看 Debug.Log(button.name); // 用於給Button子物體Text賦值 string x = datas[i]; button.GetComponentInChildren<Text>().text = x; // 實例化出button,並設置其父物體 Instantiate(button,panel.transform); } } }

  4.然后給腳本組件拖入相對應的物體,此例子讓其父物體設置為了Panel,這樣生成的Button可以得到自動排列;

  5.然后點擊運行,結果如下:

可以看出,生成的預設體直接Debug.Log()打印出來的名字是不帶(Clone)的。但是我做的項目中是需要檢測到物體的名字進行判斷的。於是,怎么也檢測不正確。后來我用射線檢測,然后直接打印出射線檢測到的這個物體的名字,發現是有(Clone)的。頓時覺得智商被玩弄了。這也是個小細節,大家注意下。

 

 如有錯誤或者更加好的方法,歡迎大家給我評論。小強會和大家一起進步!

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM