Hades-Like Isometric Movement

Basically, if you have never played Hades the screenshot basically is what I’m going for (snappy movement not facing the cursor that can only move in those simple directions using those keys). I have some simple movement but its not very snappy and more smooth. Any tips on how to make more snappy movement in an isometric perspective?

8139044--1056428--Screenshot 2022-05-18 205509.png

Showing us your current code would be a good starting point.

Just do the controls for a top down game and rotate the camera…?
As above please post some code or elaborate.

1 Like

You’re not alone. You may wish to avail yourself of existing publicly-posted tutorials.

Right. I just had a look at a gameplay video. Of course this was on a console (xbox) with a controller, so they most likely used an analog stick. Though as we can clearly see, he actually does not move in any particular “snappy” directions. So the movement is just relative to the camera. Yes, you get snappy controls when you use WASD to move but that’s just the result of using keys. I’m not sure why this “snappy” movement is so important to you? In old games (Diablo 2 came to my mind) the reason for snappy alignments was that the character actually was a 2d sprite and there were only so many versions of a character sprite (16 directions in the case of D2). However the movement itself was not really restricted in just certain directions. The system just picked the most fitting sprite for the movement direction. If you have an actual 3d character it doesn’t make too much sense to only allow certain orientations unless there’s an actual reason for it.

2 Likes

My bad realize that might be helpful this is my current movement code.

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

public class playerMovement : MonoBehaviour
{
    [SerializeField] float moveSpeed = 4f;

    Vector3 forward, right;

    void Start ()
    {
        forward = Camera.main.transform.forward;
        forward.y = 0;
        forward = Vector3.Normalize(forward);

        right = Quaternion.Euler(new Vector3(0, 90, 0)) * forward;
    }
   
   
    void Update ()
    {
       
        Vector3 moveVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        transform.position += moveVector * moveSpeed * Time.deltaTime;
        Debug.Log(moveVector);
    }

}