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

Unity开发:求直线上指定距离红点的坐标(反射投掷功能)

Illustration

求解直线上红点的坐标

已知图中标注的所有参数,且红点与参考点的距离为0.2,需要获取该红点坐标并传入Debug.DrawLine(需Vector3参数),用于实现带反射效果的投掷功能。

现有代码:

using UnityEngine;

public class raycast : MonoBehaviour
{
    void Update()
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.up);
        if (hit.collider != null) 
        {
            float angle = 360 - Mathf.Abs(transform.eulerAngles.z);
            Debug.DrawLine(transform.position, hit.point);
            float totalRot = 270 - (90 + angle);
            print(hit.point);
        }
    }
}

解决方案

要计算目标红点坐标,核心是利用方向向量的单位化与距离缩放,步骤如下:

  1. 确定参考点(当前物体位置transform.position)和直线方向(transform.up,对应物体的上方向)
  2. 将方向向量单位化(确保长度为1),乘以设定的距离0.2,得到从参考点到红点的偏移量
  3. 参考点坐标加上偏移量,即为红点的最终坐标

修改后的代码如下:

using UnityEngine;

public class raycast : MonoBehaviour
{
    // 红点与参考点的距离,可在Inspector面板中调整
    public float redPointDistance = 0.2f;

    void Update()
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.up);
        if (hit.collider != null) 
        {
            // 计算红点坐标
            Vector3 redPointPos = transform.position + transform.up.normalized * redPointDistance;
            
            // 绘制参考点到红点的直线(用红色区分)
            Debug.DrawLine(transform.position, redPointPos, Color.red);
            // 保留原有碰撞射线的绘制
            Debug.DrawLine(transform.position, hit.point);
            
            print("红点坐标:" + redPointPos);
            print("碰撞点坐标:" + hit.point);
        }
    }
}

特殊情况处理

如果直线方向不是transform.up,而是基于图中标注角度计算的方向,可以通过旋转向量生成目标方向:

// 假设已知角度angle(单位:度),生成对应方向向量
Vector3 targetDirection = Quaternion.Euler(0, 0, angle) * Vector3.up;
Vector3 redPointPos = transform.position + targetDirection.normalized * redPointDistance;

由于是2D场景,Vector3的z轴会自动继承参考点的数值(默认0),完全适配Debug.DrawLine的参数要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:01:24