Проблема со скриптом приседания ... - Форум Игроделов
Пн, 20 Май 2024, 02:17 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Проблема со скриптом приседания ...
Проблема со скриптом приседания ...
dostalitionДата: Сб, 04 Янв 2014, 16:53 | Сообщение # 1
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Перепробовал уже кучу скриптов приседания с разным подходом, но везде одна и та же проблема: когда перс встаёт (т.е. его коллайдер увеличивается), то сразу проваливается в пол ... Как устранить эту проблему ? Вот последний вариант скрипта
Код
var controller : CharacterController;

private var newPos;

private var newHeight: float;

private var check : boolean = false;

function Update () {

newPos = new Vector3(transform.position.x, transform.position.y + 0.6f, transform.position.z);

if (controller.isGrounded && Input.GetKey(KeyCode.LeftControl)) {
if (check == false)
crouchOn ();
if (check == true && Input.GetKey(KeyCode.LeftControl))
crouchOff (); }
}

function crouchOn () {

yield WaitForSeconds(0.1);
check = true;
controller.height = newHeight;

}

function crouchOff () {

yield WaitForSeconds(0.1);
check = false;
controller.height = 2;
transform.position = newPos;

}
Может какие-то настройки в СС нужны конкретные ?


Сообщение отредактировал dostalition - Сб, 04 Янв 2014, 17:04
 
СообщениеПерепробовал уже кучу скриптов приседания с разным подходом, но везде одна и та же проблема: когда перс встаёт (т.е. его коллайдер увеличивается), то сразу проваливается в пол ... Как устранить эту проблему ? Вот последний вариант скрипта
Код
var controller : CharacterController;

private var newPos;

private var newHeight: float;

private var check : boolean = false;

function Update () {

newPos = new Vector3(transform.position.x, transform.position.y + 0.6f, transform.position.z);

if (controller.isGrounded && Input.GetKey(KeyCode.LeftControl)) {
if (check == false)
crouchOn ();
if (check == true && Input.GetKey(KeyCode.LeftControl))
crouchOff (); }
}

function crouchOn () {

yield WaitForSeconds(0.1);
check = true;
controller.height = newHeight;

}

function crouchOff () {

yield WaitForSeconds(0.1);
check = false;
controller.height = 2;
transform.position = newPos;

}
Может какие-то настройки в СС нужны конкретные ?

Автор - dostalition
Дата добавления - 04 Янв 2014 в 16:53
seamanДата: Сб, 04 Янв 2014, 17:03 | Сообщение # 2
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Чем не понравилось то, что предлагалось еще полгода назад:
http://gamecreatingcommunity.ru/forum/70-2557-121382-16-1334470098
 
СообщениеЧем не понравилось то, что предлагалось еще полгода назад:
http://gamecreatingcommunity.ru/forum/70-2557-121382-16-1334470098

Автор - seaman
Дата добавления - 04 Янв 2014 в 17:03
dostalitionДата: Сб, 04 Янв 2014, 17:10 | Сообщение # 3
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Пробовал , тоже пол года назад ....

Сообщение отредактировал dostalition - Сб, 04 Янв 2014, 17:11
 
СообщениеПробовал , тоже пол года назад ....

Автор - dostalition
Дата добавления - 04 Янв 2014 в 17:10
seamanДата: Сб, 04 Янв 2014, 17:26 | Сообщение # 4
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Пробовать можно хоть сотню раз. Почему оттуда верные решения не берем?
Цитата
Чтобы точно не провалиться под пол нужно при вставании не просто прибавлять 0.7, а рассчитывать позицию посложнее

Цитата
Чтобы не "падать" при приседании, нужно смещать позицию вниз

Вам не подходят верные, работающие решения. Вы хотите чуда?

Ну и на вопрос было бы неплохо ответ услышать - чем не понравилось?
 
СообщениеПробовать можно хоть сотню раз. Почему оттуда верные решения не берем?
Цитата
Чтобы точно не провалиться под пол нужно при вставании не просто прибавлять 0.7, а рассчитывать позицию посложнее

