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

Unity 3D中如何让游戏对象发射固定向前的3D投射物?

Unity 俯视视角3D投射物向前发射实现方案

1. 准备投射物预制体

  • 创建一个3D物体(如球体、胶囊体)作为投射物原型
  • 添加Rigidbody组件,取消勾选Use Gravity(避免投射物下落)
  • 添加合适的Collider组件(如Sphere Collider),用于后续碰撞检测
  • 将该物体保存为预制体(拖到Project面板)

2. 设置发射点

  • 在玩家胶囊体的前方(比如枪口位置)创建一个空物体,命名为FirePoint
  • 调整FirePoint的位置和旋转,使其与玩家的“向前”方向保持一致

3. 编写发射脚本

将以下脚本挂载到玩家胶囊体上,在Inspector面板中赋值对应的参数:

using UnityEngine;

public class PlayerShoot : MonoBehaviour
{
    [Header("射击参数")]
    public GameObject projectilePrefab;
    public Transform firePoint;
    public float projectileSpeed = 12f;
    public float fireInterval = 0.2f;

    private float _nextFireTimestamp;

    void Update()
    {
        // 按空格键触发发射,可自行替换为其他按键
        if (Input.GetKeyDown(KeyCode.Space) && Time.time >= _nextFireTimestamp)
        {
            _nextFireTimestamp = Time.time + fireInterval;
            LaunchProjectile();
        }
    }

    void LaunchProjectile()
    {
        // 实例化投射物到发射点位置
        GameObject newProjectile = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);
        // 给投射物赋予向前的速度
        Rigidbody rb = newProjectile.GetComponent<Rigidbody>();
        rb.velocity = firePoint.forward * projectileSpeed;
        // 自动销毁投射物,避免内存泄漏
        Destroy(newProjectile, 3f);
    }
}

4. 关键注意事项

  • 确保玩家的forward方向是游戏内的“前进”方向(和移动方向匹配),如果方向不符,可直接调整玩家Transform的旋转,或在代码中替换为transform.forward
  • 在Project Settings的Physics面板中配置碰撞层矩阵,避免投射物与玩家自身发生碰撞
  • 若需要投射物有伤害逻辑,可在投射物预制体上添加额外脚本,处理碰撞触发后的伤害计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:17:22