对于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)的。顿时觉得智商被玩弄了。这也是个小细节,大家注意下。

 

 如有错误或者更加好的方法,欢迎大家给我评论。小强会和大家一起进步!

  

 

转载于:https://www.cnblogs.com/ze871895381/p/6562383.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值