| 
				
				Что в этом скрипте не так?
				 |   |  
| Artemoid | Дата: Воскресенье, 24 Мая 2015, 20:23 | Сообщение # 1 |  
| 
 частый гость 
Сейчас нет на сайте 
 
 | Привет всем! Делаю игру про космос, а точнее её управление, покачто.   Надо так: повернул камеру, космический корабль медленно довернул до поворота камеры.   Прицепил я на пустой обьект камеру(координаты пустого обьекта такие же как у модельки корабля) и сделал обычный скрипт поворота мышью.   На корабль нацепил вот(покачто только для оси Y для начала) : 
   Код public class RotShip : MonoBehaviour {   public GameObject GameObject1;   public GameObject Ship;   public float RotSpeed = 1.0f;   // Use this for initialization   void Awake () {   } 
   // Update is called once per frame   void Update () {   //RotSpeed *= Time.deltaTime;   if (GameObject1.transform.rotation.y > Ship.transform.rotation.y) {   transform.Rotate(0,RotSpeed,0);   }   }   }   
   Всё вроде бы хорошо, но когда доходит корабль до 180 градусного поврота, то отказывается поворачиваться.   Что в этом скрипте не так?
 |  
| 
 | 
 |    |  
| MANMANA | Дата: Воскресенье, 24 Мая 2015, 22:03 | Сообщение # 2 |  
| 
 почти ветеран 
Сейчас нет на сайте 
 
 | if (GameObject1.transform.rotation.y > Ship.transform.rotation.y) {   transform.rotation хранит координаты в кватернионе 
   if (GameObject1.transform.localEulerAngles.y > Ship.transform.localEulerAngles.y) { 
   но тут стоит учитывать, что после 360 градусов идет 0. Часто возникает такая ситуация, что у пустого объекта может быть угол в 10 градусов, а у корабля - в 350 градусов, и здесь не всегда подходит сравнение "если 350 > 10"...   Однако учитывая, что у вас поворот идет в одну сторону, то это не важно  
  http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг   VKонтакте 3Dbuffer 
   Последнее: 
   Новый раздел "Текстуры" 
   Как запатентовать, защитить техническое решение, игру, идею
 |  
| 
 | 
 |    |  
| Artemoid | Дата: Вторник, 26 Мая 2015, 22:08 | Сообщение # 3 |  
| 
 частый гость 
Сейчас нет на сайте 
 
 | Цитата MANMANA (  )  О     Понял как это сделать, но опять проблема: корабль при повороте дёргается(поворот уже по двум осям).   Судя по всему просто выполняется поворот по двум осям по очереди...как это сгладить?   Скрипт:   Код void FixedUpdate () {   razY = GameObject1.transform.localEulerAngles.y - Ship.transform.localEulerAngles.y;   razX = GameObject1.transform.localEulerAngles.x - Ship.transform.localEulerAngles.x; 
   float x = 0;   float y = 0; 
   //Ось Y   if (razY > 1) {   if (razY > 180) {   y = -RotSpeedY;   } else if (razY < 180) {   y = RotSpeedY;   }   }   if (razY < -1) {   if (razY < -180) {   y = RotSpeedY;   } else if (razY > -180) {   y = -RotSpeedY;   }   } 
   //Ось X   if (razX > 1) {   if (razX > 180) {   x = -RotSpeedX;   } else if (razX < 180) {   x = RotSpeedX;   }   } 
   if (razX < -1) {   if (razX < -180) {   x = RotSpeedX;   } else if (razX > -180) {   x = -RotSpeedX;   }   } 
   transform.Rotate (x, y, 0);   }  
 |  
| 
 | 
 |    |  
| Valter | Дата: Вторник, 26 Мая 2015, 22:46 | Сообщение # 4 |  
| 
 почетный гость 
Сейчас нет на сайте 
 
 | Проблема в том, что Вы не хотите работать с кватернионом, как с цельным объектом, а пытаетесь менять отдельно x,y через эйлеровы углы.   Повести вот это на свой объект: 
   Код    void Update () {     Vector3 cur_pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);     Vector3 rel_pos = cur_pos - transform.position;     transform.rotation = Quaternion.LookRotation(new Vector3(rel_pos.x, rel_pos.y, transform.position.z));   }     
 |  
| 
 | 
 |    |  
| Artemoid | Дата: Среда, 27 Мая 2015, 16:58 | Сообщение # 5 |  
| 
 частый гость 
Сейчас нет на сайте 
 
 | Цитата Valter (  )  Повести вот это на свой объект:      Я в принцепе понимаю что там, но у меня работает не понятно как и я не понимаю почему..   Цитата Valter (  )  Вы не хотите работать с кватернионом     Да, не хочу ибо не нашёл нормального обьяснения нигде. На той же офф.документации обьяснено в качестве какой-то штуки, которая связана с углами и основанна она на высшей математике..Добавлено (27 мая 2015, 16:58) ---------------------------------------------
  Цитата Artemoid (  )  Да, не хочу     Сделал     	Ship.transform.rotation = Quaternion.Slerp (Ship.transform.rotation, GameObject1.transform.rotation,Time.deltaTime * RotSpeed );   Как теперь сделать разную скорость поворота по разным осям?
 |  
| 
 | 
 |    |  
| Ranger | Дата: Среда, 27 Мая 2015, 17:12 | Сообщение # 6 |  
 
почти ветеран 
Сейчас нет на сайте 
 
 | разложить на углы эйлера и слерпить к ним с разной скоростью
 
  
 
 Сообщение отредактировал Ranger - Среда, 27 Мая 2015, 17:27  |  
| 
 | 
 |    |  
| Artemoid | Дата: Четверг, 28 Мая 2015, 20:06 | Сообщение # 7 |  
| 
 частый гость 
Сейчас нет на сайте 
 
 | Цитата Ranger (  )  разложить на углы эйлера и слерпить к ним с разной скоростью      Напишите ,пожалуйста, пробовал по разному и не понимаю как :/
 |  
| 
 | 
 |    |  
| Ranger | Дата: Четверг, 28 Мая 2015, 20:38 | Сообщение # 8 |  
 
почти ветеран 
Сейчас нет на сайте 
 
 | Набирал код в блокноте.   Могут быть ошибки.   Но идея, думаю, понятна. 
   Код    {     Quaternion sx,sy,sz;     sx = Quaternion.Euler(transform.rotation.euler.x,0,0);     sy = Quaternion.Euler(0,transform.rotation.euler.y,0);     sz = Quaternion.Euler(0,0,transform.rotation.euler.z);     Quaternion tx,ty,tz;     tx = Quaternion.Euler(target.transform.rotation.euler.x,0,0);     ty = Quaternion.Euler(0,target.transform.rotation.euler.y,0);     tz = Quaternion.Euler(0,0,target.transform.rotation.euler.z);           transform.rotation = Quaternion.Slerp(sx,tx,Time.deltatime*Vx)*Quaternion.Slerp(sy,ty,Time.deltatime*Vy)*Quaternion.Slerp(sz,tz,Time.deltatime*Vz);   }        Есть вероятность нахватить Замок Эйлера. Нужно пробовать, если возникнет проблема, тогда брать относительный поворот Quaternion.FromToRotation и раскладывать его.   вращать этим Quaternion.RotateTowards. float maxDegreesDelta считать от угловых скоростей.
 
  
 
 Сообщение отредактировал Ranger - Четверг, 28 Мая 2015, 20:46  |  
| 
 | 
 |    |     
		
		 
 |