Помогите со скриптом камеры

Программирование на Юнити.

Помогите со скриптом камеры

Сообщение bibika 29 май 2010, 00:11

Синтаксис:
Используется javascript
function LateUpdate () {
    if (target) {
        x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
               
                y = ClampAngle(y, yMinLimit, yMaxLimit);
                       
        var rotation = Quaternion.Euler(y, x, 0);
        var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
       
        transform.rotation = rotation;
        transform.position = position;
               
                 target.rotation = Quaternion.Euler(0, x, 0);


я в программировании нуб)))вот учу жабу).....
объясняю, что именно требуется)
надо что бы при нажатии стрелки вверх строка target.rotation = Quaternion.Euler(0, x, 0); была правдой
Эта строка в скрипте камеры заставляет поворачивать таргет!!!
А именно мне надо: если зажата клавиша вверх, камера поворачивает таргет, если нет, то не поворачивает.....
я надеюсь вы меня поняли)
bibika
UNIт
 
Сообщения: 71
Зарегистрирован: 22 апр 2010, 22:19
  • ICQ

Re: Помогите со скриптом камеры

Сообщение Agenda 29 май 2010, 09:29

Вот, переписал, разберётесь :)
- умеет по скролу мыши приближаться/удаляться

Синтаксис:
Используется javascript
public var Target:Transform;
public var Sencivity:float = 1;
public var SencivityOfDistance:float = 1;
public var Distance:float = 8;
public var TargetRotationSpeed:float = 20;
public var DistanceMinLimit:float = 1;
public var DistanceMaxLimit:float = 30;

private var _CameraRotationX:float = 0;
private var _CameraRotationY:float = 0;

private var _TargetRotation:Vector3 = new Vector3(0,0,0);

function Start()
{
    if (Target)
        {
                _TargetRotation = Target.rotation.eulerAngles;
        }
}

function LateUpdate ()
{
        Distance -= Input.GetAxis("Mouse ScrollWheel")*SencivityOfDistance;
        if (Distance < DistanceMinLimit) Distance = DistanceMinLimit;
        if (Distance > DistanceMaxLimit) Distance = DistanceMaxLimit;    
                       
        if (Target)
        {
             _CameraRotationX += Input.GetAxis("Mouse Y") * Sencivity;
             _CameraRotationY -= Input.GetAxis("Mouse X") * Sencivity;
               
             //y = ClampAngle(y, yMinLimit, yMaxLimit);
                       
             var rotation = Quaternion.Euler(_CameraRotationX, _CameraRotationY, 0);
             var position = rotation * Vector3(0.0, 0.0, -Distance) + Target.position;
       
             transform.rotation = rotation;
             transform.position = position;
               
             _TargetRotation.y += Input.GetAxis("Vertical") * Time.deltaTime * TargetRotationSpeed;
             Target.rotation = Quaternion.Euler(
             _TargetRotation.x, _TargetRotation.y, _TargetRotation.z);
        }
}
 
Agenda
UNец
 
Сообщения: 30
Зарегистрирован: 13 апр 2010, 07:57

Re: Помогите со скриптом камеры

Сообщение bibika 29 май 2010, 12:28

