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

Godot中如何设置单个MeshInstance的颜色且不影响其他同场景实例

问题原因

你遇到的所有实例颜色同步修改的问题,核心是Godot中预加载的资源默认是共享引用的:你代码中直接修改预加载得到的char_material属性,本质是修改了res://Materials/Character_material.tres这个原始材质资源,所有使用该预加载资源的角色实例自然会同步变色。

最优实现方案

只要在赋值材质前,对预加载的原始材质执行复制操作,生成每个角色实例独有的材质副本即可,修改后的代码如下:

tool
extends KinematicBody

const char_material = preload("res://Materials/Character_material.tres")
export var body_color: Color setget change_color

func change_color(new_color: Color):
    # 复制原始材质得到实例专属材质,避免修改共享资源
    var new_material = char_material.duplicate()
    new_material.albedo_color = new_color
    $BodyMesh.material_override = new_material
    body_color = new_color

优化版(适配频繁改色场景)

如果后续需要频繁修改单个角色的颜色,可以缓存实例专属的材质副本,避免每次修改都重复复制材质带来的额外开销:

tool
extends KinematicBody

const char_material = preload("res://Materials/Character_material.tres")
export var body_color: Color setget change_color
# 缓存当前实例的专属材质
var _instance_material: Material = null

func change_color(new_color: Color):
    if not _instance_material:
        _instance_material = char_material.duplicate()
        $BodyMesh.material_override = _instance_material
    _instance_material.albedo_color = new_color
    body_color = new_color

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:05