You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:45:04