плавное воспроизведение анимации камеры - Форум Игроделов
Пт, 17 Май 2024, 07:42 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум Игроделов » UNITY3D » СКРИПТИНГ » плавное воспроизведение анимации камеры
плавное воспроизведение анимации камеры
bahaДата: Ср, 25 Июн 2014, 23:16 | Сообщение # 1
Нет аватара
 
Сообщений: 37
Награды: 0
Репутация: 1
Статус: Offline
Здраствуйте, вот скрипт :
Код

float curXRot = gameObject.transform.rotation.x;
float curYRot =gameObject.transform.rotation.y;
if(Input.GetKeyUp(KeyKode.W)) {
animation.Stop(walk.name);
if(curXRot > 0) {
.....
}
if(curXRot < 0) {
....
}
и т.д по y
}

Проблема в том что если отпустить клавишу
ходьбы то анимация ходьбы останавливается только после полного воспроизведения. Смысл скрипта таков - если мы отпустили клавишу то анимация (walk) останавливается и проводится проверка на координаты ротации по x (curXRot) и y (curYRot) , и если текущие координаты не равны исходным то значение координат плавно изменяется в зависимости от того больше или меньше текущие координаты относительно исходных координат. Собственно вопрос - что нужно написать вместо многоточий для плавного изменения числа?
 
СообщениеЗдраствуйте, вот скрипт :
Код

float curXRot = gameObject.transform.rotation.x;
float curYRot =gameObject.transform.rotation.y;
if(Input.GetKeyUp(KeyKode.W)) {
animation.Stop(walk.name);
if(curXRot > 0) {
.....
}
if(curXRot < 0) {
....
}
и т.д по y
}

Проблема в том что если отпустить клавишу
ходьбы то анимация ходьбы останавливается только после полного воспроизведения. Смысл скрипта таков - если мы отпустили клавишу то анимация (walk) останавливается и проводится проверка на координаты ротации по x (curXRot) и y (curYRot) , и если текущие координаты не равны исходным то значение координат плавно изменяется в зависимости от того больше или меньше текущие координаты относительно исходных координат. Собственно вопрос - что нужно написать вместо многоточий для плавного изменения числа?

Автор - baha
Дата добавления - 25 Июн 2014 в 23:16
AltairДата: Чт, 26 Июн 2014, 00:30 | Сообщение # 2
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
Mathf.Lerp
 
СообщениеMathf.Lerp

Автор - Altair
Дата добавления - 26 Июн 2014 в 00:30
bahaДата: Чт, 26 Июн 2014, 10:47 | Сообщение # 3
Нет аватара
 
Сообщений: 37
Награды: 0
Репутация: 1
Статус: Offline
Мне этот mathf сразу не монравился, может вы дадите мне направление? Напишите один пример, по моему скрипту.

Добавлено (26 Июн 2014, 10:47)
---------------------------------------------
*понравился

 
СообщениеМне этот mathf сразу не монравился, может вы дадите мне направление? Напишите один пример, по моему скрипту.

Добавлено (26 Июн 2014, 10:47)
---------------------------------------------
*понравился


Автор - baha
Дата добавления - 26 Июн 2014 в 10:47
NapalmRainДата: Чт, 26 Июн 2014, 11:03 | Сообщение # 4
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Цитата baha ()
Напишите один пример, по моему скрипту.

Сообщение выше - это ссылка...
 
Сообщение
Цитата baha ()
Напишите один пример, по моему скрипту.

Сообщение выше - это ссылка...

Автор - NapalmRain
Дата добавления - 26 Июн 2014 в 11:03
bahaДата: Чт, 26 Июн 2014, 13:13 | Сообщение # 5
Нет аватара
 
Сообщений: 37
Награды: 0
Репутация: 1
Статус: Offline
NapalmRain, спасибо за информацию, без вас бы и не догодался.
Mathf.Lerp изменяет число с текущего значения до требуемого за одну секунду , мне нужна плавность.
 
СообщениеNapalmRain, спасибо за информацию, без вас бы и не догодался.
Mathf.Lerp изменяет число с текущего значения до требуемого за одну секунду , мне нужна плавность.

Автор - baha
Дата добавления - 26 Июн 2014 в 13:13
NapalmRainДата: Чт, 26 Июн 2014, 13:39 | Сообщение # 6
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Цитата baha ()
Mathf.Lerp изменяет число с текущего значения до требуемого за одну секунду , мне нужна плавность.

