Debug.DrawRay 未在场景中显示

分享于2022年07月17日 c# debugging game-development unity3d 问答
【问题标题】:Debug.DrawRay 未在场景中显示(Debug.DrawRay not showing in the scene)
【发布时间】:2022-07-10 15:30:59
【问题描述】:

我尝试查看所有类似的问题,但似乎找不到问题所在,我正在使用模板学习,然后通过视频进行说明,但一切正常,.cs文件没有显示任何错误或问题,我可以完美运行所有内容,除了 if 函数

if (Physics2D.Raycast(transform.position, Vector3.down, 0.1f))
        {
            Grounded = true;
        }
        else Grounded = false;

因为一旦我按下 W 键,它就会“跳跃”,如果我一直按下该键,它就会一直“浮动” 喜欢flappy bird,我也放了Debug。 Drawray 为了显示这个光线投射但它没有在编辑器中显示,我尝试将值从 0.1f 更改为 100f 但它没有显示,我是新来的,所以可能是一些标点符号或者我做了一个输入代码错误。

这是完整的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class JhonMovement : MonoBehaviour
{
    public float JumpForce;
    public float Speed;

    private Rigidbody2D Rigidbody2D;
    private float Horizontal;
    private bool Grounded;

    void Start()
    {
        Rigidbody2D = GetComponent();
    }

    void Update()
    {
        
        Horizontal = Input.GetAxisRaw("Horizontal");

        Debug.DrawRay(transform.position, Vector3.down * 0.1f, Color.red);
        if (Physics2D.Raycast(transform.position, Vector3.down, 0.1f))
        {
            Grounded = true;
        }
        else Grounded = false;

        if (Input.GetKeyDown(KeyCode.W) && Grounded)
        {
            Jump();
        }

    }

    private void FixedUpdate()
    {
        Rigidbody2D.velocity = new Vector2(Horizontal * Speed, Rigidbody2D.velocity.y);
    }

    private void Jump()
    {
        Rigidbody2D.AddForce(Vector2.up * JumpForce);
    }

如果我输入或不输入“if”选项,角色的行为是否相同,不知道我在哪里犯了错误,我检查了一下,似乎没问题。

感谢您的帮助。

  • 尝试设置 depthTest: false ,这样光线就不会被任何物体(包括例如这个相同的物体)阻挡/隐藏
  • 我不确定您是否还有问题,但我按照相同的教程遇到了完全相同的情况。答案是 在游戏处于预览模式之前不会绘制射线 。按照教程,我感觉调试射线会一直被绘制,但实际情况是,为了使其可见,您必须运行游戏预览,然后返回编辑器视图。谢谢。希望我的评论能澄清你的疑惑。

【解决方案1】:
  1. 单击 Gizmos 确保它已打开,如果您看到相机图标则说明它已打开
  2. 或光线长度太小而无法看到,
  3. 降至 #Scene

你看到 Shaded 点击并更改为 Wireframe

private void OnDrawGizmos()//used to see Ray in editor without update function
{
  //your Ray code here
  //before i click play i like to hide this method 
 Debug.DrawRay(transform.position, Vector2.down * 1f, Color.white); // try this
}

  • 使用私人空隙我可以看到光线,我检查了所有内容,Gizmos 已打开,光线长度还可以(我也在 100f 处尝试过,但看不到它),在#Scene 中我也尝试过着色,线框和两者,什么都没有,为什么我在Update函数中使用简单的Ray代码看不到它?
  • 发送图像你想做什么,我认为你的代码是错误的,你使用 2D.Raycast 和 Vector3 使用 Vector2。
  • @puzzlessouls 这是应该发生的事情: ibb.co/tpF8JDdhttps://ibb.co/4ScbjsN 从技术上和理论上讲,在我编写的代码中也应该发生,但不明白为什么它不会发生。我想知道这段代码 if (Physics2D.Raycast(transform.position, Vector3.down, 0.1f)) { Grounded = true; }否则接地=假;工作正常,所以光线不会太大或太小而无法触及“地面”,因此它不会在半空中跳跃。
  • 图片链接失效再发一个