【问题标题】:Unity Problem with Raycasting Masklayers or distance光线投射遮罩层或距离的统一问题
【发布时间】:2019-03-28 01:58:40
【问题描述】:

我正在尝试制造 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 脚本只是通过 nav.SetDestination (player.position) 向玩家移动;

敌人的图片(还不能上传图片):https://ibb.co/eq7pMV

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    第一个问题出现是因为您没有在代码中使用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);
    }
    

    希望对你有帮助。

    【讨论】:

    • 但是为什么它不一直打印距离?它会在需要时停止打印,但我不明白为什么(不管它是否看到我)
    • @AxelVelasco 如果距离大于maxDistance,则不打印。你检查距离吗?
    • 是的,我检查说它可以像 100,它不会给出正确的距离,因为总是小于 1(当想要打印时,因为通常不这样做)编辑:我不知道是否重要,但敌人正在使用导航网移动
    • @AxelVelasco 抱歉耽搁了。你对敌人或玩家使用LayerMask 吗?可以分享一张敌人和玩家的照片Inspectorwindow吗?
    • 编辑:好的,我改变了一些东西,现在它总是能看到角色。我需要检查正在击中的图层,这应该足够了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2021-09-16
    • 2023-03-10
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    相关资源
    最近更新 更多