Я думаю вы просто не правильно поняли принцип работы Лерпа как такового. Погуглите по этому значению и найдёте много примеров. А ещё лучше поэксперементируйте с параметрами функции и посмотрите, что получится.
Есть ведь не только арифметический лерп (список лерпов)
Вас по большей части из них интересуют Vector3 и Quaternion. Но лучше почитайте об этом понятии в принципе.
 
Сообщение
Цитата baha ()
Mathf.Lerp изменяет число с текущего значения до требуемого за одну секунду , мне нужна плавность.

Я думаю вы просто не правильно поняли принцип работы Лерпа как такового. Погуглите по этому значению и найдёте много примеров. А ещё лучше поэксперементируйте с параметрами функции и посмотрите, что получится.
Есть ведь не только арифметический лерп (список лерпов)
Вас по большей части из них интересуют Vector3 и Quaternion. Но лучше почитайте об этом понятии в принципе.

Автор - NapalmRain
Дата добавления - 26 Июн 2014 в 13:39
AltairДата: Чт, 26 Июн 2014, 13:43 | Сообщение # 7
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
baha, тебе нужно думать..а не плавность..
А знаешь почему ?Да потому что там написано
Код
static function Lerp(from: float, to: float, t: float): float;

что значит 1 значение float,второе и третие тоже,А это значит что там где вставляется Time.time(секунда) как в примере можно вставить спокойно и Time.deltaTime(плавность) к примеру (Time.deltaTime*5) и буде тебе счастье..эх..
 
Сообщениеbaha, тебе нужно думать..а не плавность..
А знаешь почему ?Да потому что там написано
Код
static function Lerp(from: float, to: float, t: float): float;

что значит 1 значение float,второе и третие тоже,А это значит что там где вставляется Time.time(секунда) как в примере можно вставить спокойно и Time.deltaTime(плавность) к примеру (Time.deltaTime*5) и буде тебе счастье..эх..

Автор - Altair
Дата добавления - 26 Июн 2014 в 13:43
bahaДата: Чт, 26 Июн 2014, 17:04 | Сообщение # 8
Нет аватара
 
Сообщений: 37
Награды: 0
Репутация: 1
Статус: Offline
Не получается, либо я криворук, либо....
 
СообщениеНе получается, либо я криворук, либо....

Автор - baha
Дата добавления - 26 Июн 2014 в 17:04
AltairДата: Чт, 26 Июн 2014, 23:34 | Сообщение # 9
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
baha, либо криворук..а криворукость от непонимания как оно работает)
 
Сообщениеbaha, либо криворук..а криворукость от непонимания как оно работает)

Автор - Altair
Дата добавления - 26 Июн 2014 в 23:34
bahaДата: Пт, 27 Июн 2014, 08:22 | Сообщение # 10
Нет аватара
 
Сообщений: 37
Награды: 0
Репутация: 1
Статус: Offline
Ну я вас умаляю объясните мне как это работает!!!

Добавлено (27 Июн 2014, 08:22)
---------------------------------------------
Altair, я сделал как вы говорите, бред получился.

 
СообщениеНу я вас умаляю объясните мне как это работает!!!

Добавлено (27 Июн 2014, 08:22)
---------------------------------------------
Altair, я сделал как вы говорите, бред получился.


Автор - baha
Дата добавления - 27 Июн 2014 в 08:22
NapalmRainДата: Пт, 27 Июн 2014, 08:59 | Сообщение # 11
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Цитата baha ()
Ну я вас умаляю объясните мне как это работает!!!
Altair, я сделал как вы говорите, бред получился.

Покажите ваш код. На его примере покажу что и где не так.
 
Сообщение
Цитата baha ()
Ну я вас умаляю объясните мне как это работает!!!
Altair, я сделал как вы говорите, бред получился.

Покажите ваш код. На его примере покажу что и где не так.

Автор - NapalmRain
Дата добавления - 27 Июн 2014 в 08:59
Thedrhax14Дата: Пт, 27 Июн 2014, 09:19 | Сообщение # 12
 
Сообщений: 54
Награды: 0
Репутация: 1
Статус: Offline
Эээм
Я не легче воспользоваться animator-ом


Виду блог про разроботку игр и про свои проекты https://thedrhax14.wordpress.com/

Сообщение отредактировал Thedrhax14 - Пт, 27 Июн 2014, 09:19
 
СообщениеЭээм
Я не легче воспользоваться animator-ом

