Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для TOMPSYS
0 / 0 / 0
Регистрация: 03.04.2018
Сообщений: 18

Проблема со сбросом позиции персонажа

11.05.2023, 18:08. Показов 448. Ответов 2

Студворк — интернет-сервис помощи студентам
Если персонаж упал за пределы карты, как только transform.position.y < -10 то он должен переместиться в начало, и дальше перемещаться, прыгать и тд, но вместо этого, условие выполняется бесконечно и персонаж тупо стоит на месте (бесконечно вызывается метод , ResetPosition() в update) не смотря на то что transform.position.y = 1 после сброса.
Ничего не понимаю, что за бред то, или я совсем тупой, помогите пожалуйста((

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
   void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
        speed = walkSpeed;
        initialPosition = transform.position;
    }
 
    void Update()
    {
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
 
        playerDirection = transform.right * x + transform.forward * z;
 
        Jump(characterController.isGrounded && Input.GetKey(jumpKey));
        Run(Input.GetKey(runKey));
        LookAround();
 
        // ВОТ ЭТО УСЛОВИЕ, КАК ТОЛЬКО УПАЛ ТО ВЫЗВАТЬСЯ МЕТОД ДОЛЖЕН
 
        if (transform.position.y < -10f)
        {
            ResetPosition();
        }
    }
 
 
    // Вот этот метод, он сбрасывает и позиция начальная становится, и значит условие выполняться уже не может
    private void ResetPosition()
    {
          transform.position = initialPosition;
          vectorVelocity = Vector3.zero;
    }
 
 
 private void FixedUpdate()
    {
        Walk(playerDirection);
        GameGravity(characterController.isGrounded);
    }
 
    private void Walk(Vector3 direction)
    {
        characterController.Move(direction * Time.deltaTime * walkSpeed);
    }
 
    private void GameGravity(bool isGrounded)
    {
        if (isGrounded)
        {
            vectorVelocity.y = -1f;
        }
        else
        {
            vectorVelocity.y -= gravityForce * Time.deltaTime;
            characterController.Move(vectorVelocity * Time.deltaTime);
        }
    }
 
    private void Jump(bool readyToJump)
    {
        if (readyToJump)
        {
            vectorVelocity.y = jumpPower;
        }
    }
 
    private void Run(bool inputRun)
    {
        if (inputRun)
        {
            walkSpeed = runSpeed;
        }
        else
        {
            walkSpeed = speed;
        }
    }
 
    private void LookAround()
    {
        float mouseX = Input.GetAxis("Mouse X") * sensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * sensitivity * Time.deltaTime;
 
        cameraPitch -= mouseY;
        cameraPitch = Mathf.Clamp(cameraPitch, -90f, 90f);
 
        cameraTransform.localRotation = Quaternion.Euler(cameraPitch, 0, 0);
 
        transform.Rotate(transform.up, mouseX);
    }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.05.2023, 18:08
Ответы с готовыми решениями:

Проблема со сбросом пароля биос
Материнская плата Asus h110m-c. Покупал материнскую плату, но хозяин забыл пароль от Биос. При замыкании контактов, и включении ПК, просит...

HUANANZHI X58 LGA1366, CPU Xeon X5570 - проблема со сбросом частоты процесора
Добрый вечер! Помогите, пожалуйста. Недавно приобрел на АлиЕкспрес материнскую плату, центральный процессор и опертивную память:...

Проблема с прыжками персонажа
Всем доброго время суток! В игре используется метод уничтожения врагов прыжком (как в Марио). Суть бага такова что при прыжке на...

2
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
11.05.2023, 19:00
Лучший ответ Сообщение было отмечено TOMPSYS как решение

Решение

CharacterController очень сильно не дружит с такими вот неожиданными поворотами. Менять позицию нужно в корутине, пропуская кадр при этом, и отключая контроллер.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class XXX : MonoBehaviour
{
    public CharacterController controller;
 
    void Start()
    {
        StartCoroutine(c_ChangePosition(Vector3.up * 100.0f));
    }
 
    IEnumerator c_ChangePosition(Vector3 position)
    {
        controller.enabled = false;
        yield return null;
        controller.transform.position = position;
        yield return null;
        controller.enabled = true;
    }
}
1
 Аватар для TOMPSYS
0 / 0 / 0
Регистрация: 03.04.2018
Сообщений: 18
11.05.2023, 19:14  [ТС]
Офигеть спасибо, и реально сработало, теперь буду разбираться с эти всем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.05.2023, 19:14
Помогаю со студенческими работами здесь

Проблема с прыжком персонажа
Проблема такова. Я списывал всё по этому видео https://www.youtube.com/watch?v=Ohq8tgKpx1k и всё работает нормально, но если зажать кнопку...

Проблема управления персонажа
Здравствуйте, друзья буду благодарен если поможете. Вопрос может показаться простым, но мучаюсь уже давно. Unity игра 2д, вид сверху,...

Проблема с передвижением персонажа
Персонаж в одном направлении может двигать только небольшое время, а дальше застывает и нужно или разворачиваться или подождать, в чём...

Проблема передвижение персонажа
Привет) Написал код для передвижения персонажа от первого лица. Создал два скрипта отвечающие за ввод с мышки и клавиатуры. Все...

[Проблема] Движение персонажа по движущемуся объекту
Есть объект, у которого задано движение через: public float speed = 0.1f; private void FixedUpdate() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru