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)

Evgen 14.01.2011 22:03

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

Сообщение от pax (Сообщение 175632)
Покажи код.

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

Проверил perfab public.
Раньше Heracty заполнялось Cube(Clone)
А сейчас вообще ничего не клонируется.

perfab в Nscript классе, естественно отдельно от start() И Update().
В Script References NScript добавил свою модель.
Может модели просто нельзя клонировать в отличие от кубов?

pax 14.01.2011 22:07

Покажи скрин инспектора твоего скрипта

Цитата:

Сообщение от Evgen (Сообщение 175636)
В Script References NScript добавил свою модель.
Может модели просто нельзя клонировать в отличие от кубов?

Ясна проблема: добавь ссылку не в Script References, а на объект, где у тебя скрипт в сцене висит.

Script References - отвечает за заполнение свойств скрипта при его навешивании на объект, но не после.

Evgen 14.01.2011 22:32

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Заработало конечно. Но мне нужно не скрипт вешать на объект, а из скрипта управлять объектами. Поэтому я и прошу как это сделать из кода.

pax 14.01.2011 22:34

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Как ты хочешь из скрипта управлять объектами? Опиши все нужные возможности.

Evgen 14.01.2011 22:40

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Вот у меня есть массив GameObject для моделей.
Допустим загрузил я в Project несколько моделей например там ship,tank,jeep далее вешаю свой NScript на Camera.Main и из него в масив GameObject клонирую либо ship либо tank, захотел поменял ship на tank и т.д. вообщем чтобы можно было менять клоны в массиве, если понадобится.

pax 14.01.2011 22:53

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

GameObject[] cube;
    public 
GameObject tank;
    public 
GameObject jeep;
    
void Start()
    {
        
cube = new GameObject[2000];


        for (
int i 0cube.Length 2i++)
        {
            
cube[i] = (GameObject)Instantiate(tank);
        }
        for (
int i cube.Length 2cube.Lengthi++)
        {
            
cube[i] = (GameObject)Instantiate(jeep);
        }
    }

    
void Update()
    {
        if (
Input.GetKeyDown(KeyCode.Space))
        {
            for (
int i 0cube.Lengthi++)
            {
                
Destroy(cube[i]);
                
cube[i] = (GameObject)Instantiate(jeep);
            }
        }
        for (
int i 0cube.Lengthi++)
        {
            
cube[i].transform.position = new Vector3(101010);

        }
    } 


Evgen 14.01.2011 23:06

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Спасибо! Идея понята. Буду экспериментировать.

Evgen 15.01.2011 13:38

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Небольшой доп.вопрос:
Как сделать камеру как в режиме просмотра сцены?
Влево-вправо двигается
camera.Translate(Vector3.right *Input.GetAxis("Horizontal")*speed);
А при движении вперед назад, начинает опускатся/подниматся.
А мне нужно, чтобы она была все время на одной и той же высоте

Может ее как-то сравнять с линией горизонта потом передвинуть вперед и вернуть угол наклона обратно?

Код:

//Перемещение
camera.Translate(Vector3.right *Input.GetAxis("Horizontal")*speed);
//Вперед назад...
сamera.Translate(Vector3.forward *Input.GetAxis("Vertical")*speed);               
// Поворот камеры при зажатой правой клавише
if (Input.GetMouseButton(1)){
        camera.Rotate(0,Input.GetAxis("Mouse X")*turnSpeed, 0, Space.World);
        camera.Rotate(-Input.GetAxis("Mouse Y")*turnSpeed,0,0);
}


pax 15.01.2011 14:33

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

//Перемещение
camera.Translate(camera.transform.right *Input.GetAxis("Horizontal")*speed);
//Вперед назад...
сamera.Translate(camera.transform.forward *Input.GetAxis("Vertical")*speed); 


Evgen 15.01.2011 14:55

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

Сообщение от pax (Сообщение 175698)
PHP код:

//Перемещение
camera.Translate(camera.transform.right *Input.GetAxis("Horizontal")*speed);
//Вперед назад...
сamera.Translate(camera.transform.forward *Input.GetAxis("Vertical")*speed); 


Не не то. она опять летит в землю а не вперед.

Камера по красной оси (влево/вправо) двигается нормально
А (вперед/назад) она двигается по синей оси.
А мне нужно что-бы вперед/назад она двигалась по фиолетовой оси, то есть параллельно террайну, на зависимо от угла наклона синей и зеленой стрелки.
В режиме просмотра сцены она именно так и двигается.

pax 15.01.2011 15:30

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

Vector3 camForward =  camera.transform.forward;
camForward.y=0;
сamera.Translate(camForward.normalized *Input.GetAxis("Vertical")*speed); 


Evgen 15.01.2011 15:31

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

Сообщение от pax (Сообщение 175705)
Тогда вот так:
PHP код:

Vector3 camForward =  camera.transform.forward;
camForward.y=0;
сamera.Translate(camForward.normalized *Input.GetAxis("Vertical")*speed); 


Так тоже куда-то в сторону плывет.

В общем я сделал так, работает.
Определяю угол наклона между камерой и горизонтом.
Поднимаю камеру в верх на этот угол чтобы она сравнялась с горизонтом.
Двигаю камеру вперед.
Опускаю камеру на тот же угол.
Криво но работает.

Код:

//Перемещение
camera.Translate(Vector3.right *Input.GetAxis("Horizontal")*speed);               
//Вперед назад...
float angle=camera.transform.rotation.eulerAngles.x;
camera.Rotate(-angle,0,0);
camera.Translate(Vector3.forward*Input.GetAxis("Vertical")*speed);       
camera.Rotate(+angle,0,0);


pax 15.01.2011 15:39

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Может это все из-за Translate. Никогда ей не пользовался
Попробуй так:
PHP код:

Vector3 camForward =  camera.transform.forward;
camForward.y=0;
camera.transform.position += camForward.normalized *Input.GetAxis("Vertical")*speed

да
PHP код:

function Translate (translation Vector3relativeTo Space Space.Self) : void 

по умолчанию Translate в локальных координатах.

Evgen 15.01.2011 16:15

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

Vector3 camForward =  camera.transform.forward;
camForward.y=0;
camera.transform.position += camForward.normalized *Input.GetAxis("Vertical")*speed

Во вот так работает, как надо.

30000 обновляемых объектов, из которых на экране отображается только 3000, в зоне камеры на расстоянии 200 метров.

Evgen 21.01.2011 00:04

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Есть ли какой-нибудь простой способ получить FPS (кадровую частоту)? Или это нужно делать вручную?


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

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