Unity运行时生成的GameObject相机不可见及缩放异常问题
Unity正交相机下网格线显示异常排查方案
问题现象
- 通过Cube生成网格线后,正交相机模式下,修改Camera Size属性前部分网格线不可见
- 调整Camera Size后,部分网格线出现宽度不一致(正交投影本应保持统一尺寸显示)
- 怀疑与剔除(Culling)相关,但找不到对应设置
生成网格的代码
GameObject go_grid = new GameObject("Grid"); for(int i = -24; i < 24; i++) { GameObject go_gridline = GameObject.CreatePrimitive(PrimitiveType.Cube); go_gridline.transform.position = new Vector3 (i*2.7f, 0, 0); go_gridline.transform.localScale = new Vector3 (0.2f, 1, 75); go_gridline.transform.parent = go_grid.transform; }
解决方案
一、解决部分网格线不可见的问题
- 检查相机裁剪平面:在Camera组件的
Clipping Planes中,将Near设为更小值(如-100)、Far设为更大值(如100)。你的网格线Z轴缩放为75,半长37.5,若相机Far小于37.5或Near大于-37.5,部分网格线会被裁剪。 - 验证相机Culling Mask:确保网格线所在的Layer(默认是Default)在Camera组件的
Culling Mask中被勾选,未勾选的Layer物体不会被相机渲染。 - 确认相机视口范围:正交相机的
Size控制垂直视口高度,初始Size太小会导致部分网格线超出视口,调整Size后可见属于正常,但需结合裁剪平面设置确保完整显示。
二、解决正交投影下宽度不一致的问题
- 重置父物体缩放:检查
go_grid的transform.localScale是否为(1,1,1)。父物体的缩放会叠加到子物体上,若父物体非等比缩放,会导致网格线显示变形。 - 适配相机Aspect Ratio:在Camera组件的
Projection设置中,将Aspect Ratio改为与Game窗口一致的比例,或设置Match为Width or Height,确保正交投影的水平/垂直缩放均匀。 - 检查裁剪导致的视觉变形:若部分网格线被Near/Far平面裁剪(比如Z轴方向超出范围),会出现视觉上的宽度变窄。调整
Clipping Planes后重新观察。 - 检查Quality Settings:打开
Edit > Project Settings > Quality,确保Scaling Mode为Scale With Screen Size且比例适配,避免因屏幕缩放导致物体显示变形。
额外建议
用Cube生成网格线效率较低,推荐改用LineRenderer组件绘制网格线,不仅避免3D物体的裁剪/缩放问题,还能减少性能开销。
内容的提问来源于stack exchange,提问作者Ishkur
相关产品推荐
相关产品推荐

