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

Unity相机发射预制体:如何实现随鼠标位置调整左右发射方向

解决Unity相机发射预制体随鼠标方向调整的问题

嘿,我完全懂你的困扰——现在你的球体不管鼠标在屏幕左还是右,都一个劲往屏幕中间飞,根本没跟着鼠标方向走对吧?这问题核心出在脚本的发射方向计算逻辑上,和相机Inspector设置关系不大,咱们来把它改过来:

问题根源

你当前的代码应该是基于屏幕中心的射线来计算发射方向,而不是鼠标所在位置对应的屏幕坐标射线。所以不管鼠标在哪,球体都只会朝着屏幕中心的方向飞。

修改后的完整代码

下面是调整后的脚本,我把关键逻辑标出来了:

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

public class PlayerShoot : MonoBehaviour
{
    // 拖拽你的球体预制体到这里
    public GameObject projectilePrefab;
    // 调整发射力度
    public float launchForce = 15f;

    void Update()
    {
        // 按下鼠标左键发射(你可以改成自己的触发键)
        if (Input.GetMouseButtonDown(0))
        {
            ShootAtMouseDirection();
        }
    }

    void ShootAtMouseDirection()
    {
        // 1. 获取当前鼠标的屏幕坐标(屏幕左下角是(0,0),右上角是(Screen.width, Screen.height))
        Vector3 mouseScreenPosition = Input.mousePosition;
        
        // 2. 从主相机向鼠标位置发射一条射线,把屏幕坐标转换成世界空间的方向
        Ray mouseRay = Camera.main.ScreenPointToRay(mouseScreenPosition);

        // 3. 创建预制体,发射点设为相机位置(你也可以改成枪头之类的自定义位置)
        GameObject newProjectile = Instantiate(projectilePrefab, transform.position, Quaternion.identity);
        
        // 4. 给球体刚体加力,方向就是射线的方向
        Rigidbody projectileRb = newProjectile.GetComponent<Rigidbody>();
        if (projectileRb != null)
        {
            // 用Impulse模式瞬间施加力,符合发射的手感
            projectileRb.AddForce(mouseRay.direction * launchForce, ForceMode.Impulse);
        }
        else
        {
            Debug.LogWarning("你的预制体上没有Rigidbody组件!加力会无效哦");
        }
    }
}

关键细节说明

  • 相机标签:确保你的主相机已经勾选了MainCamera标签,不然Camera.main会找不到相机,代码会报错
  • 刚体组件:你的球体预制体必须添加Rigidbody组件,而且要把Use Gravity打开(如果需要重力效果),不然加力后球体不会动
  • 正交相机适配:如果你的相机用的是正交投影,射线方向的计算要改一下,因为正交相机的射线是平行的,把方向计算改成这样:
    Vector3 worldMousePos = Camera.main.ScreenToWorldPoint(new Vector3(mouseScreenPosition.x, mouseScreenPosition.y, Camera.main.nearClipPlane));
    Vector3 shootDirection = (worldMousePos - transform.position).normalized;
    
    然后用shootDirection来加力就行

关于Inspector设置

其实这个问题基本不用调相机的Inspector,除非你相机的投影模式选错了(比如本来想用透视却选了正交),或者相机的Field of View太极端导致方向看起来奇怪,但核心还是脚本逻辑的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:38