unity3d 我的光线投射有问题

euoag5mw  于 2022-12-23  发布在  其他
关注(0)|答案(3)|浏览(256)

我目前正在尝试有一个光线投射检测播放器字符有一个事件发生时,一个特定的键被按下这里是代码:

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

public class action: MonoBehaviour
{
    public float dist;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        RaycastHit2D down = Physics2D.Raycast(transform.position, -Vector2.up, dist);
        Debug.Log(transform.position);
        if (Input.GetKeyDown(KeyCode.Z) == true && down.collider != null)
        {
            Debug.Log("hi");
        }  
    }
}

我基本上是尝试做一个小的光线投射,这就是为什么我放置了一个距离,而不是让它无限地移动,并让它这样,如果光线投射被触发,玩家按下z,事件发生(现在是调试控制台),但它现在所做的是触发每当我按下z,无论玩家角色在哪里。

jvidinwx

jvidinwx1#

我认为原因是光线投射击中了包含脚本的对象,所以碰撞器总是非空的,尝试添加一个与游戏对象的图层不同的图层蒙版

所以事情是这样的

RaycastHit2D down = Physics2D.Raycast(transform.position, -Vector2.up, 
    dist , 1 << /*The Target's Layer*/);

点击游戏对象时,您可以在检查器的左上角找到该图层

bbmckpt7

bbmckpt72#

你没有在down上提供LayerMask。光线投射必须与玩家的碰撞器碰撞。以防你不知道什么是图层蒙版。

LayerMask可用于检测仅与其上具有该层的对象碰撞的光线投射。

每个游戏对象上的艾耶尔下拉列表指的是对象的层,如下所示:

请参阅LayerMask的Unity文档了解更多详细信息。

but5z9lq

but5z9lq3#

如果你想在按Z键时进行光线投射,最好及时按:

// Update is called once per frame
void Update()
{       
    if (Input.GetKeyDown(KeyCode.Z)){            
        RaycastDown()
    }  
}

private void RaycastDown()
{
    Debug.Log("Player position: " + transform.position);
    RaycastHit2D hit = Physics2D.Raycast(transform.position, 
    Vector2.down, dist);
    if(hit.collider != null){
        Debug.Log($"Hit object: {hit.transform.name}" );
    }
}

关于这个问题,确保被击中的物体有碰撞器或者碰撞器是激活的。可能是光线投射方向的问题。要检查它,使用Debug.DrawRay,它可以帮助你可视化你画的光线

相关问题