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

Unity C#射击脚本实现子弹生成时克隆异常与坐标错误问题

问题1:对象指数级克隆的解决方法

  • 根因:脚本被挂载到了多个对象上、且bullet字段错误赋值了带该脚本的Glock对象,每次生成的克隆体也附带生成逻辑,每次点击所有存在的该脚本实例都会触发一次生成,导致数量指数增长
  • 修复步骤:
    1. 单独制作子弹预设体:创建独立的子弹GameObject(按需添加碰撞体、Rigidbody、子弹模型等组件),存储为Prefab,不要使用Glock对象作为子弹预设
    2. 清理脚本挂载:确保场景中仅bulletSpawn这一个对象挂载了spawnBullet脚本,Glock对象、子弹预设上均不挂载该脚本
    3. 脚本参数赋值:将做好的独立子弹预设拖入bulletSpawn挂载的spawnBullet组件的bullet字段中

问题2:生成位置错误的解决方法

  • 根因:代码中写死了生成坐标为世界坐标(0,0,0),没有使用bulletSpawn自身的位置参数
  • 修复方法:将Instantiate方法的位置参数替换为transform.position(脚本挂载在bulletSpawn上,transform就对应bulletSpawn的变换组件,直接取它的世界坐标即可),旋转参数替换为transform.rotation保证子弹发射方向和枪口朝向一致

修正后完整代码

using UnityEngine;

public class spawnBullet : MonoBehaviour
{
    public GameObject bullet;

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            // 位置和旋转都取当前bulletSpawn的参数
            GameObject newBullet = Instantiate(bullet, transform.position, transform.rotation);
            // 如需子弹自动向前飞行可取消下方注释,根据需求调整飞行速度数值
            // newBullet.GetComponent<Rigidbody>().velocity = transform.forward * 20f;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:24:03