我试图制造 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);
}
我希望它对你有所帮助。