1、创建GameObject
一般来说,创建都是实例化prefab的。最简单的办法是:
if (Input.GetMouseButton (0))
{
//在鼠标左键点击的地方创建一个物体
GameObject obj = Instantiate (Prefab) as GameObject;
obj.transform.position = Input.mousePosition;
}
然后,只需要在界面上将制作好的预制体拖放到变量Prefab上即可。
注意:
在设置新实例化的GO时, 由于坐标系是3D的, 需要做坐标系转换.
// 本地化 2D 坐标系
Vector3 screenPosition = Camera.main.WorldToScreenPoint(Input.mousePosition);
Vector3 mousePositionOnScreen = Input.mousePosition;
mousePositionOnScreen.z = screenPosition.z;
Vector3 mousePositionInWorld = Camera.main.ScreenToWorldPoint(mousePositionOnScreen);
如果需要动态创建物体,比如切水果游戏里面,有很多不同的水果,不可能在脚本里面把所有的水果预制体都赋值吧。
这样太繁琐了,也容易出错。
既然有了预制体,那么就可以通过资源加载了,如下:
GameObject knife_pfb = Resources.Load("Prefabs/Knife_pfb") as GameObject;
GameObject knife = Instantiate(knife_pfb) as GameObject; // 5.3.2f1之后需要将 PFB 再实例化为 GO
knife.transform.position = mousePositionInWorld;
Resources在加载资源时,默认是从Assert/Resources下开始搜索资源文件的。文件保存到Resources目录下,或者其子目录下都可以。
比如代码中加载的是Assert/Prefabs/box_full.prefab这个预制体。
加载之后,就可以使用Instantiate进行实例化了。是不是很简单?
2、删除GameObject
调用全局函数Destroy即可。如下:
Destroy (obj); //立即删除obj
Destroy (obj, 3.0f); //3秒之后删除obj
网友评论