Цитата
Чтобы не "падать" при приседании, нужно смещать позицию вниз

Вам не подходят верные, работающие решения. Вы хотите чуда?

Ну и на вопрос было бы неплохо ответ услышать - чем не понравилось?

Автор - seaman
Дата добавления - 04 Янв 2014 в 17:26
dostalitionДата: Сб, 04 Янв 2014, 19:13 | Сообщение # 5
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Решил вопрос с провалом в пол, теперь осталось только выяснить как пускать луч вверх определённой длинны (знаю только как прямо) и выложу нормальный скрипт.

Сообщение отредактировал dostalition - Сб, 04 Янв 2014, 19:14
 
СообщениеРешил вопрос с провалом в пол, теперь осталось только выяснить как пускать луч вверх определённой длинны (знаю только как прямо) и выложу нормальный скрипт.

Автор - dostalition
Дата добавления - 04 Янв 2014 в 19:13
ЛевшаДата: Сб, 04 Янв 2014, 19:43 | Сообщение # 6
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Цитата dostalition ()
как пускать луч вверх определённой длинны (знаю только как прямо)

Точно так же как и вперед, только вверх.
Vector3.up, Transform.up

Код

function Update () {
     var dir = transform.TransformDirection (Vector3.up);
    if (Physics.Raycast (transform.position, dir, 10)) {   }
}


X.cor.R (Prologue)
 
Сообщение
Цитата dostalition ()
как пускать луч вверх определённой длинны (знаю только как прямо)

Точно так же как и вперед, только вверх.
Vector3.up, Transform.up

Код

function Update () {
     var dir = transform.TransformDirection (Vector3.up);
    if (Physics.Raycast (transform.position, dir, 10)) {   }
}

Автор - Левша
Дата добавления - 04 Янв 2014 в 19:43
dostalitionДата: Сб, 04 Янв 2014, 22:39 | Сообщение # 7
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Благодарю Всем за ответы ! В числе прочего, а может и основной причиной проблем со скриптом приседания было то, что высоту поднятия для моего СС нужно было выставить не в 0,01F и даже не в 2, а аж в 7 ! Кстати , что заначит F в 0,01F ? Флоат переменную ? В итоге сообразил вот это
Код
var controller : CharacterController;
var Height_Stoia;
var Height_sidia: float = 0.5;
var newPos;
var SIDIT : boolean = false;
var potolok = false;
var n : float = 7;
var n2 : float = 4;

function Start () {
controller = GetComponent(CharacterController);
Height_Stoia = controller.height;
}

function Update() {

if (Input.GetKey(KeyCode.LeftControl) && !SIDIT) {
controller.height = Height_sidia;
SIDIT = true;
}

if (Input.GetKeyUp (KeyCode.LeftControl) && SIDIT &&
!Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), n2)) {
transform.position = new Vector3(transform.position.x, transform.position.y + n, transform.position.z);
controller.height = Height_Stoia;
SIDIT = false;
}
else {
if (Input.GetKeyUp (KeyCode.LeftControl) && SIDIT
&& Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), n2)) {
potolok = true;
return;
}
}
if(potolok && !Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), n2)){

transform.position = new Vector3(transform.position.x, transform.position.y + n, transform.position.z);
controller.height = Height_Stoia;
SIDIT = false;
potolok = false;
}
}
Провалов не замечено, учитывается потолок и перс автоматически встаёт, если отжата клавиша и позволяет высота потолка ... Но есть один недостаток: перс встаёт очень резко (прямо выстреливает) и, видимо, в данном случает, это не исправить медленной сменой положения СС по Y , т.к. это должно происходить одновременно с увеличением высоты коллайдера, чтобы не было провала в пол ... Подскажите как это исправить ...


Сообщение отредактировал dostalition - Сб, 04 Янв 2014, 22:40
 