Автор - Thedrhax14
Дата добавления - 27 Июн 2014 в 09:19
bahaДата: Пт, 27 Июн 2014, 09:53 | Сообщение # 13
Нет аватара
 
Сообщений: 37
Награды: 0
Репутация: 1
Статус: Offline
NapalmRain, читайте первое сообщение.
 
СообщениеNapalmRain, читайте первое сообщение.

Автор - baha
Дата добавления - 27 Июн 2014 в 09:53
NapalmRainДата: Пт, 27 Июн 2014, 11:02 | Сообщение # 14
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Цитата baha ()
NapalmRain, читайте первое сообщение.

конечный вариант кода приведите, без многоточий...
 
Сообщение
Цитата baha ()
NapalmRain, читайте первое сообщение.

конечный вариант кода приведите, без многоточий...

Автор - NapalmRain
Дата добавления - 27 Июн 2014 в 11:02
bahaДата: Вт, 08 Июл 2014, 14:13 | Сообщение # 15
Нет аватара
 
Сообщений: 37
Награды: 0
Репутация: 1
Статус: Offline
Код

using UnityEngine;
using System.Collections;

public class CameraAnimations : MonoBehaviour
{
public CharacterController playerChC;

float CameraCurrentAngleX;
float CameraCurrentAngleY;
float CameraCurrentAngleZ;
public AnimationClip Walking;
public AnimationClip Running;

void Update()
{
float ReturnTime = 10f;

CameraCurrentAngleX = transform.localEulerAngles.x;
CameraCurrentAngleY = transform.localEulerAngles.y;
CameraCurrentAngleZ = transform.localEulerAngles.z;

float RetutnCamPosX = Mathf.Lerp(CameraCurrentAngleX , 0f, ReturnTime );
float RetutnCamPosY = Mathf.Lerp(CameraCurrentAngleY , 0f, ReturnTime );

if (playerChC.isGrounded == true)
{
if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.D))
{
animation.CrossFade(Walking.name);
}
if (Input.GetKey(KeyCode.W) & Input.GetKey(KeyCode.LeftShift))
{
animation.Stop(Walking.name);
animation.CrossFade(Running.name);
}
}

if (Input.GetKeyUp(KeyCode.W) | Input.GetKeyUp(KeyCode.A) | Input.GetKeyUp(KeyCode.S) | Input.GetKeyUp(KeyCode.D))
{
animation.Stop(Walking.name);
if (CameraCurrentAngleX > 0 | CameraCurrentAngleY > 0 | CameraCurrentAngleX < 0 | CameraCurrentAngleY < 0)
{
transform.localEulerAngles = new Vector3(RetutnCamPosX, RetutnCamPosY, 0);
}
}
}
}


Сообщение отредактировал baha - Вт, 08 Июл 2014, 14:15
 
Сообщение
Код

using UnityEngine;
using System.Collections;

public class CameraAnimations : MonoBehaviour
{
public CharacterController playerChC;

float CameraCurrentAngleX;
float CameraCurrentAngleY;
float CameraCurrentAngleZ;
public AnimationClip Walking;
public AnimationClip Running;

void Update()
{
float ReturnTime = 10f;

CameraCurrentAngleX = transform.localEulerAngles.x;
CameraCurrentAngleY = transform.localEulerAngles.y;
CameraCurrentAngleZ = transform.localEulerAngles.z;

float RetutnCamPosX = Mathf.Lerp(CameraCurrentAngleX , 0f, ReturnTime );
float RetutnCamPosY = Mathf.Lerp(CameraCurrentAngleY , 0f, ReturnTime );

if (playerChC.isGrounded == true)
{
if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.D))
{
animation.CrossFade(Walking.name);
}
if (Input.GetKey(KeyCode.W) & Input.GetKey(KeyCode.LeftShift))
{
animation.Stop(Walking.name);
animation.CrossFade(Running.name);
}
}

if (Input.GetKeyUp(KeyCode.W) | Input.GetKeyUp(KeyCode.A) | Input.GetKeyUp(KeyCode.S) | Input.GetKeyUp(KeyCode.D))
{
animation.Stop(Walking.name);
if (CameraCurrentAngleX > 0 | CameraCurrentAngleY > 0 | CameraCurrentAngleX < 0 | CameraCurrentAngleY < 0)
{
transform.localEulerAngles = new Vector3(RetutnCamPosX, RetutnCamPosY, 0);
}
}
}
}

