您的位置:首页 > 移动开发 > Unity3D

Unity3D: 脚本控制动态加载预设物体

2017-07-25 14:21 1556 查看
在使用Unity 中,动态加载预制体是比较常见的。这里
4000
简单介绍一下,加载的几个步骤及过程。

用代码控制 一个预设物体在场景中显示,一般需要三个步骤:

1.预设体 资源加载

在 Assets 目录下 创建一个 resource 文件夹,将做好的 prefab 放在这个文件夹下:

如: login_layer, 在需要动态加载的时候这样用:

// 加载预设体资源

GameObject layerPrefab = Resource.Load(“Prefabs/login_layer”).gameobject;

通过这个操作,实现从资源目录 “/Resource/Prefabs/login_layer” 的预设体加载到场景中,用GameObject 对象来存放。(此时该预设体并未真正加载到场景中,因为还没有进行实例化)。

预设体实例化:

对资源进行实例化,需要用 Instantiate 函数来完成,实际就是从预设体资源中克隆出一个对象,加载到当前场景中。

// 实例化预设体

GameObject login_layer = Instantiate(layerPrefab, null, true);

(这里实例化后,并没有对其属性进行操作,其父节点默认是放在当前场景的最外层)

3.实例化对象属性设置

一般我们需要对我们的实例化对象,放在想要的层次下面。所以需要为对实例化对象设置一个父节点

GameObject layerPrefab = Resource.Load("Prefabs/login_layer").gameobject;
GameObject login_layer = Instantiate(layerPrefab, null, true);
GameObject canvas = GameObject.Find("Canvas");
login_layer.transform.parent = canvas.transform;


代码可以简化成:

//直接查找 并初始化
GameObject login_layer = Instantiate(Resource.Load("Prefabs/login_layer").gameobject);
GameObject canvas = GameObject.Find("Canvas");
login_layer.transform.parent = canvas.transform;


这儿有个问题:

就是 初始化出来的 预设体 默认是在 Canvas的左下 的原点坐标。如果需要放在自己想要的位置的话,还需要重新配置 初始化后的 出现位置点.

添加这两句代码即可:

login_layer.transform.LocalScale = Vector2.one;     // 初始大小
login_layer.transform.LocalPosition = Vector3.zero; // 相对于被放置父节点的 零点坐标位置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: