Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/47: Рейтинг темы: голосов - 47, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
1

Как сделать, чтобы персонаж поворачивался в сторону движения в Unity?

17.09.2020, 18:23. Показов 9324. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerControler : MonoBehaviour
{
 
    public float speed;
 
    private Rigidbody2D rb;
    private Vector2 moveVelocity;
    private float movement;
 
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }
 
    void Update()
    {
        Vector2 moveInput = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
        moveVelocity = moveInput.normalized * speed;
        
 
    }
 
    void FixedUpdate()
    {
        rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2020, 18:23
Ответы с готовыми решениями:

Как сделать так, чтобы спрайт поворачивался за курсором?
Как сделать чтобы player поворачивался за курсором? Помогите реализовать пожалуйста) using...

Как сделать так что бы персонаж поднимался в горку а не пробегал сквозь неё в unity 2D?
Персонаж просто пробегает сквозь горку что делать ?

Как создавать точки сохранения в unity? Чтобы если персонаж упал, то он возвращался на определенную точку сохранения
Я подключил библиотеку : using UnityEngine.SceneManagement; Далее подключил условие, если...

Как сделать, чтобы персонаж не летал?
Здравствуйте ,я создаю игру как сделать так что бы персонаж не летал?

30
304 / 211 / 96
Регистрация: 04.07.2012
Сообщений: 896
17.09.2020, 18:27 2
Цитата Сообщение от snippet02 Посмотреть сообщение
Как сделать, чтобы персонаж поворачивался в сторону движения в Unity?
Вариант почитать названия тем на этой странице не подходит?
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
17.09.2020, 18:30  [ТС] 3
Нет, потому что я уже все пересмотрел, все испробовал, ничего не получается!
0
304 / 211 / 96
Регистрация: 04.07.2012
Сообщений: 896
17.09.2020, 18:38 4
Что-то в коде у Вас не заметно, что вы что-то пробовали.
Вы каким образом хотите реализовать поворот?

Добавлено через 1 минуту
ЗЫ.: А идея получать Vector2 в Update и использовать его в FixedUpdate она откуда взялась?
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
17.09.2020, 19:00  [ТС] 5
Подсмотрел у ютубера

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

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

Добавлено через 14 минут
Вот код с поворотом
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerControler : MonoBehaviour
{
 
    public float speed;
 
    private Rigidbody2D rb;
    private Vector2 moveVelocity;
    private bool facingRight = true;
    private float moveInput;
    
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }
 
    void Update()
    {
        Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
        moveVelocity = moveInput.normalized * speed;
       
        
 
    }
 
    void FixedUpdate()
    {
        rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
        if(facingRight == false && moveInput >0)
        {
            Flip();
        }
        else if (facingRight == true && moveInput < 0)
                {
            Flip();
        }
    }
    void Flip()
    {
        facingRight = !facingRight;
        Vector3 Scaler = transform.localScale;
        Scaler.x *= -1;
        transform.localScale = Scaler;
    }
}
0
304 / 211 / 96
Регистрация: 04.07.2012
Сообщений: 896
17.09.2020, 19:43 6
А, ну во-первых вот ответьте себе сами на вопрос Ваш родной город стоит на координатах меньше нуля или больше?
moveInput.x вот это проверяйте в условии и вроде должно заработать.
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
17.09.2020, 20:06  [ТС] 7
Я так понял moveInput.x писать нужно только в ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
void FixedUpdate()
    {
        rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
        if(facingRight == false && moveInput.x >0)
        {
            Flip();
        }
        else if (facingRight == true && moveInput.x < 0)
                {
            Flip();
        }
    }
выдает ошибку
Assets\��\PlayerControler.cs(32,46): error CS1061: 'float' does not contain a definition for 'x' and no accessible extension method 'x' accepting a first argument of type 'float' could be found (are you missing a using directive or an assembly reference?)
0
304 / 211 / 96
Регистрация: 04.07.2012
Сообщений: 896
17.09.2020, 20:44 8
Цитата Сообщение от snippet02 Посмотреть сообщение
private float moveInput;
Цитата Сообщение от snippet02 Посмотреть сообщение
Vector2 moveInput
вы уж сами определитесь...

логичнее будет
C#
1
2
3
private Vector2 moveInput;
***
moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
Я если честно вообще в Вашем коде не вижу, чтобы "float moveInput" становился не равным нулю.

Добавлено через 2 минуты
И я кажется понял, чего у меня глаза хотят вытечь от этого кода:
СмОтРеТь Не ВоЗмОжНо БеЗ фОрМаТиРоВаНиЯ. ИсПоЛьЗуЙтЕ кНоПкУ C#!
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
17.09.2020, 20:57  [ТС] 9
При повороте перс отлетает на несколько см
0
304 / 211 / 96
Регистрация: 04.07.2012
Сообщений: 896
17.09.2020, 21:03 10
Логично, вы просили его размер отрицательным сделать, вот он его и делает.
localScale это его размер
rotation - направление.
https://docs.unity3d.com/Scrip... ation.html
0
762 / 491 / 216
Регистрация: 05.04.2015
Сообщений: 2,041
17.09.2020, 21:20 11
Цитата Сообщение от snippet02 Посмотреть сообщение
При повороте перс отлетает на несколько см
Он не понял в дочерних объектах находится или сам по себе? При чем тут localScale? Попробуй так в Update.
C#
1
2
3
4
if(moveInput.x != 0)
transform.rotation = Quaternion.LookRotation(new Vector3(0, 0, moveInput.x));
if(moveInput.y != 0)
transform.rotation = Quaternion.LookRotation(new Vector3(0, 0, moveInput.y), Vector2.left);
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
18.09.2020, 13:05  [ТС] 12
Не помогло
0
304 / 211 / 96
Регистрация: 04.07.2012
Сообщений: 896
18.09.2020, 13:13 13

