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

Unity中如何在两个向量间生成随机位置?解决物体无法生成问题

修复Unity中物体无法在指定X轴区间生成的问题

你的问题核心是**trans变量未初始化**,直接访问trans.position会触发空引用异常,导致Spawner方法执行失败,物体完全无法生成。另外你的位置更新逻辑也有可优化的地方,下面是具体修复方案:

修复后的完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class OrbSpawner : MonoBehaviour
{
    public GameObject orb;
    private Vector3 minimum;
    private Vector3 maximum;
    private Transform trans;
    public float timeofspawning;
    public float spawnrate;

    private void Awake()
    {
        // 初始化trans为当前物体的Transform组件
        trans = transform;
        InvokeRepeating("Spawner", timeofspawning, spawnrate);
        minimum = new Vector3(-2, 6, 0);
        maximum = new Vector3(2, 6, 0);
    }

    public void Spawner()
    {
        // 仅在生成时计算随机位置,避免Update里的无效运算
        float x = Random.Range(minimum.x, maximum.x);
        // Y和Z轴值固定,直接使用常量即可
        Vector3 spawnPos = new Vector3(x, 6, 0);
        Instantiate(orb, spawnPos, Quaternion.identity);
    }
}

关键修改说明

  1. 初始化trans变量:在Awake方法中添加trans = transform;,将其指向当前挂载脚本物体的Transform组件,彻底解决空引用问题。
  2. 优化位置计算逻辑:移除Update方法里的位置更新代码,直接在Spawner方法中计算随机坐标——你不需要实时更新位置,只需要在生成物体时获取一次随机值即可,减少不必要的性能消耗。
  3. 简化Y/Z轴赋值:因为你的min和max的Y、Z值完全相同,没必要调用Random.Range,直接使用固定值6和0即可。

额外检查点

  • 确认Inspector面板中orb字段已经正确赋值了预制体
  • 确认挂载该脚本的物体处于激活状态
  • 如果设置timeofspawning和spawnrate为0,会立刻生成大量物体,注意场景性能

内容的提问来源于stack exchange,提问作者kaski fx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:18