如何设置单个网格实例的颜色?

How do I set the color of a single meshinstance?

我有一个简单的角色场景,我在主场景中实例化了几次。它是一个运动学 body,具有网格实例和碰撞形状 children。我已将以下脚本附加到场景中,目的是我可以在编辑器中轻松更改角色的 body 颜色。

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
    new_material.albedo_color = new_color
    $BodyMesh.material_override = new_material
    body_color = new_color

此脚本按预期工作,只是当我更改一个字符的颜色时,所有字符都会更改颜色。仅更改一个字符的颜色的最佳方法是什么?

此 KinematicBody 的所有实例都变得相同 char_material,您在 change_color 中对其进行了修改。在修改之前复制 material:

var new_material := char_material.duplicate()