123_XanteR_456 Дата: Вс, 08 Апр 2012, 16:47 | Сообщение # 1
Сообщений: 169
Награды:
0
Репутация:
35
Статус: Offline
Собственно сабж. Например у меня на террайне есть грязь(на неё один тег),есть асфальт(на него другой тег) и т.д. Делать мешем не предлагать(слишком сложно для меня).
Неплохо знаю JavaScript(Unity3D API) =)
Сообщение Собственно сабж. Например у меня на террайне есть грязь(на неё один тег),есть асфальт(на него другой тег) и т.д. Делать мешем не предлагать(слишком сложно для меня). Автор - 123_XanteR_456 Дата добавления - 08 Апр 2012 в 16:47
Левша Дата: Вс, 08 Апр 2012, 18:46 | Сообщение # 2
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
AntaresMultitag
X.cor.R (Prologue)
123_XanteR_456 Дата: Вс, 08 Апр 2012, 18:49 | Сообщение # 3
Сообщений: 169
Награды:
0
Репутация:
35
Статус: Offline
Вопрос решён!
Неплохо знаю JavaScript(Unity3D API) =)
Сообщение Вопрос решён! Автор - 123_XanteR_456 Дата добавления - 08 Апр 2012 в 18:49
Hunjeth Дата: Вс, 08 Апр 2012, 19:55 | Сообщение # 4
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
это не возможно если только 1 тег я тебе советую найти путь узнать на какой текстуре стоит тот или иной объект. если найдешь ответ мне тоже напиши Теги вешать на объект можно когда их мало а если их больше 1000 то уже стоит подумать что это глупо.
Сообщение отредактировал Hunjeth - Вс, 08 Апр 2012, 20:02
Сообщение это не возможно если только 1 тег я тебе советую найти путь узнать на какой текстуре стоит тот или иной объект. если найдешь ответ мне тоже напиши Теги вешать на объект можно когда их мало а если их больше 1000 то уже стоит подумать что это глупо. Автор - Hunjeth Дата добавления - 08 Апр 2012 в 19:55
waruiyume Дата: Вт, 10 Апр 2012, 05:48 | Сообщение # 5
Сообщений: 85
Награды:
1
Репутация:
37
Статус: Offline
Можно узнать какой прототип, сильнее всего воздействует на некоторую точку террейна, например: На землю: Code
using UnityEngine; public class Terr : MonoBehaviour { private Terrain terr; private byte[,] splatIndex; private Vector3 size; private Vector3 tPos; private int width; private int height; void Start () { terr = GetComponent<Terrain>(); CalcHiInflPrototypeIndexesPerPoint(); } private void CalcHiInflPrototypeIndexesPerPoint() { TerrainData terrainData = terr.terrainData; size = terrainData.size; width = terrainData.alphamapWidth; height = terrainData.alphamapHeight; int prototypesLength = terrainData.splatPrototypes.Length; tPos = terr.GetPosition(); float[, ,] alphas = terrainData.GetAlphamaps(0, 0, width, height); splatIndex = new byte[width, height]; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { byte ind = 0; float t = 0f; for (byte i = 0; i < prototypesLength; i++) if (alphas[x, y, i] > t) { t = alphas[x, y, i]; ind = i; } splatIndex[x, y] = ind; } } } public int GetMaterialIndex(Vector3 pos) { pos = pos - tPos; pos.x /= size.x; pos.z /= size.z; return splatIndex[(int)(pos.z * (width - 1)), (int)(pos.x * (height - 1))]; } }
На камеру: Code
using UnityEngine; public class TestCaster:MonoBehaviour { private RaycastHit hit; private int matIndex; void Update() { if(Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition),out hit)) { Terr t = hit.transform.GetComponent<Terr>(); if(t!=null) { matIndex = t.GetMaterialIndex(hit.point); } } } void OnGUI() { GUI.Box(new Rect(10,10,50,50),matIndex.ToString() ); } }
Сообщение отредактировал waruiyume - Вт, 10 Апр 2012, 06:43
Сообщение Можно узнать какой прототип, сильнее всего воздействует на некоторую точку террейна, например: На землю: Code
using UnityEngine; public class Terr : MonoBehaviour { private Terrain terr; private byte[,] splatIndex; private Vector3 size; private Vector3 tPos; private int width; private int height; void Start () { terr = GetComponent<Terrain>(); CalcHiInflPrototypeIndexesPerPoint(); } private void CalcHiInflPrototypeIndexesPerPoint() { TerrainData terrainData = terr.terrainData; size = terrainData.size; width = terrainData.alphamapWidth; height = terrainData.alphamapHeight; int prototypesLength = terrainData.splatPrototypes.Length; tPos = terr.GetPosition(); float[, ,] alphas = terrainData.GetAlphamaps(0, 0, width, height); splatIndex = new byte[width, height]; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { byte ind = 0; float t = 0f; for (byte i = 0; i < prototypesLength; i++) if (alphas[x, y, i] > t) { t = alphas[x, y, i]; ind = i; } splatIndex[x, y] = ind; } } } public int GetMaterialIndex(Vector3 pos) { pos = pos - tPos; pos.x /= size.x; pos.z /= size.z; return splatIndex[(int)(pos.z * (width - 1)), (int)(pos.x * (height - 1))]; } }
На камеру: Code
using UnityEngine; public class TestCaster:MonoBehaviour { private RaycastHit hit; private int matIndex; void Update() { if(Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition),out hit)) { Terr t = hit.transform.GetComponent<Terr>(); if(t!=null) { matIndex = t.GetMaterialIndex(hit.point); } } } void OnGUI() { GUI.Box(new Rect(10,10,50,50),matIndex.ToString() ); } }
Автор - waruiyume Дата добавления - 10 Апр 2012 в 05:48
123_XanteR_456 Дата: Вт, 10 Апр 2012, 18:19 | Сообщение # 6
Сообщений: 169
Награды:
0
Репутация:
35
Статус: Offline
Спс!
Неплохо знаю JavaScript(Unity3D API) =)
Сообщение Спс! Автор - 123_XanteR_456 Дата добавления - 10 Апр 2012 в 18:19