СообщениеБлагодарю Всем за ответы ! В числе прочего, а может и основной причиной проблем со скриптом приседания было то, что высоту поднятия для моего СС нужно было выставить не в 0,01F и даже не в 2, а аж в 7 ! Кстати , что заначит F в 0,01F ? Флоат переменную ? В итоге сообразил вот это
Код
var controller : CharacterController;
var Height_Stoia;
var Height_sidia: float = 0.5;
var newPos;
var SIDIT : boolean = false;
var potolok = false;
var n : float = 7;
var n2 : float = 4;

function Start () {
controller = GetComponent(CharacterController);
Height_Stoia = controller.height;
}

function Update() {

if (Input.GetKey(KeyCode.LeftControl) && !SIDIT) {
controller.height = Height_sidia;
SIDIT = true;
}

if (Input.GetKeyUp (KeyCode.LeftControl) && SIDIT &&
!Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), n2)) {
transform.position = new Vector3(transform.position.x, transform.position.y + n, transform.position.z);
controller.height = Height_Stoia;
SIDIT = false;
}
else {
if (Input.GetKeyUp (KeyCode.LeftControl) && SIDIT
&& Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), n2)) {
potolok = true;
return;
}
}
if(potolok && !Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), n2)){

transform.position = new Vector3(transform.position.x, transform.position.y + n, transform.position.z);
controller.height = Height_Stoia;
SIDIT = false;
potolok = false;
}
}
Провалов не замечено, учитывается потолок и перс автоматически встаёт, если отжата клавиша и позволяет высота потолка ... Но есть один недостаток: перс встаёт очень резко (прямо выстреливает) и, видимо, в данном случает, это не исправить медленной сменой положения СС по Y , т.к. это должно происходить одновременно с увеличением высоты коллайдера, чтобы не было провала в пол ... Подскажите как это исправить ...

Автор - dostalition
Дата добавления - 04 Янв 2014 в 22:39
ЛевшаДата: Сб, 04 Янв 2014, 22:49 | Сообщение # 8
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Цитата dostalition ()
как это исправить

Синхронно интерполировать позицию по Y и массштабирование.


X.cor.R (Prologue)
 
Сообщение
Цитата dostalition ()
как это исправить

Синхронно интерполировать позицию по Y и массштабирование.

Автор - Левша
Дата добавления - 04 Янв 2014 в 22:49
dostalitionДата: Вс, 05 Янв 2014, 19:28 | Сообщение # 9
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Попробовал заменить значение высоты поднятия коллайдера "var n : float = 7;" на "var n = Time.deltaTime * 7;" и это выдаёт такие ошибки :
"ArgumentException: get_deltaTime can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.
prisedanie..ctor () (at Assets/_SCRIPTI/_IGROK/prisedanie.js:8)"
и
"get_deltaTime can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function."
Если объявляю эту переменную в Старте, то появляется другая ошибка, а если в Апдейте - то вообще не срабатывает ...


Сообщение отредактировал dostalition - Вс, 05 Янв 2014, 19:30
 
СообщениеПопробовал заменить значение высоты поднятия коллайдера "var n : float = 7;" на "var n = Time.deltaTime * 7;" и это выдаёт такие ошибки :
"ArgumentException: get_deltaTime can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.
prisedanie..ctor () (at Assets/_SCRIPTI/_IGROK/prisedanie.js:8)"
и
"get_deltaTime can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function."
Если объявляю эту переменную в Старте, то появляется другая ошибка, а если в Апдейте - то вообще не срабатывает ...

Автор - dostalition
Дата добавления - 05 Янв 2014 в 19:28
seamanДата: Вс, 05 Янв 2014, 20:15 | Сообщение # 10
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Вы бы еще не в одну строку рассчитывали этот n. Нельзя вне функций что-то считать. Более того deltaTime по Вашему вообще что?- это время с последнего кадра. Какие вообще кадры в основном теле скрипта?
1. Почему Height_Stoia считается из высоты контроллера, а Height_sidia - нет? А если у Вас Height_Stoia = 1000? Представляете - была высота 1000, стала 0.5! Из великана - в лилипуты просто приседанием!
2. Аналогичный вопрос о переменной n2. Если высота контроллера 1000? А Вы проверяете потолок на высоте 4 - перс гарантированно пробъет потолок головой.
3. Зачем нужна переменная potolok и последний if?

