#c# #unity3d
Вопрос:
Проблема в том, что у игрока есть аниматор, и когда он простаивает, он воспроизводит какую-то анимацию, которая заставляет игрока немного двигаться.
Я добавил к местности материал с нулевой фрикцией , но пока ничего не изменил в свойствах : Динамическое трение , Статическое трение, Упругость установлены на 0, а Комбинация трения установлена на Умножение, а Комбинация отскока-на среднее.
Не уверен, следует ли мне что-то изменить с помощью скрипта на этом ZeroFriction, чтобы заблокировать перемещение игрока или просто отключить/включить компоненты пользовательского элемента управления игрока от третьего лица и персонажа от третьего лица.
private void Update()
{
if (closeCarte == false)
{
var heading = transform.position - player.transform.position;
var dot = Vector3.Dot(heading, -transform.forward);
if (dot > 1)
{
var lookat = player.transform.position - securityKeyPadInteractable.transform.position;
lookat.y = 0;
if (lookat.magnitude <= interactableItem.distance amp;amp; interactableItem != null)
{
if (!playAnimOnce)
{
if (ikControl.handFinishedMove == true)
{
if (securityKeyPad1 != null)
{
securityKeyPad1.SetActive(true);
}
if (virtualCam != null)
virtualCam.enabled = true;
freeLookCam2.enabled = false;
Cursor.visible = true;
camerasContorl.enabled = false;
// Here
playAnimOnce = true;
}
}
}
else if (playAnimOnce)
{
if (securityKeyPad1 != null)
{
securityKeyPad1.SetActive(false);
}
if (virtualCam != null)
virtualCam.enabled = false;
camerasContorl.enabled = true;
freeLookCam2.enabled = true;
Cursor.visible = false;
if (m_hasOpened == true)
{
//anim.Play("Crate_Close");
//StartCoroutine(dimLights.dimLightOverTime(0, 2f));
}
playAnimOnce = false;
if (securityKeypadSystem != null)
securityKeypadSystem.ResetCode();
}
}
else
{
securityKeyPad1.SetActive(false);
playAnimOnce = false;
}
}
}
В этот момент после этой строки :
camerasContorl.enabled = false;
Где я писал // Здесь
Я хочу заблокировать(запретить игроку двигаться), но также сделать так, чтобы, если игрок нажмет одну из клавиш перемещения, он отпустит игрока и позволит снова двигаться.
В этом месте кода отображается большая клавиатура безопасности, и игрок должен ввести какой-то код.Проблема в том, что, поскольку игрок немного двигается, даже если игрок не нажимает никаких клавиш движения, он теряет связь с клавиатурой безопасности, и мне нужно снова переместить плеер вперед, чтобы снова активировать клавиатуру безопасности.
Я хочу запретить игроку двигаться/скользить по местности, но не отключать движения.
У игрока есть следующие компоненты : Аниматор , Жесткое тело(при запуске игры x,y,z на повороте замораживания проверяется верно и блокируется) , Капсула-коллайдер , Управление пользователем от третьего лица и Персонаж от третьего лица.
Комментарии:
1. Я мог бы добавить кнопку отмены, чтобы она сняла блокировку игрока, но я хочу, чтобы игра шла более плавно. В большинстве игр в этой ситуации есть кнопка отмены или X, или если вы попытаетесь ввести код 5 раз, он автоматически освободит игрока. но я хочу, чтобы это было максимально естественно, поэтому, если есть взаимодействие, «зафиксируйте» игрока на его позиции, но позвольте игроку отойти от объекта взаимодействия. Я думаю так же, как и в жизни, когда вы пытаетесь разблокировать что-то, вам не нужно нажимать кнопку отмены, если вы устали или хотите сделать что-то еще.
Ответ №1:
Что касается анимации, возможно, посмотрите, включено ли корневое движение, которое фактически «переместит» преобразование вашего объекта.
Официальная ссылка: https://docs.unity3d.com/Manual/RootMotion.html