C# 光线投射Masklayers或距离的统一问题
我试着制造两种类型的敌人,近战和远程,所以我试着让他们都有一个光线投射给玩家,以知道他们是否能看到玩家并且足够近,但是我有两个问题。第一个是当我检查敌人和玩家之间的距离时,总是0,第二个是Raycast不会在应该打印的时候打印。 让我解释一下,我在敌人面前,它能看到我,但其他时候不是,在同样的条件下,所以我不知道我错过了什么 这是我的密码:C# 光线投射Masklayers或距离的统一问题,c#,unity3d,C#,Unity3d,我试着制造两种类型的敌人,近战和远程,所以我试着让他们都有一个光线投射给玩家,以知道他们是否能看到玩家并且足够近,但是我有两个问题。第一个是当我检查敌人和玩家之间的距离时,总是0,第二个是Raycast不会在应该打印的时候打印。 让我解释一下,我在敌人面前,它能看到我,但其他时候不是,在同样的条件下,所以我不知道我错过了什么 这是我的密码: using System.Collections; using System.Collections.Generic; using UnityEng
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对不起,耽搁了。你是用图层任务
来对付敌人还是玩家?你能分享一张敌人和玩家的照片吗检查器
窗口?编辑:好的,我改变了一些东西,现在它总是看到角色。我需要检查哪一层是命中的这应该足够了:)