Объясните вразумительно - почему Вы не хотите пользоваться чужими разработками? Вам на юнити.ру дали скрипт, который плавно опускает/поднимает персонажа. Почему Вы не хотите попробовать его?
 
СообщениеВы бы еще не в одну строку рассчитывали этот n. Нельзя вне функций что-то считать. Более того deltaTime по Вашему вообще что?- это время с последнего кадра. Какие вообще кадры в основном теле скрипта?
1. Почему Height_Stoia считается из высоты контроллера, а Height_sidia - нет? А если у Вас Height_Stoia = 1000? Представляете - была высота 1000, стала 0.5! Из великана - в лилипуты просто приседанием!
2. Аналогичный вопрос о переменной n2. Если высота контроллера 1000? А Вы проверяете потолок на высоте 4 - перс гарантированно пробъет потолок головой.
3. Зачем нужна переменная potolok и последний if?

Объясните вразумительно - почему Вы не хотите пользоваться чужими разработками? Вам на юнити.ру дали скрипт, который плавно опускает/поднимает персонажа. Почему Вы не хотите попробовать его?

Автор - seaman
Дата добавления - 05 Янв 2014 в 20:15
dostalitionДата: Вс, 05 Янв 2014, 20:42 | Сообщение # 11
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Цитата seaman ()
Вам на юнити.ру дали скрипт, который плавно опускает/поднимает персонажа. Почему Вы не хотите попробовать его?
Потому , что он не работает , как надо ... Значения переменных подбирал по конкретной сцене с конкретным контроллером, может это и не лучших способ, но всё работает нормально ! Вопрос лишь в том, как сделать плавный подъём ... Я так понимаю, что нужно лишь плавно сместить высоту и плавно вернуть коллайдер в значение стоя, вроде и строчка правильная (смотрел в справке), но не пойму куда её прилепить ... А переменную потолок и н2 сделал потому , что перс не вставал автоматически при выходе из под низкого потолка, если контрол был уже отжат до того ....

Добавлено (05 Янв 2014, 20:42)
---------------------------------------------
По поводу первого вопроса ... Теперь написал так

Код
Height_Stoia = controller.height;
Height_sidia = controller.height/4;
Речь была об этом ?
Цитата dostalition ()
1. Почему Height_Stoia считается из высоты контроллера, а Height_sidia - нет? А если у Вас Height_Stoia = 1000? Представляете - была высота 1000, стала 0.5! Из великана - в лилипуты просто приседанием!


Сообщение отредактировал dostalition - Вс, 05 Янв 2014, 20:35
 
Сообщение
Цитата seaman ()
Вам на юнити.ру дали скрипт, который плавно опускает/поднимает персонажа. Почему Вы не хотите попробовать его?
Потому , что он не работает , как надо ... Значения переменных подбирал по конкретной сцене с конкретным контроллером, может это и не лучших способ, но всё работает нормально ! Вопрос лишь в том, как сделать плавный подъём ... Я так понимаю, что нужно лишь плавно сместить высоту и плавно вернуть коллайдер в значение стоя, вроде и строчка правильная (смотрел в справке), но не пойму куда её прилепить ... А переменную потолок и н2 сделал потому , что перс не вставал автоматически при выходе из под низкого потолка, если контрол был уже отжат до того ....

Добавлено (05 Янв 2014, 20:42)
---------------------------------------------
По поводу первого вопроса ... Теперь написал так

Код
Height_Stoia = controller.height;
Height_sidia = controller.height/4;
Речь была об этом ?
Цитата dostalition ()
1. Почему Height_Stoia считается из высоты контроллера, а Height_sidia - нет? А если у Вас Height_Stoia = 1000? Представляете - была высота 1000, стала 0.5! Из великана - в лилипуты просто приседанием!

