Разные теги на Terrain?! - Форум Игроделов
Пн, 20 Май 2024, 02:19 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Разные теги на Terrain?!
Разные теги на Terrain?!
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)
 
СообщениеAntaresMultitag

Автор - Левша
Дата добавления - 08 Апр 2012 в 18:46
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
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Разные теги на Terrain?!
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024