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

Unity脚本开发:如何将RenderTexture绑定至GameObject材质?

问题解决:将相机渲染纹理赋值给立方体材质

你注释的代码错误在于直接把RenderTexture对象赋值给了Material类型的变量——sharedMaterial是材质实例,而RenderTexture是纹理资源,二者类型不匹配。正确做法是把RenderTexture赋值给材质的对应纹理属性(比如默认Shader的主纹理_MainTex)。

修正后的完整代码

GameObject cubo = Instantiate(cuboprefab);
GameObject camara = Instantiate(prefabCamara);
cubo.transform.position = new Vector3(0, 0, 0);
camara.transform.position = new Vector3(0, 0.5f, 3);
rt = new RenderTexture(256, 256, 16, RenderTextureFormat.ARGB32);
rt.useDynamicScale = true;
rt.Create(); 
var compcam = camara.GetComponent<Camera>();
compcam.targetTexture = rt;

// 修正部分:给材质的纹理属性赋值
Renderer cuboRenderer = cubo.GetComponent<Renderer>();
// 用material而非sharedMaterial,避免修改预制件的原始材质
cuboRenderer.material.SetTexture("_MainTex", rt);

额外注意事项

  • 材质实例选择:用material会自动创建当前对象的材质副本,仅对该立方体生效;如果用sharedMaterial,会直接修改预制件的材质,场景中所有同预制件的对象都会同步变化。
  • 纹理属性名适配:如果你的立方体用了自定义Shader,主纹理属性名可能不是_MainTex(比如URP默认是_BaseMap),需要替换成Shader面板里实际显示的属性名。
  • 资源清理:RenderTexture属于GPU资源,在对象销毁或场景切换时,记得调用rt.Release()或Destroy(rt)释放内存,避免泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:05:03