【问题标题】:Unity raycast possible bug?Unity raycast 可能的错误?
【发布时间】:2018-07-22 14:48:13
【问题描述】:

这是我在学校项目游戏中的光线投射代码。如果我将脚本放在对象上,一切正常。但是如果我关闭 Unity 并重新打开我的项目,“jakDaleko” = distance 的值将保持锁定在 1129.395,而不是每帧都更改。

我应该改变什么,这样它每次都能正常工作,而不仅仅是第一次按下播放按钮。

这是我的代码。

脚本 1 = 光线投射


public class SmerDivani : MonoBehaviour {

public static float VzdalenostOdCile;
public float VzdalenostOdCileInterni;


// Update is called once per frame
void Update() {    
    RaycastHit Hit;
    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out Hit)) { 
        VzdalenostOdCileInterni = Hit.distance;
        VzdalenostOdCile = VzdalenostOdCileInterni;
    }
}

}

第二个脚本


public class TabuleMesto1 : MonoBehaviour
{

public float JakDaleko;
public GameObject AkceTlacitko;
public GameObject AkceText;
public GameObject UIQuest;
public GameObject ThePlayer;
public GameObject NoticeCam;

void Update() {
    JakDaleko = SmerDivani.VzdalenostOdCile;
}

void OnMouseOver() {
    if (JakDaleko <= 5) {
        AkceTlacitko.SetActive(true);
        AkceText.SetActive(true);
    }

    if (JakDaleko > 5)
    {
        AkceTlacitko.SetActive(false);
        AkceText.SetActive(false);
    }

    if (Input.GetButtonDown("Akce")) {
        if (JakDaleko <= 5) {
            AkceTlacitko.SetActive(false);
            AkceText.SetActive(false);
            UIQuest.SetActive(true);
            NoticeCam.SetActive(true);
            ThePlayer.SetActive(false);
        }
    }
}

void OnMouseExit() { 
    AkceTlacitko.SetActive(false);
    AkceText.SetActive(false);
}


}

【问题讨论】:

  • 附注:在 C# 中,就像在其他所有编程语言中一样,通常的做法是用英文命名所有标识符。阅读JakDaleko = SmerDivani.VzdalenostOdCile 的开发人员不知道这个东西是做什么的,如果他/她不懂你的语言。
  • @dymanoid 谢谢。我会尽量用 ENG 写一切。
  • 另外,VzdalenostOdCileVzdalenostOdCileInterni 的意义何在?一个是静态的,我看到了静态的用法,但是你为什么要那样做呢? VzdalenostOdCileInterni 是否在任何地方使用?

标签: c# unity3d


【解决方案1】:

我不太确定你想要达到什么目的?也许这应该“解决”你的问题,如果光线投射没有命中,你就不会清除距离......

void Update() {   

    RaycastHit Hit;
    if (Physics.Raycast(transform.position, transform.forward, out Hit)) { 
        VzdalenostOdCileInterni = Hit.distance;   
    }
    else {
        VzdalenostOdCileInterni = 0.0f;
    }
    VzdalenostOdCile = VzdalenostOdCileInterni;
}

另外我认为你应该使用 transform.forward 而不是 transform.TransformDirection(Vector3.forward)

【讨论】:

  • @Draco18s 我使用而不是调试日志。当我测试游戏时,公共值显示在检查器中
【解决方案2】:

我认为最大的问题是文件名。出于某种原因,包括我的愚蠢,解决方案是将脚本从 table1 重命名为 table_1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多