что то не работает твой скрипт....((((выкидывает ошибку...
bibika
UNIт
 
Сообщения: 71
Зарегистрирован: 22 апр 2010, 22:19
  • ICQ

Re: Помогите со скриптом камеры

Сообщение bibika 29 май 2010, 12:30

и мне надо не приближение и удалени, мне надо, что бы та строчка кторая отвечает за вращение таргета была true когда зажата, камера... в итоге камера могла бы поворачивать таргет....)
bibika
UNIт
 
Сообщения: 71
Зарегистрирован: 22 апр 2010, 22:19
  • ICQ

Re: Помогите со скриптом камеры

Сообщение MetosFate 29 май 2010, 12:48

Если вы имеете в виду то, чтобы вращение камеры передавалось таргету, то можно передать вращение камеры таргету через компоненты её кватерниона, их можно получить через camera.main.transform.rotation....
Добавить masterofself в Skype
Стена это таже ступенька, просто надо вырасти, чтобы это увидеть...
Аватара пользователя
MetosFate
UNIт
 
Сообщения: 76
Зарегистрирован: 05 янв 2010, 21:14
Откуда: Нижний Новгород

Re: Помогите со скриптом камеры

Сообщение Agenda 29 май 2010, 14:56

Скрипт работает, я всегда проверяю то что отдаю другим.

что бы та строчка кторая отвечает за вращение таргета была true когда зажата, камера... в итоге камера могла бы поворачивать таргет....)

Учимся излагать мысли, я ничего не понял в этом предложении: кто должен быть true? кого зажать? строчку зажать? как камера может поворачивать таргет?
Думаю тут не с жабоскриптом нужно разбираться, а с умением точно и в правильном порядке изложить свои мысли и/или суть проблемы. Если не научитесь - получите
как результат игнор на форумах. Какой смысл что -либо объяснять если у человека каша в голове.

Тот скрипт который я написал умеет:
- Поворачивать камеру вокруг таргета относительно горизонтального и вертикального перемещения мышки.
- Поворачивать таргет вокруг оси Y используя кнопки Up/Down или W/S
- Приближать или удалять камеру относительно таргета
- Для использования приатачить скрипт к камере, и указать таргет

Вот попробуйте в таком-же духе изложить свои требования к результату и думаю Вам помогут.
Agenda
UNец
 
Сообщения: 30
Зарегистрирован: 13 апр 2010, 07:57

Re: Помогите со скриптом камеры

Сообщение gnoblin 29 май 2010, 16:21

тестирую новый смайл [curved_hands]
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Помогите со скриптом камеры

Сообщение bibika 29 май 2010, 16:43

Да извеняюсь, может не правильно изложил свои мысли... :D
вот скрипт MouseOrbit немного переделанный, этот скрипт затсавляет поворачиваться таргет камеры вместе с камерой по вертикальной оси (напомню, что стандартный скрипт MouseOrbit просто заставляет камеру вращаться вокруг таргета по вертикальной и горизонтальной оси):
Синтаксис:
  1. var target : Transform; 
  2. var distance = 10.0; 
  3.  
  4. var xSpeed = 250.0; 
  5. var ySpeed = 120.0; 
  6.  
  7. var yMinLimit = -20; 
  8. var yMaxLimit = 80; 
  9.  
  10. private var x = 0.0; 
  11. private var y = 0.0; 
  12.  
  13. @script AddComponentMenu("Camera-Control/Mouse Orbit") 
  14.  
  15. function Start () { 
  16. var angles = transform.eulerAngles; 
  17. x = angles.y; 
  18. y = angles.x; 
  19.  
  20. // Make the rigid body not change rotation 
  21. if (rigidbody) 
  22. rigidbody.freezeRotation = true; 
  23.  
  24. function LateUpdate () { 
  25. if (target) { 
  26. x += Input.GetAxis("Mouse X") * xSpeed * 0.02; 
  27. y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02; 
  28.  
  29. y = ClampAngle(y, yMinLimit, yMaxLimit); 
  30.  
  31. var rotation = Quaternion.Euler(y, x, 0); 
  32. var position = rotation * Vector3(0.0, 0.0, -distance) + target.position; 
  33.  
  34. transform.rotation = rotation; 
  35. transform.position = position; 
  36.  
  37. target.rotation = Quaternion.Euler(0, x, 0); 
  38.  
  39. static function ClampAngle (angle : float, min : float, max : float) { 
  40. if (angle < -360) 
  41. angle += 360; 
  42. if (angle > 360) 
  43. angle -= 360; 
  44. return Mathf.Clamp (angle, min, max); 


а мне надо, что камера вращала таргет по вертикальной, только в том случае, если нажата любая из клавиш WASD!
Хочу что бы управление камерой было так же как в этой дэмке:
http://dl.dropbox.com/u/2322017/advancedShaders.html
bibika
UNIт
 
Сообщения: 71
Зарегистрирован: 22 апр 2010, 22:19
  • ICQ

Re: Помогите со скриптом камеры

Сообщение Agenda 29 май 2010, 16:48

Если не ошибаюсь демка полностью доступна для скачивания, посмотрите как это сделано там

вот:
http://dl.dropbox.com/u/2322017/advancedTerrainShaders.unitypackage – [133MB]
Последний раз редактировалось Agenda 29 май 2010, 16:50, всего редактировалось 1 раз.
Agenda
UNец
 
Сообщения: 30
Зарегистрирован: 13 апр 2010, 07:57

Re: Помогите со скриптом камеры

Сообщение bibika 29 май 2010, 16:50

bibika
UNIт
 
Сообщения: 71
Зарегистрирован: 22 апр 2010, 22:19
  • ICQ

Re: Помогите со скриптом камеры

Сообщение Agenda 29 май 2010, 16:51

я открыл его нормально
Agenda
UNец
 
Сообщения: 30
Зарегистрирован: 13 апр 2010, 07:57

Re: Помогите со скриптом камеры

Сообщение bibika 29 май 2010, 16:55

а какая версия у тебя [unity 3D] ??? и может быть ты каким то другим способом открывал эту дэмку?))))
bibika
UNIт
 
Сообщения: 71
Зарегистрирован: 22 апр 2010, 22:19
  • ICQ

Re: Помогите со скриптом камеры

Сообщение Agenda 30 май 2010, 01:06

2.6.1 pro
Menu: Assets->Import Package...
Agenda
UNец
 
Сообщения: 30
Зарегистрирован: 13 апр 2010, 07:57

Re: Помогите со скриптом камеры

Сообщение bibika 30 май 2010, 01:39

вот и я так же делаю... но что то не открывает... ((
bibika
UNIт
 
Сообщения: 71
Зарегистрирован: 22 апр 2010, 22:19
  • ICQ

Re: Помогите со скриптом камеры

Сообщение Serge 30 май 2010, 04:39

Господин bibika это повтор темы http://unity3d.ru/distribution/viewtopic.php?f=5&t=1922&st=0&sk=t&sd=a. Нехорошо форум захламлять. :-w
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15