@Fix1Daru

Как можно изменять спрайты и анимации в зависимости от положение курсора 2D. (В моём случае androud джостика)?

В ходе разработке, появилось желание сделать анимацию персонажа, такую же как в игре Enter The Gungeon. То есть герой имеет 8 спрайтов (в 8 направлений) и анимации (хотьбы + стойки) и меняется это в зависимости от положения курсора, в моём же случаи джостика под androidю Я сделал что-то похожие, НО только когда я нажимаю клавиши. Буду благодарен если подскажите как можно добавить в данный код (или изменить его совсем) добавить мышь. Чтобы при нажатии клавиш происходило только перемещение по миру, а анимация и спрайты менялись в зависимости от положения курсора. Будет приятно если поможете оптимизируйте под android.
Знания в C# малы, а идею реализовать хочется. Буду благодарен! (На гифке показан пример)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Movement : MonoBehaviour
{
    public float moveSpeed = 3f;

    Animator thisAnim;
    float lastx, lasty;




    void Start()
    {
        thisAnim = GetComponent<Animator>();
    }


    void Update()
    {
        Move();
    }


    void Move()
    {
        Vector3 rightMovement = Vector3.right * moveSpeed * Time.deltaTime * Input.GetAxis("Horizontal");
        Vector3 upMovement = Vector3.up * moveSpeed * Time.deltaTime * Input.GetAxis("Vertical");
        Vector3 heading = Vector3.Normalize(rightMovement + upMovement);


        transform.position += rightMovement;
        transform.position += upMovement;

        UpdateAnimation(heading);
    }

    void UpdateAnimation(Vector3 dir)
    {

        if (dir.x == 0f && dir.y == 0f)
        {
            thisAnim.SetFloat("LastDirX", lastx);
            thisAnim.SetFloat("LastDirY", lasty);
            thisAnim.SetBool("Movement", false);
        }
        else
        {
            lastx = dir.x;
            lasty = dir.y;
            thisAnim.SetBool("Movement", true);
        }

        thisAnim.SetFloat("DirX", dir.x);
        thisAnim.SetFloat("DirY", dir.y);

    }


}

6151eb4772a81334834145.gif
  • Вопрос задан
  • 313 просмотров
Пригласить эксперта
Ответы на вопрос 1
@NIKROTOS
Начинающий программист.
Создаёшь точку, делаешь объект дочерним ей или привязываешь её явно по одной из осей координат(как вариант можно использовать единичный вектор в глобальных координатах), определяешь угол между этой точкой героем и прицелом, по углу выдаёшь нужный спрайт.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы