Unity3d Скрипт для текстуризации нескольких обьектов из одной текстуры


Хранение нескольких текстур в одном файле png и загрузка частей текстуры для применения к объектам (выбранным префабам).
Создаем пустой объект, вешаем на него скрипт. В настройках скрипта выбираем  текстуру которую будем применять (пример на рисунке). Указываем количество объектов, перетягиваем объекты из окна иерархии в скрипт, задаем координаты x, y с которых будем вырезать текстуру, ширину и высоту для каждого обьекта.


using UnityEngine;
using System.Collections;

//[ExecuteInEditMode()]

public class _BackgroundTexturing_ : MonoBehaviour {
 
 //Для чтения графики
 public Texture2D sourceTex;
 //public ArrayList a = new ArrayList();


 public GameObject[] texObject = new GameObject[2];
 //public int[] TexCount = new int[2];
 public Rect[] sourceRect = new Rect[2];
 
 // Use this for initialization
 void Start () {

  int n = texObject.Length;

  for (int i=0; i <= n-1; i++) {
   /*//var myObject = GameObject.Find(texObject[i]);*/

   var myObject = texObject[i];


   //Читаем графику))
   int x = Mathf.FloorToInt(sourceRect[i].x);
   int y = Mathf.FloorToInt(sourceRect[i].y);

   int width = Mathf.FloorToInt(sourceRect[i].width);
   int height = Mathf.FloorToInt(sourceRect[i].height);

   Color[] pix = sourceTex.GetPixels(x, y, width, height);
   Texture2D destTex = new Texture2D(width, height);
   
   destTex.SetPixels(pix);
   destTex.Apply();
   
   myObject.renderer.material.mainTexture = destTex; //Применить текстуру к обьекту...  
  
  }
  
 }
 
 // Update is called once per frame
 void Update () {
  
 }
}