目录

2024-12-27-Unity中实例化游戏物体和销毁游戏物体

目录

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

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

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

https://i-blog.csdnimg.cn/blog_migrate/5f49d2bc9b13375b5d2d3ef14ebc0885.jpeg

下面来看具体的操作吧。

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

https://i-blog.csdnimg.cn/blog_migrate/9798cfb80ff890ecb6c0de898ca5bdd5.png

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

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

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

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

关键代码如下:

GameObject.Instantiate(Object,Vector3,Quaternion)

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

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

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

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

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

代码截图如下:

https://i-blog.csdnimg.cn/blog_migrate/afd197f58ac3e20ec85c236ecb1e34e1.png

代码中比较关键的一句:

public GameOject  m_prefab;

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

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

https://i-blog.csdnimg.cn/blog_migrate/0f92175afb3d6e2d33cd4f80167a092a.png

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

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

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

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

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

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

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

https://i-blog.csdnimg.cn/blog_migrate/d010ad56754cad851b362a3cb0c17884.png

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

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

  • 指定位置生成一个Box

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

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

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

https://i-blog.csdnimg.cn/blog_migrate/c3ad5f67106860aff667f102dd4afd5e.png

  • 随机位置生成一个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轴是上下方向就没有最小最大值的概念了可以任意指定

https://i-blog.csdnimg.cn/blog_migrate/00c556cbbdefc023df14cfb4eae9e2d4.png

https://i-blog.csdnimg.cn/blog_migrate/d7292152a71d0e6521d8a4ee6c0d6574.png

代码如下:

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

https://i-blog.csdnimg.cn/blog_migrate/10876ca44ded2c76756fcaea7b5bee36.png

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

第二部分销毁游戏物体

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

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

https://i-blog.csdnimg.cn/blog_migrate/408e75b603c12e483d20db42201bcb25.png

脚本中代码:

https://i-blog.csdnimg.cn/blog_migrate/9816a0cf95e4e38964aa3d70481d83a2.png

代码解释:

GameObject.Destroy(gameObject,2.0f);

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

方法中有两个参数

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

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

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

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

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

687474:70733a2f2f626c6f672e6373646e2e6e65742f6c6565353134:2f61727469636c652f64657461696c732f3830393935303438