Resources.Load
Dushik Дата: Пт, 19 Июл 2013, 16:40 | Сообщение # 1
Сообщений: 22
Награды:
0
Репутация:
0
Статус: Offline
Привет всем ! Постораюсь объяснить как можно кратче. У меня есть 3 объекта, для каждого объекта есть по 4 текстуры. При нажатии на определеные NGUI кнопки в переменную objMat; добавляется какой то один из трех объектов и в зависимости от того какое имя у этого объекта открывается доступ к его 4-м текстурам и потом я выбираю понравившуюся текстуру, сами текстуры динамически загружаются из папки Resources. Поидее после запуска игры все переменные в этом скрипте должны быть пустыми, но на деле получается что всем переменным с текстурами сразу же присвоены текстуры ПОСЛЕДНЕГО объекта в скрипте (в моем случае это culinder1) Код
using UnityEngine; using System.Collections; public class ChangeMaterial : MonoBehaviour { public Texture2D _texture01; public Texture2D _texture02; public Texture2D _texture03; public Texture2D _texture04; public GameObject objMat; // Сюда заносится объект который включен в данный момент, заносится он из скрипта CreateObject. void Update() { objMat = gameObject.GetComponent<CreateObjects>().ONobj; if (!objMat) { this._texture01 = null; this._texture02 = null; this._texture03 = null; this._texture04 = null; } if (objMat == GameObject.Find ("sphere1")) { string _texturePath01 = "Material&Texture/01/sphere01mat1"; string _texturePath02 = "Material&Texture/01/sphere01mat2"; string _texturePath03 = "Material&Texture/01/sphere01mat3"; string _texturePath04 = "Material&Texture/01/sphere01mat4"; _texture01 = (Texture2D)Resources.Load(_texturePath01, typeof(Texture2D)); _texture02 = (Texture2D)Resources.Load(_texturePath02, typeof(Texture2D)); _texture03 = (Texture2D)Resources.Load(_texturePath03, typeof(Texture2D)); _texture04 = (Texture2D)Resources.Load(_texturePath04, typeof(Texture2D)); } if (objMat == GameObject.Find ("box1")) { string _texturePath01 = "Material&Texture/02/box02mat1"; string _texturePath02 = "Material&Texture/02/box02mat2"; string _texturePath03 = "Material&Texture/02/box02mat3"; string _texturePath04 = "Material&Texture/02/box02mat4"; _texture01 = (Texture2D)Resources.Load(_texturePath01, typeof(Texture2D)); _texture02 = (Texture2D)Resources.Load(_texturePath02, typeof(Texture2D)); _texture03 = (Texture2D)Resources.Load(_texturePath03, typeof(Texture2D)); _texture04 = (Texture2D)Resources.Load(_texturePath04, typeof(Texture2D)); } if (objMat == GameObject.Find ("culinder1")) { string _texturePath01 = "Material&Texture/03/culinder03mat1"; string _texturePath02 = "Material&Texture/03/culinder03mat2"; string _texturePath03 = "Material&Texture/03/culinder03mat3"; string _texturePath04 = "Material&Texture/03/culinder03mat4"; _texture01 = (Texture2D)Resources.Load(_texturePath01, typeof(Texture2D)); _texture02 = (Texture2D)Resources.Load(_texturePath02, typeof(Texture2D)); _texture03 = (Texture2D)Resources.Load(_texturePath03, typeof(Texture2D)); _texture04 = (Texture2D)Resources.Load(_texturePath04, typeof(Texture2D)); }
Сообщение Привет всем ! Постораюсь объяснить как можно кратче. У меня есть 3 объекта, для каждого объекта есть по 4 текстуры. При нажатии на определеные NGUI кнопки в переменную objMat; добавляется какой то один из трех объектов и в зависимости от того какое имя у этого объекта открывается доступ к его 4-м текстурам и потом я выбираю понравившуюся текстуру, сами текстуры динамически загружаются из папки Resources. Поидее после запуска игры все переменные в этом скрипте должны быть пустыми, но на деле получается что всем переменным с текстурами сразу же присвоены текстуры ПОСЛЕДНЕГО объекта в скрипте (в моем случае это culinder1) Код
using UnityEngine; using System.Collections; public class ChangeMaterial : MonoBehaviour { public Texture2D _texture01; public Texture2D _texture02; public Texture2D _texture03; public Texture2D _texture04; public GameObject objMat; // Сюда заносится объект который включен в данный момент, заносится он из скрипта CreateObject. void Update() { objMat = gameObject.GetComponent<CreateObjects>().ONobj; if (!objMat) { this._texture01 = null; this._texture02 = null; this._texture03 = null; this._texture04 = null; } if (objMat == GameObject.Find ("sphere1")) { string _texturePath01 = "Material&Texture/01/sphere01mat1"; string _texturePath02 = "Material&Texture/01/sphere01mat2"; string _texturePath03 = "Material&Texture/01/sphere01mat3"; string _texturePath04 = "Material&Texture/01/sphere01mat4"; _texture01 = (Texture2D)Resources.Load(_texturePath01, typeof(Texture2D)); _texture02 = (Texture2D)Resources.Load(_texturePath02, typeof(Texture2D)); _texture03 = (Texture2D)Resources.Load(_texturePath03, typeof(Texture2D)); _texture04 = (Texture2D)Resources.Load(_texturePath04, typeof(Texture2D)); } if (objMat == GameObject.Find ("box1")) { string _texturePath01 = "Material&Texture/02/box02mat1"; string _texturePath02 = "Material&Texture/02/box02mat2"; string _texturePath03 = "Material&Texture/02/box02mat3"; string _texturePath04 = "Material&Texture/02/box02mat4"; _texture01 = (Texture2D)Resources.Load(_texturePath01, typeof(Texture2D)); _texture02 = (Texture2D)Resources.Load(_texturePath02, typeof(Texture2D)); _texture03 = (Texture2D)Resources.Load(_texturePath03, typeof(Texture2D)); _texture04 = (Texture2D)Resources.Load(_texturePath04, typeof(Texture2D)); } if (objMat == GameObject.Find ("culinder1")) { string _texturePath01 = "Material&Texture/03/culinder03mat1"; string _texturePath02 = "Material&Texture/03/culinder03mat2"; string _texturePath03 = "Material&Texture/03/culinder03mat3"; string _texturePath04 = "Material&Texture/03/culinder03mat4"; _texture01 = (Texture2D)Resources.Load(_texturePath01, typeof(Texture2D)); _texture02 = (Texture2D)Resources.Load(_texturePath02, typeof(Texture2D)); _texture03 = (Texture2D)Resources.Load(_texturePath03, typeof(Texture2D)); _texture04 = (Texture2D)Resources.Load(_texturePath04, typeof(Texture2D)); }
Автор - Dushik Дата добавления - 19 Июл 2013 в 16:40
Левша Дата: Пт, 19 Июл 2013, 18:15 | Сообщение # 2
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Материалы в редакторе, при тесте так себя ведут, в билде такого не будет.
X.cor.R (Prologue)
Сообщение Материалы в редакторе, при тесте так себя ведут, в билде такого не будет. Автор - Левша Дата добавления - 19 Июл 2013 в 18:15
Dushik Дата: Пт, 19 Июл 2013, 18:39 | Сообщение # 3
Сообщений: 22
Награды:
0
Репутация:
0
Статус: Offline
Цитата (Левша )
Материалы в редакторе, при тесте так себя ведут, в билде такого не будет.
Да нет в билде тоже самое =(( Я даже для проверки создал NGUI Label в который пишется надпись когда выполняется условие if (objMat == GameObject.Find ("culinder1")).... Он почему то при старте думает что к переменной objMat применен объект culinder1, хотя в переменной ничего нет.
Сообщение Цитата (Левша )
Материалы в редакторе, при тесте так себя ведут, в билде такого не будет.
Да нет в билде тоже самое =(( Я даже для проверки создал NGUI Label в который пишется надпись когда выполняется условие if (objMat == GameObject.Find ("culinder1")).... Он почему то при старте думает что к переменной objMat применен объект culinder1, хотя в переменной ничего нет.Автор - Dushik Дата добавления - 19 Июл 2013 в 18:39
Левша Дата: Пт, 19 Июл 2013, 20:29 | Сообщение # 4
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Я честно говоря мало что понял... кто - что там думает. Но код работает так, как ты его написал, это без вариантов. Проверь свою логику, где то ошибся.
X.cor.R (Prologue)
Сообщение Я честно говоря мало что понял... кто - что там думает. Но код работает так, как ты его написал, это без вариантов. Проверь свою логику, где то ошибся. Автор - Левша Дата добавления - 19 Июл 2013 в 20:29
Hunjeth Дата: Сб, 20 Июл 2013, 17:04 | Сообщение # 5
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
функция Update работает когда скрипт включен. тоесть при старте у тебя выполняеться функция Update.. в инспекторе убрать галочку на ChangeMaterial тогда у тебя не будет работать скрипт чтобы включить твой скрипт в коде пропиши : Код
ChangeMaterial changeMaterial = ....GetComponent<ChangeMaterial>(); changeMaterial.enabled = true;
Доп.. фунции типо : Resources.Load GetComponent<>() лучше поместить в Start или Awake Awake выполняеться 1 раз без разн скрипт вкл или вык, лучше подходит для сериализации типо GetComponent<>() Start выполняеться 1 раз когда скрипт вкл, лучше подходит для загрузки и настройки типо Resources.Load, myvar = 10, myvar = false, enabled = false
Сообщение отредактировал Hunjeth - Сб, 20 Июл 2013, 18:54
Сообщение функция Update работает когда скрипт включен. тоесть при старте у тебя выполняеться функция Update.. в инспекторе убрать галочку на ChangeMaterial тогда у тебя не будет работать скрипт чтобы включить твой скрипт в коде пропиши : Код
ChangeMaterial changeMaterial = ....GetComponent<ChangeMaterial>(); changeMaterial.enabled = true;
Доп.. фунции типо : Resources.Load GetComponent<>() лучше поместить в Start или Awake Awake выполняеться 1 раз без разн скрипт вкл или вык, лучше подходит для сериализации типо GetComponent<>() Start выполняеться 1 раз когда скрипт вкл, лучше подходит для загрузки и настройки типо Resources.Load, myvar = 10, myvar = false, enabled = false Автор - Hunjeth Дата добавления - 20 Июл 2013 в 17:04