Автор - dostalition
Дата добавления - 05 Янв 2014 в 20:42
ЛевшаДата: Вс, 05 Янв 2014, 20:44 | Сообщение # 12
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Цитата Левша ()
Синхронно интерполировать позицию по Y и массштабирование.

Код

function Update () {
     controller.height = Mathf.Lerp(controller.height, 1f, Time.deltaTime);
     Physics.Raycast (transform.position, -transform.up, hit, 2f);
     transform.position.y = hit.point.y + controller.height / 2; // если пивот в центре обьекта
}


X.cor.R (Prologue)
 
Сообщение
Цитата Левша ()
Синхронно интерполировать позицию по Y и массштабирование.

Код

function Update () {
     controller.height = Mathf.Lerp(controller.height, 1f, Time.deltaTime);
     Physics.Raycast (transform.position, -transform.up, hit, 2f);
     transform.position.y = hit.point.y + controller.height / 2; // если пивот в центре обьекта
}

Автор - Левша
Дата добавления - 05 Янв 2014 в 20:44
seamanДата: Вс, 05 Янв 2014, 20:50 | Сообщение # 13
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Именно. Я бы вообще все подобные переменные считал из размеров самого контроллера.
Не увидел реакции по поводу переменной n. Вы поняли, что НЕЛЬЗЯ использовать deltaTime не в функциях? Желательно использовать ее в функциях, вызываемых каждый кадр, иначе теряется ее смысл.
Вообще вне функций все расчеты - только с константами.
Цитата
Потому , что он не работает , как надо ...

Ну так проще же готовый скрипт немного под себя перестроить, чтобы работал как надо, чем писать все самому с нуля.
 
СообщениеИменно. Я бы вообще все подобные переменные считал из размеров самого контроллера.
Не увидел реакции по поводу переменной n. Вы поняли, что НЕЛЬЗЯ использовать deltaTime не в функциях? Желательно использовать ее в функциях, вызываемых каждый кадр, иначе теряется ее смысл.
Вообще вне функций все расчеты - только с константами.
Цитата
Потому , что он не работает , как надо ...

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

Автор - seaman
Дата добавления - 05 Янв 2014 в 20:50
dostalitionДата: Вс, 05 Янв 2014, 20:56 | Сообщение # 14
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Цитата seaman ()
Ну так проще же готовый скрипт немного под себя перестроить, чтобы работал как надо, чем писать все самому с нуля.
Вот Я и взял один из "готовых" скриптов и переработал его так, чтобы он работал как надо, но осталась только загвоздка с плавностью подъёма ... Сейчас попробую разобраться с тем, что Левша подкинул smile
 
Сообщение
Цитата seaman ()
Ну так проще же готовый скрипт немного под себя перестроить, чтобы работал как надо, чем писать все самому с нуля.
Вот Я и взял один из "готовых" скриптов и переработал его так, чтобы он работал как надо, но осталась только загвоздка с плавностью подъёма ... Сейчас попробую разобраться с тем, что Левша подкинул smile

Автор - dostalition
Дата добавления - 05 Янв 2014 в 20:56
seamanДата: Вс, 05 Янв 2014, 21:00 | Сообщение # 15
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Он Вам подкинул тоже самое, что подкинули на форуме юнити.ру
Левша:
controller.height = Mathf.Lerp(controller.height, 1f, Time.deltaTime);
Skript47
controller.height = Mathf.Lerp(controller.height, Height.x, Time.deltaTime * Height.z); // Двигать высоту коллайдера до 4 со скоростью 8
 
СообщениеОн Вам подкинул тоже самое, что подкинули на форуме юнити.ру
Левша:
controller.height = Mathf.Lerp(controller.height, 1f, Time.deltaTime);
Skript47
controller.height = Mathf.Lerp(controller.height, Height.x, Time.deltaTime * Height.z); // Двигать высоту коллайдера до 4 со скоростью 8

