You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中C#代码CS7036错误修复后调用无显示问题求助

Unity Render工具类DrawBox无显示问题排查与解决

一、先明确Rect构造的正确用法

Rect的标准构造必须传入四个float参数:Rect(float x, float y, float width, float height),你之前遇到的CS7036错误就是因为参数不全,现在修正后编译通过,这一步没问题。

二、DrawBox无显示的常见原因及解决方法

  • 必须在Unity指定的生命周期函数里调用绘制方法
    Unity的绘制逻辑有严格的执行时机:

    • 如果用Gizmos系列方法(比如DrawCube),得放在OnDrawGizmos()或OnDrawGizmosSelected()中,同时要确保Scene视图顶部的「Gizmos」按钮是开启状态。
    • 如果用GUI/GUILayout系列方法(比如Box),必须写在OnGUI()函数里,并且Rect的坐标要落在当前屏幕的可见范围内(比如x不超过Screen.width,y不超过Screen.height)。
  • 检查Rect的参数是否合理
    如果Rect的width或height设为0,或者x/y超出了屏幕/视图范围,绘制的盒子会直接不可见。比如:

    // 错误示例:宽为0,盒子完全看不见
    Rect badRect = new Rect(100, 100, 0, 50);
    // 正确示例:设置合理的位置和尺寸
    Rect goodRect = new Rect(100, 100, 150, 80);
    
  • 确认绘制方法的参数逻辑是否匹配
    不同绘制方法对Rect的解读不一样:

    • 用Gizmos.DrawCube时,第一个参数是中心点坐标,如果直接把Rect的x/y当中心点,会导致位置偏移。正确转换方式:
      Rect rect = new Rect(100, 100, 150, 80);
      Vector3 center = new Vector3(rect.x + rect.width/2, rect.y + rect.height/2, 0);
      Gizmos.DrawCube(center, new Vector3(rect.width, rect.height, 0));
      
    • 用GUI.Box时,Rect是基于屏幕像素的坐标,比如要在屏幕中央画盒子:
      Rect screenRect = new Rect(Screen.width/2 - 75, Screen.height/2 - 40, 150, 80);
      GUI.Box(screenRect, "Test Box");
      
  • 检查绘制颜色是否和背景冲突
    默认Gizmos是灰色,如果Scene视图背景也是灰色,就会看不见。可以在绘制前手动设置颜色:

    void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Rect rect = new Rect(100, 100, 150, 80);
        Vector3 center = new Vector3(rect.x + rect.width/2, rect.y + rect.height/2, 0);
        Gizmos.DrawCube(center, new Vector3(rect.width, rect.height, 0));
    }
    
  • 确认脚本挂载的对象处于激活状态
    如果挂载Render工具类的GameObject是未激活状态,对应的生命周期函数不会执行,自然不会绘制任何内容。要确保Hierarchy面板里的该对象是勾选激活的。

三、完整示例代码参考

这里提供一个包含两种绘制方式的工具类示例:

using UnityEngine;

public class RenderUtils : MonoBehaviour
{
    // 屏幕UI盒子绘制(OnGUI回调)
    void OnGUI()
    {
        Rect screenBox = new Rect(Screen.width/2 - 100, Screen.height/2 - 50, 200, 100);
        GUI.Box(screenBox, "Screen Box");
    }

    // Scene视图Gizmo盒子绘制(OnDrawGizmos回调)
    void OnDrawGizmos()
    {
        Gizmos.color = Color.blue;
        Rect worldRect = new Rect(0, 0, 2, 2);
        Vector3 center = new Vector3(worldRect.x + worldRect.width/2, worldRect.y + worldRect.height/2, 0);
        Gizmos.DrawCube(center, new Vector3(worldRect.width, worldRect.height, 0.1f));
    }
}

内容的提问来源于stack exchange,提问作者Apollo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:50:10