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
相关产品推荐
相关产品推荐