Автор - seaman
Дата добавления - 05 Янв 2014 в 21:00
dostalitionДата: Вт, 07 Янв 2014, 01:49 | Сообщение # 16
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Написал скрипт приседания через анимацию (уменьшал и увеличивал scale всего префаба плеера)
Код
var anim_1: AnimationClip;
var anim_2: AnimationClip;
var SIDIT : boolean = false;
var potolok = false;
var looch = 12;//длина луча

function Start () {
animation[anim_1.name].speed = 3;
animation[anim_1.name].wrapMode = WrapMode.Once;

animation[anim_2.name].speed = 3;
animation[anim_2.name].wrapMode = WrapMode.Once;
}

function Update() {

if (Input.GetKeyDown(KeyCode.LeftControl) && !SIDIT) {
animation.Play(anim_1.name);
SIDIT = true;
}

if (Input.GetKeyUp(KeyCode.LeftControl) && SIDIT &&
!Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), looch)) {
animation.Play(anim_2.name);
SIDIT = false;
}
else {
if (Input.GetKeyUp(KeyCode.LeftControl) && SIDIT
&& Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), looch)) {
potolok = true;
return;
}
}
if(potolok && !Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), looch)){

animation.Play(anim_2.name);
SIDIT = false;
potolok = false;
}
}
В итоге, плавно приседает и встаёт , но иногда, проваливается, если часто клацать контрол , потому, что не понял как сделать через анимацию подъем (чтобы коллайдер не опускался ниже пола при увеличении) не в определённую точку, а через y + n (текущая высота + число), а без подъёма, видимо, не обойтись. Подскажите, кто в курсе, есть ли возможность сделать его через анимацию или как прилепить кодом. Ни в одном из предложенных скриптов этого не нашел ...
P.S. Мать их Лерпы уже вынесли мозг ! Ну не могу в них разобраться и всё ... В тех примерх всё хорошо, но относительно моего скрипта - трындец и всё ... Помогите, погибаю ...


Сообщение отредактировал dostalition - Вт, 07 Янв 2014, 01:51
 
СообщениеНаписал скрипт приседания через анимацию (уменьшал и увеличивал scale всего префаба плеера)
Код
var anim_1: AnimationClip;
var anim_2: AnimationClip;
var SIDIT : boolean = false;
var potolok = false;
var looch = 12;//длина луча

function Start () {
animation[anim_1.name].speed = 3;
animation[anim_1.name].wrapMode = WrapMode.Once;

animation[anim_2.name].speed = 3;
animation[anim_2.name].wrapMode = WrapMode.Once;
}

function Update() {

if (Input.GetKeyDown(KeyCode.LeftControl) && !SIDIT) {
animation.Play(anim_1.name);
SIDIT = true;
}

if (Input.GetKeyUp(KeyCode.LeftControl) && SIDIT &&
!Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), looch)) {
animation.Play(anim_2.name);
SIDIT = false;
}
else {
if (Input.GetKeyUp(KeyCode.LeftControl) && SIDIT
&& Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), looch)) {
potolok = true;
return;
}
}
if(potolok && !Physics.Raycast (transform.position, transform.TransformDirection (Vector3.up), looch)){

animation.Play(anim_2.name);
SIDIT = false;
potolok = false;
}
}
В итоге, плавно приседает и встаёт , но иногда, проваливается, если часто клацать контрол , потому, что не понял как сделать через анимацию подъем (чтобы коллайдер не опускался ниже пола при увеличении) не в определённую точку, а через y + n (текущая высота + число), а без подъёма, видимо, не обойтись. Подскажите, кто в курсе, есть ли возможность сделать его через анимацию или как прилепить кодом. Ни в одном из предложенных скриптов этого не нашел ...
P.S. Мать их Лерпы уже вынесли мозг ! Ну не могу в них разобраться и всё ... В тех примерх всё хорошо, но относительно моего скрипта - трындец и всё ... Помогите, погибаю ...

Автор - dostalition
Дата добавления - 07 Янв 2014 в 01:49
Форум Игроделов » UNITY3D » СКРИПТИНГ » Проблема со скриптом приседания ...
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024