Способы получить название текстуры. - вопрос к про
Hunjeth Дата: Вс, 01 Апр 2012, 22:57 | Сообщение # 1
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
Способы получить название текстуры. у модели есть много материалов и много текстур. нужно получить название текстуры в которую попал луч. подскажите методы. (collider.transform.renderer.material.GetTexture("_MainTex")) это не прокатит
Сообщение отредактировал Hunjeth - Пн, 02 Апр 2012, 02:18
Сообщение Способы получить название текстуры. у модели есть много материалов и много текстур. нужно получить название текстуры в которую попал луч. подскажите методы. (collider.transform.renderer.material.GetTexture("_MainTex")) это не прокатит Автор - Hunjeth Дата добавления - 01 Апр 2012 в 22:57
proektEK Дата: Пн, 02 Апр 2012, 00:41 | Сообщение # 2
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
Code
renderer.material.mainTexture.name
Сообщение Code
renderer.material.mainTexture.name
Автор - proektEK Дата добавления - 02 Апр 2012 в 00:41
Hunjeth Дата: Пн, 02 Апр 2012, 01:10 | Сообщение # 3
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
mainTexture это не прокатит так как модель одна а текстур много
Сообщение mainTexture это не прокатит так как модель одна а текстур много Автор - Hunjeth Дата добавления - 02 Апр 2012 в 01:10
proektEK Дата: Пн, 02 Апр 2012, 01:23 | Сообщение # 4
Сообщений: 493
Награды:
6
Репутация:
193
Статус: Offline
Угу
Сообщение Угу Автор - proektEK Дата добавления - 02 Апр 2012 в 01:23
Hunjeth Дата: Пн, 02 Апр 2012, 02:16 | Сообщение # 5
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
Количесво материалов можно получить просто а узнать в какой попал луч не реально хотя мне это надо.
Сообщение отредактировал Hunjeth - Пн, 02 Апр 2012, 02:17
Сообщение Количесво материалов можно получить просто а узнать в какой попал луч не реально хотя мне это надо. Автор - Hunjeth Дата добавления - 02 Апр 2012 в 02:16
seaman Дата: Пн, 02 Апр 2012, 12:21 | Сообщение # 6
Гуру
Сообщений: 1748
Награды:
10
Репутация:
660
Статус: Offline
Узнать можно, но для этого нужно сохранять самому некую инфу об объекте. А именно - на каком полигоне какой материал. Потому что,- как получить номер триангла в какой ударился луч легко - triangleIndex А вот как получить какой материал на этом триангле я не нашел.
Сообщение Узнать можно, но для этого нужно сохранять самому некую инфу об объекте. А именно - на каком полигоне какой материал. Потому что,- как получить номер триангла в какой ударился луч легко - triangleIndex А вот как получить какой материал на этом триангле я не нашел. Автор - seaman Дата добавления - 02 Апр 2012 в 12:21
Hunjeth Дата: Вс, 22 Июл 2012, 02:53 | Сообщение # 7
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
все просто Спасибо (Bunny83 из Германии) за то что немного помог мне в итоге я нашел решение. Code
//Thanks to Bunny83 from Germany for help var transf : Transform; class hitmat1 { var enabled : boolean = true; var texturehit : String; @HideInInspector var tranglind : int; @HideInInspector var Layer : LayerMask = 1; } var hitmat1 : hitmat1 = hitmat1(); function Update() { var hit : RaycastHit; if (Physics.Raycast(transf.position, transf.TransformDirection(Vector3.forward), hit, 2, hitmat1.Layer)) { ind = hit.triangleIndex; if (hitmat1.tranglind != ind && hitmat1.enabled) { hitmat1.tranglind = ind; var go1 = hit.collider.gameObject; var mee = go1.GetComponent(MeshFilter).mesh; var mre = go1.GetComponent(MeshRenderer); if (mee && mre) { if (go1.renderer.materials.Length > 1) { var triangles = mee.triangles; for (var submesh = 0; submesh < mee.subMeshCount; submesh++) { var indices = mee.GetTriangles(submesh); for (var i = 0; i < indices.Length; i += 3) { if (indices[i] == triangles[ind * 3] && indices[i + 1] == triangles[ind * 3 + 1] && indices[i + 2] == triangles[ind * 3 + 2]) { hitmat1.texturehit = mre.materials[submesh].mainTexture.name.ToLower(); i = indices.Length; submesh = mee.subMeshCount; }else{ hitmat1.texturehit = "Null"; } } } }else{ mtexx = go1.renderer.material.mainTexture; if (mtexx) hitmat1.texturehit = mtexx.name.ToLower(); else hitmat1.texturehit = "Null"; } } } } }
Сообщение отредактировал Hunjeth - Вс, 22 Июл 2012, 02:54
Сообщение все просто Спасибо (Bunny83 из Германии) за то что немного помог мне в итоге я нашел решение. Code
//Thanks to Bunny83 from Germany for help var transf : Transform; class hitmat1 { var enabled : boolean = true; var texturehit : String; @HideInInspector var tranglind : int; @HideInInspector var Layer : LayerMask = 1; } var hitmat1 : hitmat1 = hitmat1(); function Update() { var hit : RaycastHit; if (Physics.Raycast(transf.position, transf.TransformDirection(Vector3.forward), hit, 2, hitmat1.Layer)) { ind = hit.triangleIndex; if (hitmat1.tranglind != ind && hitmat1.enabled) { hitmat1.tranglind = ind; var go1 = hit.collider.gameObject; var mee = go1.GetComponent(MeshFilter).mesh; var mre = go1.GetComponent(MeshRenderer); if (mee && mre) { if (go1.renderer.materials.Length > 1) { var triangles = mee.triangles; for (var submesh = 0; submesh < mee.subMeshCount; submesh++) { var indices = mee.GetTriangles(submesh); for (var i = 0; i < indices.Length; i += 3) { if (indices[i] == triangles[ind * 3] && indices[i + 1] == triangles[ind * 3 + 1] && indices[i + 2] == triangles[ind * 3 + 2]) { hitmat1.texturehit = mre.materials[submesh].mainTexture.name.ToLower(); i = indices.Length; submesh = mee.subMeshCount; }else{ hitmat1.texturehit = "Null"; } } } }else{ mtexx = go1.renderer.material.mainTexture; if (mtexx) hitmat1.texturehit = mtexx.name.ToLower(); else hitmat1.texturehit = "Null"; } } } } }
Автор - Hunjeth Дата добавления - 22 Июл 2012 в 02:53