Unity中实例化游戏物体和销毁游戏物体

Unity中实例化物体是很常见的,例如坦克大战中你用子弹打中一个坦克之后,分数加1然后场景中又会生成新的坦克。这个过程中就存在一次游戏物体销毁(子弹打中坦克后,坦克销毁)和一次游戏物体实例化(场景中又生成新的坦克),这算Unity中实例化游戏物体和销毁游戏物体的一个实际应用场景吧。

首先附上实例化游戏物体的思维导图


下面来看具体的操作吧。

1. 在Unity中新建一个场景,创建一个Prefab物体,这里建了名为Box的预制体

2. 创建一个空的游戏物体用来实例化生成Box

操作如下:Hierarchy--->Creat Empty--->重命名为CreatBox--->新建一个脚本名称为CreatBox拖拽到CreatBox游戏物体上

这一步比较简单就不截图了。

3. 打开CreatBox脚本,写控制游戏物体生成的逻辑代码

关键代码如下:

GameObject.Instantiate(Object,Vector3,Quaternion)

Intantiate方法是静态方法,要用类名GameObject . 调用。

方法中有三个参数,也很好理解。大家想一想我们要在场景中生成一个游戏物体

第一个参数 Object 是要生成的游戏物体

生成的游戏物体在场景中要有一个位置吧,第二个参数Vector3就是游戏物体的生成位置

第三个参数Quaternion是表示生成的游戏物体是否旋转,一般是不旋转我们用Quaternion.identity表示无旋转

代码截图如下:

代码中比较关键的一句:

public GameOject  m_prefab;

因为我们定义的是public类型变量,所以在Inspector面板中我们可以看到一个GameObject类型的变量,点击右侧的小圆点就可以找到我们的Box预制体,然后选中它。

既然要在场景中生成游戏物体,这句话的意思就是要获得要生成游戏物体Box的引用

void Start ( )函数中语句解释:

 GameObject.Instantiate(m_prefab, Vector3.up,Quaternion.identity);

m_prefab:代表要传递的游戏物体

Vector3.up:代表场景中原点上一米的位置

Quaternion.identity:表示生成的物体无旋转

4. 生成游戏物体的效果截图

场景中出现了一个Box,而且在Hierarchy面板中也有一个Box游戏物体括号里有(Clone),意思是这个Box是从Box预制体上克隆过来的。


-------我是美丽的分割线---------------------------------------------------------------------------------------------------------

下面来引申一下,Vector3.up表示在场景中原点上方一米的位置生成一个Box, 假如我们要在任意指定的一个位置生成一个Box呢,再或者在任何一个随机位置生成一个Box呢,下面就看操作吧。

  • 指定位置生成一个Box

这种情况我们只需要给Vector3类型参数指定一个新的位置参数就可以了

GameObject.Instantiate(m_prefab, new Vector3(1,2,3),Quaternion.identity);

new Vector3(x,y,z)随意指定参数

  • 随机位置生成一个Box

随机位置用Random.Rang(min,max)函数成成随机的x,y,z值就可以了

首先获得min和max的值:在场景中新建一个cube,拖拽cube测量场景长宽的min和max

可以看到x轴左边,x值为4.5

x轴右边,x值为-4.5

所以min为-4.5,max为4.5

同理可以得到z轴的最大值和最小值

y轴是上下方向就没有最小最大值的概念了可以任意指定

代码如下:

在两米高的地方,x轴z轴上随机生成游戏物体


-------我是美丽的分割线---------------------------------------------------------------------------------------------------------

第二部分销毁游戏物体

创建一个脚本DestoryBox--->添加到预制体Box上

脚本添加到Box上方法:点中预制体Box--->Inspector面板中,下方Add Component,搜索找到CreatBox脚本组件


脚本中代码:


代码解释:

GameObject.Destroy(gameObject,2.0f);

Destory是静态方法,用类名加点的形式调用

方法中有两个参数

gameObject表示要销毁的游戏对象自身

2.0f表示2秒后销毁,可以任意指定时间

也可以用随机数函数生成随机的销毁时间,例如:Random.Range(1.0f,5.0f),表示1到5秒之间的秒数销毁游戏对象。


-------我是美丽的分割线---------------------------------------------------------------------------------------------------------

到这里本次分享就结束了,纯小白操作,一点点的码字确实很辛苦,如果这次分享对看到这一贴的你有帮助,那就点个赞吧,这样也能激励我继续学习下去,分享下去!










©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页