forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   C# Быстрый поворот/перемещение множества объектов (http://forum.boolean.name/showthread.php?t=14047)

pax 13.01.2011 22:38

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Ответы по работе с террейном тут:
http://unity3d.com/support/documenta...rrainData.html
По поводу нормалей... рейкаст в сторону террейна(т.е. вниз) - один из вариантов.

ABTOMAT 14.01.2011 00:07

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от pax (Сообщение 175552)
Ответы по работе с террейном тут:
http://unity3d.com/support/documenta...rrainData.html
По поводу нормалей... рейкаст в сторону террейна(т.е. вниз) - один из вариантов.

Ну вы, юнитоиды, совсем *****нулись - рейкасты приплетать? Ладно - новички, но ты, pax?

1. Берём 3 точки на поверхности террайна (и не говорите мне, что в юнити так нельзя) - сам куб + 2 любые рядом.
2. Из них делаем два вектора с началом в кубе.
3. Векторно перемножаем.
4. Нормаль готова, получите и распишитесь.

Обычно не пишу в юнити-тредах, ибо посчитают, что троллю, но тут уж промолчать было преступно.

Evgen 14.01.2011 00:13

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от ABTOMAT (Сообщение 175561)
1. Берём 3 точки на поверхности террайна (и не говорите мне, что в юнити так нельзя) - сам куб + 2 любые рядом.
2. Из них делаем два вектора с началом в кубе.
3. Векторно перемножаем.
4. Нормаль готова, получите и распишитесь.

Да ладно, вообщем с высотой я уже разобрался.
А вот с нормалью тупик.
Делаю так:

Код:

Vector3 n=terrainData.GetInterpolatedNormal(x/1024,y/1024);
cube.transform.rotation = Quaternion.Euler(n);

GetInterpolatedNormal возвращает Vector3 я так понял в Радианах, но может быть и нет. А Quaternion.Euler должен быть вроде бы в градусах.
Кубики не ворочаются так как числа варьируются не от 0-360, а от ~0..1.
Как преобразовать?

pax 14.01.2011 00:16

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Спасибо за комплимент, всегда рад о себе хорошее услышать.
По первой ссылке которую я привел, есть все что связано с террейном (и heghtMap тоже). Извини меня конечно, но написал "один из вариантов". Когда я болею, я не могу вспоминать все сразу, да я знаю как нормаль к треугольнику посчитать. Зато видишь, новые люди в разделе общаться начали ;)

pax 14.01.2011 00:20

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от Evgen (Сообщение 175562)
GetInterpolatedNormal возвращает Vector3 я так понял в Радианах, но может быть и нет. А Quaternion.Euler должен быть вроде бы в градусах.
Кубики не ворочаются так как числа варьируются не от 0-360, а от ~0..1.
Как преобразовать?

Это не в радианах. Это нормаль к террейну, вектор ему перпендикулярный. Попробуй ее присвоить transform.up = GetInterpolatedNormal();

Evgen 14.01.2011 01:17

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от pax (Сообщение 175564)
Это не в радианах. Это нормаль к террейну, вектор ему перпендикулярный. Попробуй ее присвоить transform.up = GetInterpolatedNormal();

Заработало! :) :super:
Поправляйся PAX.

Код:

cube[t].transform.position = new Vector3(cubex[t],terrainData.GetInterpolatedHeight(cubex[t]/1024,cubey[t]/1024),cubey[t]);                       
cube[t].transform.up=terrainData.GetInterpolatedNormal(cubex[t]/1024,cubey[t]/1024);


pax 14.01.2011 01:39

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Опять же - трансформы лучше получать отдельно. Свойство transform ищет на объекте компонент Transform прежде чем его использовать - это дополнительная нагрузка. В прочем как и другие свйосва объекта типа collider, audio, camera и т.д.
Цитата:

Сообщение от Evgen (Сообщение 175567)
Поправляйся PAX.

спасибо

HolyDel 14.01.2011 19:18

Ответ: C# Быстрый поворот/перемещение множества объектов
 
АВТ, несоглашусь.

втроенные методы предпочтительнее, хотя бы из-за уровня удаления от ядра.©импер

етот рейкаст может ядром юниты быть реализован эффективнее чем три получения высоты. хотя надо тестить в любом случае...

ABTOMAT 14.01.2011 20:19

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от HolyDel (Сообщение 175597)
АВТ, несоглашусь.

втроенные методы предпочтительнее, хотя бы из-за уровня удаления от ядра.©импер

етот рейкаст может ядром юниты быть реализован эффективнее чем три получения высоты. хотя надо тестить в любом случае...

Рейкаст быстрее перемножения интенсивности текселя и скейла террейна? Ни за что не поверю.

Evgen 14.01.2011 21:10

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Кто подскажет?

Вот я создаю в GameObject примитив куб, вот так:
Цитата:

public GameObject myPrefab;
myPrefab=GameObject.CreatePrimitive(PrimitiveType. Cube);
А теперь я хочу в место куба использовать 3DS модель.
Я ее загрузил модель уже в Heractiy и Project, но как загрузить ее в сам GameObject я понять не могу.:dontknow:

pax 14.01.2011 21:17

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Не надо ее бросать в Hierarchy. У скрипта есть поле GameObject myPrefab; на него в инспекторе юнити бросаешь свою модель, а в скрипте убираешь строчку myPrefab=GameObject.CreatePrimitive(PrimitiveType. Cube);

Evgen 14.01.2011 21:31

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от pax (Сообщение 175627)
Не надо ее бросать в Hierarchy. У скрипта есть поле GameObject myPrefab; на него в инспекторе юнити бросаешь свою модель, а в скрипте убираешь строчку myPrefab=GameObject.CreatePrimitive(PrimitiveType. Cube);

Пробовал ошибка:
NullReferenceException: Object reference not set to an instance of an object
NScript.Update () (at Assets/NScript.cs:65)


Мне же надо в Start() еще эту модель от копировать. А программно никак нельзя?

pax 14.01.2011 21:40

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Покажи код.

UPD: Догадки: 1) поле GameObject myPrefab не public (public GameObject myPrefab) и ты на него ничего не бросил соответственно. 2) где-то переменной myPrefab что-то присваиваешь.

Evgen 14.01.2011 21:54

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Жалуется на cube[i].transform.position типа "исходный объект не найден".

Код:

GameObject[] cube;
public GameObject myPrefab;

void Start()
{
cube = new GameObject[2000];
//myPrefab=GameObject.CreatePrimitive(PrimitiveType.Cube);
//myPrefab.GetComponent<BoxCollider>().isTrigger = true;
//DestroyImmediate(myPrefab.GetComponent<BoxCollider>());
for(int i=0;i<cube.Length;i++){
        cube[i] = (GameObject)Instantiate(myPrefab);
}
}

void Update()
{
for(int i = 0; i<cube.Length; i++){
        cube[i].transform.position = new Vector3(10,10,10);
}
}


pax 14.01.2011 21:57

Ответ: C# Быстрый поворот/перемещение множества объектов
 
myPrefab где объявлена? и в инспекторе на нее кинул модель?
Если приведенный код неизменный в программе, то должно работать.


Часовой пояс GMT +4, время: 11:12.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot