C# 调试不起作用

C# 调试不起作用,c#,debugging,unity3d,C#,Debugging,Unity3d,当我玩游戏时,它工作正常,但当我调试脚本时。断点转到下一个执行语句,当我按下unity上的跳转按钮时,会话不会转到调试器,它不工作。但是当我停止对MonoDevelop的调试时,游戏工作正常。 代码 公共类玩家:单行为{ 私人住宅; 私人浮动收费泵; 私有浮动最大跳跃; 无效开始(){ onGround=正确; 电荷泵=0f; maxJump=10f; } 无效更新(){ 如果(每轮){ if(Input.GetButton(“跳转”)){ 如果(chargedJump(根据建议将我的评

当我玩游戏时,它工作正常,但当我调试脚本时。断点转到下一个执行语句,当我按下unity上的跳转按钮时,会话不会转到调试器,它不工作。但是当我停止对
MonoDevelop
的调试时,游戏工作正常。

代码

公共类玩家:单行为{
私人住宅;
私人浮动收费泵;
私有浮动最大跳跃;
无效开始(){
onGround=正确;
电荷泵=0f;
maxJump=10f;
}
无效更新(){
如果(每轮){
if(Input.GetButton(“跳转”)){
如果(chargedJump(根据建议将我的评论转换为答案…)


基本上,您在这里所做的是调试所有Unity,而不仅仅是您的游戏代码。这有一个很大的区别:当您在MonoDevelop中处于断点时,Unity编辑器不会响应您的输入!如果您想调试按Jump时发生的情况,请尝试将断点放在第47行


第47行是一个断点,只有在您的条件为真时才会被命中,并且(严重)在计算条件之后。第44行是一个断点,在计算条件之前,每帧都会命中该断点。它会停止Unity的运行,因此您不能单击Unity并在该点按键来影响代码流。这恐怕是调试的一个基本原则:您不能在断点处与进程交互除了通过调试器

也就是说:当您在第44行设置断点时,您的代码正在响应,但是在第44行(每帧)设置断点时,您没有任何有用的方法来按下一个键以便调试代码进行检测,因为您无法切换到Unity并在下一个断点被命中之前按下一个键

(作为一个我不鼓励的旁注:如果你在代码周围加上一个延迟,阻止它被调用/命中断点一两秒钟,那么可能会起作用。你可以按住Unity键,直到命中断点,此时输入系统可能会识别按键。这种状态仍然有效。)但是,这是一件可怕的事情,所以我不推荐这样做


如果您想证明该值被设置为仅在按下该键时才会命中的条件断点,您可以尝试什么…)

基本上,你在这里做的是调试Unity,而不是调试你的游戏代码。当你在Monodevelop的代码中遇到断点时,Unity编辑器不会响应你的输入!如果你想调试当你按下Jump时发生的事情,试着将断点放在你的行上。@DanPuzey line
47
res暂停输入,但如果我将点中断到第
44行,为什么它不响应,因为我想检查它是否为真。第47行是一个断点,只有在您的条件为真时才会命中,并且(严重)在计算条件之后。第44行是一个断点,在计算条件之前,每一帧都会命中该断点。它会停止Unity的运行,因此您不能单击Unity并在该点按键来影响代码流。这恐怕是调试的一个基本原则:您不能在断点处与进程交互也就是说,当您在第44行中断时,代码正在响应,但在第44行中断(每帧)没有任何有用的方法可以按键让调试过的代码进行检测。@DanPuzey想知道您的扩展解释是否值得改编成一个答案?可能对未来尝试使用断点的Unity脚本编写者有所帮助。我上载了一个新的图像,即图像3,我想调试该脚本。我中断了该方法,但当我启动deb时我不知道该怎么做,请发表评论一旦你问了一个问题,你就不能如此彻底地改变它(特别是当它已经被回答了!)。发布一个新的问题。
public class player : MonoBehaviour {
    private bool onGround;

    private float chargedJump;

    private float maxJump;

    void Start () {

        onGround = true;

        chargedJump = 0f;

        maxJump = 10f;

    }
    void Update () {
        if(onGround){

                     if(Input.GetButton("Jump")){

                if(chargedJump<maxJump){
                    chargedJump +=Time.deltaTime*10f;
                }
                else{
                    chargedJump = maxJump;
                }

            }
            }