使用Unity制作射击游戏,屏幕内的每一个子弹都需要一个游戏对象,如果是单发武器还好,项目里复制几个对象,然后下面的代码就能不断循环使用。
1 2 | transform.SetAsLastSibling(); bulletsTransform = transform.GetChild(0); |
但如果需要使用连发武器,比如加特林之类的,同一时间屏幕上可能会出现许多的子弹。如果还是事先复制一堆子弹对象,就显得特别low,这里就需要动态创建子弹对象了。
首先,新建预制体子弹对象“Bullet1”,然后将其拖入Assets/Resources目录内(只有名为“Resources”目录内的资源才能动态加载)。
然后就可以在代码内创建、使用预制体对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 | //代码片段1,加载预制体, 创建对象 GameObject bullet = Resources.Load("Bullet1") as GameObject; //加载预制体 bullet = Instantiate(bullet); //使用这种方式加载预制体,必须序列化后才能使用 bullet.transform.parent = cannonsTransform; //设置父级对象 bullet.transform.localScale = bulltScale; //设置大小。。。预制体似乎为包含拖到修改大小的信息,这里使用中一个Vector3对象重新设置其大小 bullet.transform.position = beginPos; //使用一个Vector3对象,设置初始位置 runingBullets.Add(bullet.transform); //加入到队列 //代码片段2,销毁预制体 if(...){ Destroy(runingBullets[i].gameObject); //销毁对象 runingBullets.RemoveAt(i); //移出队列 } |
再unity中,创建对象是很耗资源的操作,正式项目建议创建后不要轻易销毁,而是通过SetActive(false/true)循环使用。
——-
原创内容,转载请注明出处:http://www.jiangkl.com/2021/04/unity_new_prefabs