Unity中如何在指定位置实例化GameObject对象
解决方案
你当前的代码存在两处核心问题:
- 调用的
Instantiate方法仅传入了预制体参数,生成的对象默认会出现在世界坐标原点(0,0,0),没有走自定义位置逻辑 - 实例化逻辑写在
Update生命周期中会每帧生成一个新对象,无触发条件的场景下会快速生成大量冗余对象占用内存
修改后代码示例
你可以使用Instantiate的重载方法传入自定义位置、旋转参数,同时增加触发条件避免无限制生成:
using UnityEngine; public class clone : MonoBehaviour { public GameObject fruit; // 方案1:直接在Inspector面板输入自定义生成坐标 public Vector3 spawnPosition = new Vector3(1, 2, 0); // 方案2:也可以拖入场景中的空物体作为生成锚点,自动取锚点的坐标 // public Transform spawnPoint; void Update() { // 示例:按下空格键才执行生成逻辑 if (Input.GetKeyDown(KeyCode.Space)) { // 用方案1的坐标生成,Quaternion.identity代表使用预制体默认旋转 Instantiate(fruit, spawnPosition, Quaternion.identity); // 如果用方案2的锚点,就改成: // Instantiate(fruit, spawnPoint.position, spawnPoint.rotation); } } }
补充说明
- 如果需要生成的对象挂载到指定父物体下,可以在重载里再加第四个父物体Transform参数:
Instantiate(fruit, spawnPosition, Quaternion.identity, 父物体Transform) - 如果你确实需要定时批量生成,推荐用
InvokeRepeating或者协程实现,不要直接写在Update里无判断调用
内容的提问来源于stack exchange,提问作者ROTOMEGA
相关产品推荐
相关产品推荐

