我目前正在尝试有一个光线投射检测播放器字符有一个事件发生时,一个特定的键被按下这里是代码:
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,无论玩家角色在哪里。
3条答案
按热度按时间jvidinwx1#
我认为原因是光线投射击中了包含脚本的对象,所以碰撞器总是非空的,尝试添加一个与游戏对象的图层不同的图层蒙版
所以事情是这样的
点击游戏对象时,您可以在检查器的左上角找到该图层
bbmckpt72#
你没有在
down
上提供LayerMask
。光线投射必须与玩家的碰撞器碰撞。以防你不知道什么是图层蒙版。LayerMask可用于检测仅与其上具有该层的对象碰撞的光线投射。
每个游戏对象上的艾耶尔下拉列表指的是对象的层,如下所示:
请参阅LayerMask的Unity文档了解更多详细信息。
but5z9lq3#
如果你想在按Z键时进行光线投射,最好及时按:
关于这个问题,确保被击中的物体有碰撞器或者碰撞器是激活的。可能是光线投射方向的问题。要检查它,使用Debug.DrawRay,它可以帮助你可视化你画的光线