光线投射蒙版层或距离的统一问题



我试图制造 2 种类型的敌人,近战和远程敌人,所以我尝试两者都对玩家进行光线投射,以了解他们是否可以看到玩家并且足够近,但我有两个问题。第一个是当我检查敌人和玩家之间的距离时总是 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);
}
}

敌人在第 2 层

Pd:EnemyBase 脚本只是通过导航向玩家移动。SetDestination (player.position(;

敌人的图像(尚无法上传图像(:https://ibb.co/eq7pMV

出现第一个问题是因为您在代码中不使用hit。所以hit.distance = 0.

出现第二个问题是因为Physics.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);
}

我希望它对你有所帮助。

最新更新