Автор - baha
Дата добавления - 08 Июл 2014 в 14:13
commandobyДата: Вт, 08 Июл 2014, 14:39 | Сообщение # 16
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
baha, точно не понял чего ты хочешь, но вот попробуй.
Код
if(curXRot > 0) {  
  curXRot -= curXRot*Time.deltaTime;  
  }  
  if(curXRot < 0) {  
  curXRot += curXRot*Time.deltaTime;  
  }  
  if(curYRot > 0) {  
  curYRot -= curYRot*Time.deltaTime;  
  }  
  if(curYRot < 0) {  
  curYRot += curYRot*Time.deltaTime;  
  }
  }

Можешь поэкспериментировать со временем добавив ещё одну переменную
Код
var time1 : float = 5;
.....
curXRot -= curXRot*Time.deltaTime/time1;

или сделать не утухающую, а плавную
Код
curXRot -= Time.deltaTime/time1;


Блог.
 
Сообщениеbaha, точно не понял чего ты хочешь, но вот попробуй.
Код
if(curXRot > 0) {  
  curXRot -= curXRot*Time.deltaTime;  
  }  
  if(curXRot < 0) {  
  curXRot += curXRot*Time.deltaTime;  
  }  
  if(curYRot > 0) {  
  curYRot -= curYRot*Time.deltaTime;  
  }  
  if(curYRot < 0) {  
  curYRot += curYRot*Time.deltaTime;  
  }
  }

Можешь поэкспериментировать со временем добавив ещё одну переменную
Код
var time1 : float = 5;
.....
curXRot -= curXRot*Time.deltaTime/time1;

или сделать не утухающую, а плавную
Код
curXRot -= Time.deltaTime/time1;

Автор - commandoby
Дата добавления - 08 Июл 2014 в 14:39
bahaДата: Вт, 08 Июл 2014, 15:42 | Сообщение # 17
Нет аватара
 
Сообщений: 37
Награды: 0
Репутация: 1
Статус: Offline
я немного улучшил скрипт, и с mathf подружился, но какое бы я не ставил значение ReturnTime камера все равно резко перемещается, хотелось бы медленее. В чем проблема? Time.deltaTime не помогает.

Добавлено (08 Июл 2014, 15:42)
---------------------------------------------
commandoby, а что дает деление Time.deltaTime на число

 
Сообщениея немного улучшил скрипт, и с mathf подружился, но какое бы я не ставил значение ReturnTime камера все равно резко перемещается, хотелось бы медленее. В чем проблема? Time.deltaTime не помогает.

Добавлено (08 Июл 2014, 15:42)
---------------------------------------------
commandoby, а что дает деление Time.deltaTime на число


Автор - baha
Дата добавления - 08 Июл 2014 в 15:42
ЛевшаДата: Вт, 08 Июл 2014, 16:36 | Сообщение # 18
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
А что может произойти с числом float если это число поделить ?
Правильно - оно поделится...
А при умножении - умножится.
smile


X.cor.R (Prologue)
 
СообщениеА что может произойти с числом float если это число поделить ?
Правильно - оно поделится...
А при умножении - умножится.
smile

Автор - Левша
Дата добавления - 08 Июл 2014 в 16:36
commandobyДата: Вт, 08 Июл 2014, 16:58 | Сообщение # 19
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
Цитата baha ()
commandoby, а что дает деление Time.deltaTime на число

Как уже сказал Левша, Time.deltaTime - возвращает число float время последнего кадра в секундах.

А это пробовал?
Цитата commandoby ()
или сделать не утухающую, а плавную
Код
curXRot -= Time.deltaTime/time1;



Блог.
 
Сообщение
Цитата baha ()
commandoby, а что дает деление Time.deltaTime на число

Как уже сказал Левша, Time.deltaTime - возвращает число float время последнего кадра в секундах.

А это пробовал?
Цитата commandoby ()
или сделать не утухающую, а плавную
Код
curXRot -= Time.deltaTime/time1;


Автор - commandoby
Дата добавления - 08 Июл 2014 в 16:58
AltairДата: Вт, 08 Июл 2014, 21:03 | Сообщение # 20
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
В обще ,на мой взгляд ,этот парень бредом мается..
 
СообщениеВ обще ,на мой взгляд ,этот парень бредом мается..

Автор - Altair
Дата добавления - 08 Июл 2014 в 21:03
Форум Игроделов » UNITY3D » СКРИПТИНГ » плавное воспроизведение анимации камеры
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024