Hi there, I am encountering some trouble in my code and was hoping someone would be kind enough to assist me in wrapping my head around this.
The scene:
1 game-object with 5 child-objects, with differing materials.
- 1 child with paint.
- 2 children with plastic.
- 2 children with metal.
The goal:
To attach a script to the parent object, “The Thing” and to be able to edit ONLY the children who share the black-plastic material.
I’ve set up a few buttons, when clicked, it will run the script that’s attached to the parent object:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PaintChange3 : MonoBehaviour {
Renderer[] children;
public Material[] plastics;
// Use this for initialization
void Start ()
{
//children is a reference to the renderers
children = GetComponentsInChildren<Renderer>();
foreach (Renderer rend in children)
{
//make array of all materials in renderer
Material[] materials = rend.materials;
}
}
//Changes Plastic
public void ChangePlastic(Material matPlastics)
{
foreach (Renderer rend in children)
{
var mats = new Material[rend.materials.Length];
for (var j = 0; j < rend.materials.Length; j++)
{
mats[j] = matPlastics;
}
rend.materials = mats;
}
Debug.Log("Changed Plastics, Maybe?");
}
}
The problem with my script is that it affects every child’s renderer, I do not know how to target just the plastic children. How should I approach this solution?
Thank you again!