浏览代码

Merge pull request #38109 from nekomatata/mesh-instance-active-material

Fix get_active_material when a material is directly set on the mesh
Rémi Verschelde 5 年之前
父节点
当前提交
a800048071
共有 1 个文件被更改,包括 12 次插入9 次删除
  1. 12 9
      scene/3d/mesh_instance_3d.cpp

+ 12 - 9
scene/3d/mesh_instance_3d.cpp

@@ -307,19 +307,22 @@ Ref<Material> MeshInstance3D::get_surface_material(int p_surface) const {
 
 
 Ref<Material> MeshInstance3D::get_active_material(int p_surface) const {
 Ref<Material> MeshInstance3D::get_active_material(int p_surface) const {
 
 
-	if (get_material_override() != Ref<Material>()) {
-		return get_material_override();
-	} else if (p_surface < materials.size()) {
-		return materials[p_surface];
-	} else {
-		Ref<Mesh> mesh = get_mesh();
+	Ref<Material> material_override = get_material_override();
+	if (material_override.is_valid()) {
+		return material_override;
+	}
 
 
-		if (mesh.is_null() || p_surface >= mesh->get_surface_count()) {
-			return Ref<Material>();
-		}
+	Ref<Material> surface_material = get_surface_material(p_surface);
+	if (surface_material.is_valid()) {
+		return surface_material;
+	}
 
 
+	Ref<Mesh> mesh = get_mesh();
+	if (mesh.is_valid()) {
 		return mesh->surface_get_material(p_surface);
 		return mesh->surface_get_material(p_surface);
 	}
 	}
+
+	return Ref<Material>();
 }
 }
 
 
 void MeshInstance3D::_mesh_changed() {
 void MeshInstance3D::_mesh_changed() {