Не по теме:

Цитата Сообщение от snippet02 Посмотреть сообщение
Не помогло
А у меня нога левая зачесалась.
Примерно столько же полезной информации.



Что именно не помогло и что у Вас сейчас написано?
Как себя ведет персонаж?
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
18.09.2020, 15:06  [ТС] 14
Я правильно написал?
Если да, то он также телепортируется, только теперь и по горизонтали, и по вертикали
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerControler : MonoBehaviour
{
 
    public float speed;
 
    private Rigidbody2D rb;
    private Vector2 moveVelocity;
    private bool facingRight = true;
    private Vector2 moveInput;
 
 
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }
 
    void Update()
    {
        moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
 
        moveVelocity = moveInput.normalized * speed;
        if (moveInput.x != 0)
            transform.rotation = Quaternion.LookRotation(new Vector3(0, 0, moveInput.x));
        if (moveInput.y != 0)
            transform.rotation = Quaternion.LookRotation(new Vector3(0, 0, moveInput.y), Vector2.left);
 
 
 
 
    }
 
    void FixedUpdate()
    {
        rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
        if (moveInput.x != 0)
            transform.rotation = Quaternion.LookRotation(new Vector3(0, 0, moveInput.x));
        if (moveInput.y != 0)
            transform.rotation = Quaternion.LookRotation(new Vector3(0, 0, moveInput.y), Vector2.left);
    }
    void Flip()
    {
        facingRight = !facingRight;
        Vector3 Scaler = transform.localScale;
        Scaler.x *= -1;
        transform.localScale = Scaler;
    }
}
0
762 / 491 / 216
Регистрация: 05.04.2015
Сообщений: 2,041
18.09.2020, 16:03 15
Цитата Сообщение от snippet62
то он также телепортируется
Может там у вас анимация мешает,я у себя проверял простой спрайт поворачивал и все нормально поврачивалось и вверх и вниз и в стороны. Если персонаж с анимацией то надо его в пустой объект пихать и объект крутить.
0
3358 / 1772 / 1027
Регистрация: 26.10.2018
Сообщений: 5,199
18.09.2020, 17:36 16
Я что-то не пойму, нужен поворот или флип? Если только флип:
C#
1
2
3
4
var s = transform.localScale;
s.x = Mathf.Sign(Input.GetAxisRaw("Horizontal"));
s.y = Mathf.Sign(Input.GetAxisRaw("Vertical")); // если надо
transform.localScale = s;
Вот тут прям поворот http://www.unity3d.ru/distribu... =5&t=45186
Вот тут прям поворот https://youtu.be/LNLVOjbrQj4?t=443
Под Input переделать не сложно я думаю будет.
1
762 / 491 / 216
Регистрация: 05.04.2015
Сообщений: 2,041
18.09.2020, 18:16 17
Не пользовалса раньше Mathf.Sign такая фунсция как раз для этого. Забыл что scale это и есть localScale и думаю при чем тут local
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
18.09.2020, 18:16  [ТС] 18
не, не получается
Я хочу чтобы игрок поворачивался в сторону(Допустим стоишь в точке x=0, нажимаешь влево и он поворачивается влево, наживаем вправо, он поворачивается вправо) Как во всех играх в принципе
0
762 / 491 / 216
Регистрация: 05.04.2015
Сообщений: 2,041
18.09.2020, 18:35 19
Цитата Сообщение от snippet02 Посмотреть сообщение
не, не получается
Хоть скрин с экрана покажи, последний постер правильно написал Лучше видео
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
18.09.2020, 18:41  [ТС] 20
Сюда можно видео вставить? Думаю так легче будет узнать в чем проблема

Добавлено через 26 секунд
А как здесь отправлять видео?
0
18.09.2020, 18:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2020, 18:41
Помогаю со студенческими работами здесь

Как сделать, чтобы персонаж не наклонялся головой
Здравствуйте. Имеется 3d персонаж, когда он ходит, то случается так, он наклоняется головой до...

Как сделать чтобы персонаж не проходил сквозь объект?
Есть персонаж и tilemap на обоях есть колайдеры, также rigidbody2d на персонаже Body Type...

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

Как сделать, чтобы персонаж прыгал всего один раз, а не бесконечно?
как сделать что более 1 раза не прыгал ВОТ САМ КОД: using System.Collections; using...

Графика: Как сделать так, чтобы персонаж не мог проходить, пересекать стены?
Приветствую. Нарисовал лабиринт и персонажа (красный круг), который должен дойти до выхода от...

Как сделать чтобы когда персонаж выходил за форму то игра оканчивается и таймер останавливается
Windows forms C#


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru