Показать сообщение отдельно
Старый 13.01.2011, 14:35   #12
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 426
Написано 71 полезных сообщений
(для 104 пользователей)
Сообщение Ответ: C# Быстрый поворот/перемещение множества объектов

Сообщение от pax Посмотреть сообщение
Последний вариант не устраивает? У меня показывал 150+ кадров. А результат практически не отличим.

Тут есть вариант считать матрицы вручную и вручную выводить кубики на экран. Можно я думаю еще ускорить этот процесс, но это только в Pro версии Unity.
Я понял суть вашего последнего варианта. Спасибо ! только я сделал немного по другому "более гибко". Ну и конечно ничего на свете лучше Sin,Cos нету =)

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape)) Application.Quit();
        calls++;

		rot=rot+2.5f;//Random.Range(-5, 5);
		float speed=Time.deltaTime*25;
		float deg2rad=rot*0.0174532925f;
		for(int i = 0; i<cube.Length; i++){
			cubex[i]+=Mathf.Sin(deg2rad)*speed;	
			cubey[i]+=Mathf.Cos(deg2rad)*speed;	
		}	
		
		int updates=2000;
		int block=(updates*calls)%cube.Length;
		int end=block+updates;
		if(end>cube.Length)end=cube.Length;
		for(int i = block; i<end; i++){
			cube[i].transform.position = new Vector3(cubex[i],500,cubey[i]);
			cube[i].transform.rotation = Quaternion.AngleAxis(rot,Vector3.up);
		}	   	
    }
Если взять 6000 кубов и за один Update трансформировать 2000 скорость 90FPS.
Отмечу в каждом Update меняются координаты всех 6000 кубов в первом for, но трансформируются (transform.position/rotation) только 2000. За три кадра 6000.

Тему можно еще развить если обновлять только объекты находящиеся близко к камере или находящиеся в поле зрения камеры. Предполагаю, что первое должно быть проще, а по скорости скорее всего будет небольшая разница.
(Offline)
 
Ответить с цитированием