Instantiate(预制体,transform.position,transform.rotation);
创建一个5*5*5的正方体的代码如下,
public class InstantiationTest : MonoBehaviour
{
public GameObject myPrefab;
public int 长 = 5;
public int 宽 = 5;
public int 高 = 5;
void Start()
{
for(int y = 0; y < 高; y++)
{
for(int x = 0; x < 宽; x++)
{
for (int z = 0; z < 高; z++)
{
Instantiate(myPrefab, new Vector3(x, y, z), Quaternion.identity);
}
}
}
}
}
把预制件拖动到脚本的myPrefab字段里
创建方块组成的圆圈 转自官方手册在运行时实例化预制件 - Unity 手册
// 以圆形形式实例化预制件
public GameObject prefab;
public int numberOfObjects = 20;
public float radius = 5f;
void Start()
{
for (int i = 0; i < numberOfObjects; i++)
{
float angle = i * Mathf.PI * 2 / numberOfObjects;
float x = Mathf.Cos(angle) * radius;
float z = Mathf.Sin(angle) * radius;
Vector3 pos = transform.position + new Vector3(x, 0, z);
float angleDegrees = -angle * Mathf.Rad2Deg;
Quaternion rot = Quaternion.Euler(0, angleDegrees, 0);
Instantiate(prefab, pos, rot);
}
}
效果图如下,来自官方手册
实例化飞弹和爆炸,来自官方手册
以下脚本显示了如何使用 Instantiate() 函数来发射飞弹,脚本放在枪管上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FireProjectile : MonoBehaviour
{
//这个脚本通过在放置它的GameObject的位置实例化它来发射一个预制的投射物,然后在同一个GameObject的前进方向上设置速度。
public Rigidbody projectile;
public float speed = 4;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Rigidbody p = Instantiate(projectile, transform.position, transform.rotation);
p.velocity = transform.forward * speed;
}
}
}
以下脚本(放置在飞弹预制件上)执行以下操作:在飞弹碰撞物体后,在飞弹的当前位置实例化爆炸,然后删除飞弹游戏对象。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Projectile : MonoBehaviour
{
//这个脚本放置在一个抛射的GameObject上
public GameObject explosion;
void Start()
{
//抛射物在10秒后被删除,无论它是否与任何物体碰撞(为了防止丢失的实例永远留在场景中)
Destroy(gameObject,10);
}
void OnCollisionEnter()
{
//击中某物:引起爆炸,并移除抛射物
Instantiate(explosion,transform.position,transform.rotation);
Destroy(gameObject);
}
}
效果图