2024-12-27-Unity中实例化游戏物体和销毁游戏物体
Unity中实例化游戏物体和销毁游戏物体
Unity中实例化物体是很常见的,例如坦克大战中你用子弹打中一个坦克之后,分数加1然后场景中又会生成新的坦克。这个过程中就存在一次游戏物体销毁(子弹打中坦克后,坦克销毁)和一次游戏物体实例化(场景中又生成新的坦克),这算Unity中实例化游戏物体和销毁游戏物体的一个实际应用场景吧。
首先附上实例化游戏物体的思维导图
下面来看具体的操作吧。
- 在Unity中新建一个场景,创建一个Prefab物体,这里建了名为Box的预制体
- 创建一个空的游戏物体用来实例化生成Box
操作如下:Hierarchy—>Creat Empty—>重命名为CreatBox—>新建一个脚本名称为CreatBox拖拽到CreatBox游戏物体上
这一步比较简单就不截图了。
- 打开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:表示生成的物体无旋转
- 生成游戏物体的效果截图
场景中出现了一个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秒之间的秒数销毁游戏对象。
——-我是美丽的分割线———————————————————————————————————
到这里本次分享就结束了,纯小白操作,一点点的码字确实很辛苦,如果这次分享对看到这一贴的你有帮助,那就点个赞吧,这样也能激励我继续学习下去,分享下去!
687474:70733a2f2f626c6f672e6373646e2e6e65742f6c6565353134:2f61727469636c652f64657461696c732f3830393935303438