C# 光线投射Masklayers或距离的统一问题

C# 光线投射Masklayers或距离的统一问题,c#,unity3d,C#,Unity3d,我试着制造两种类型的敌人,近战和远程,所以我试着让他们都有一个光线投射给玩家,以知道他们是否能看到玩家并且足够近,但是我有两个问题。第一个是当我检查敌人和玩家之间的距离时,总是0,第二个是Raycast不会在应该打印的时候打印。 让我解释一下,我在敌人面前,它能看到我,但其他时候不是,在同样的条件下,所以我不知道我错过了什么 这是我的密码: using System.Collections; using System.Collections.Generic; using UnityEng

我试着制造两种类型的敌人,近战和远程,所以我试着让他们都有一个光线投射给玩家,以知道他们是否能看到玩家并且足够近,但是我有两个问题。第一个是当我检查敌人和玩家之间的距离时,总是0,第二个是Raycast不会在应该打印的时候打印。 让我解释一下,我在敌人面前,它能看到我,但其他时候不是,在同样的条件下,所以我不知道我错过了什么

这是我的密码:

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

public class EnemyMelee : EnemyBase {
    public int rangoAttack;
    RaycastHit hit;

    int layerMask = 1 << 2;


    void Update () {
        perseguir();
        attackMele();

    }

    void attackMele() {


        if (Physics.Raycast(transform.position, player.transform.position, layerMask)){         
            print(hit.distance);
        }

        Debug.DrawLine(transform.position, player.transform.position, Color.red);

    }

}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类EnemyMelee:EnemyBase{
公共国际空袭;
雷卡斯特击中;

int layerMask=1出现第一个问题是因为您没有在代码中使用
hit
。因此
hit.distance=0

出现第二个问题是因为在
physical.Raycast(transform.position,player.transform.position,layerMask)
中,您应该在第二个参数(不是端点)中设置方向。您可以通过以下方式计算方向:
Vector3 direction=player.transform.position-transform.position

请尝试以下代码:

RaycastHit hit;
int layerMask = 1 << 2;
public float maxDistance;

void Update () 
{
    attackMele();
}

void attackMele() 
{
    Vector3 direction = player.transform.position - transform.position;

    if (Physics.Raycast(transform.position, direction, out hit, maxDistance, layerMask))
        print(hit.distance);

    Debug.DrawLine(transform.position, player.transform.position, Color.red);
}
raycastthit;

int layerMask=1但为什么它不在远处一直打印?它在需要时停止打印,我不明白为什么(不管它是否看到我)@AxelVelasco如果距离大于
maxDistance
,它不会打印。你检查过距离吗?是的,我检查过说它可能像100,但它从来没有给出正确的距离,因为总是小于1(当想要打印时,因为通常不这样做)编辑:我不知道这是否重要,但敌人正在以一种积极的姿态前进navmesh@AxelVelasco对不起,耽搁了。你是用
图层任务
来对付敌人还是玩家?你能分享一张敌人和玩家的照片吗
检查器
窗口?编辑:好的,我改变了一些东西,现在它总是看到角色。我需要检查哪一层是命中的这应该足够了:)