【问题标题】:RayCastHit2D does not detect PlayerRayCastHit2D 未检测到播放器
【发布时间】:2018-09-07 11:17:38
【问题描述】:

我正在尝试从实例化的导弹预制件中投射 2D 射线,如下所示:

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

public class EnemyMissile : MonoBehaviour {


    void Update () {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down,1f);
        Debug.DrawRay(transform.position, Vector2.down, Color.green);
        if(hit)
        {
            print("Hit");
        }
        else
        {
            print("No hit");
        }
    }
}

我可以清楚地看到光线穿过玩家的场景:

Player 有一个 Rigidbody2D 和一个 BoxCollider2D 作为触发器:

EnemyMissile 有自己的 RigidBody2D 和 BoxCollider2D 作为触发器:

但是我看不到控制台上打印任何内容

从导弹发射射线的想法是在 EnemyMissile 向玩家飞去时播放 AudioClip。

我见过: Raycast Hit Collider is Always NULL Physics2D.Raycast returning null

感谢您的帮助。

EDIT 回答@Monofuse 评论:当我选择播放器时,变换是: x:0.4567,y:-1.58,z:0

当我选择导弹时,变换是: x:0.3699,y:-1.054,z:0

编辑回答@Ada Nub:

我默认选中了两个选项:Queries Hit Triggers 和 Queries Start in Colliders。

现在我在 Colliders 中取消了查询开始,但是结果是一样的,我在控制台上看不到打印:

我意识到我的错误,我没有按下控制台中的信息选项卡:

现在它可以工作了:

【问题讨论】:

  • 它们是否都在同一个 y 轴上?也许它们在 X 和 Z 上碰撞,但不在 Y 上。
  • 啊,所以这是一个愚蠢的错误哈哈发生在我们最好的人身上:P

标签: c# unity3d game-physics raycasting


【解决方案1】:

您是否在编辑 > 项目设置 > Physics2D 中打开了“查询命中触发器”? 默认情况下,光线投射不会触发触发器,因此这可能是您的问题。

Image of 'Queries hit triggers' option

它下面的选项“查询从对撞机开始”也可能值得研究;由于您是从导弹的对撞机内部投射光线投射,因此您可能希望取消选中该选项,这样它就不会将它开始的导弹计算为命中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2015-08-17
    相关资源
    最近更新 更多