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

