Unity/Unity자체

마우스 8방향 이동

아리에 2020. 3. 9. 17:12

긁기용

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

public class Move : MonoBehaviour
{

    private float moveSpeed;
    private Transform tr; //움직일 오브젝트의 트렌스폼
    private Vector2 initTouchDown;
    private Vector2 initDrag;
    private Camera mainCamera;

    void Start()
    {
        tr = GetComponent();
        moveSpeed = 0.1f;
        mainCamera = GameObject.Find("Main Camera").GetComponent();
    }


    // Update is called once per frame
    void Update()
    {
        PlayerMove();
    }

    private void PlayerMove()
    {
        if (Input.GetMouseButtonDown(0))
        {
            initTouchDown = Input.mousePosition;
        }

        if (Input.GetMouseButton(0))
        {
            initDrag = Input.mousePosition;
            Debug.Log("initTouchDown : " + initTouchDown + "  initDrag : " + initDrag);
            MoveSwitch(Direction(initTouchDown, initDrag)); //fir Vec2, sec Vec2
        }
    }

    private int Direction(Vector2 fir, Vector2 sec)
    {
        if(fir.x <= sec.x + 40 && fir.x >= sec.x - 40)
        {
            if (fir.y <= sec.y + 40 && fir.y >= sec.y - 40)
                return 1; //정지
            else if (fir.y > sec.y)
                return 2; //아래
            else
                return 3; //위
        }
        else if(fir.x > sec.x + 40)
        {
            if (fir.y <= sec.y + 40 && fir.y >= sec.y - 40)
                return 4; //왼쪽
            else if (fir.y > sec.y)
                return 5; //왼쪽아래
            else
                return 6; //왼쪽위에
        }
        else
        {
            if (fir.y <= sec.y + 40 && fir.y >= sec.y - 40)
                return 7; //오른쪽
            else if (fir.y > sec.y + 40)
                return 8; //오른쪽아래
            else
                return 9; //오른쪽위에
        }
    }

    private void MoveSwitch(int move)
    {
        switch (move)
        {
            case 1:
                tr.Translate(Vector2.zero * moveSpeed);
                break;
            case 2:
                tr.Translate(-Vector2.up * moveSpeed);
                break;
            case 3:
                tr.Translate(Vector2.up * moveSpeed);
                break;
            case 4:
                tr.Translate(-Vector2.right * moveSpeed);
                break;
            case 5:
                tr.Translate(-Vector2.right * moveSpeed / 2);
                tr.Translate(-Vector2.up * moveSpeed / 2);
                break;
            case 6:
                tr.Translate(-Vector2.right * moveSpeed / 2);
                tr.Translate(Vector2.up * moveSpeed / 2);
                break;
            case 7:
                tr.Translate(Vector2.right * moveSpeed);
                break;
            case 8:
                tr.Translate(Vector2.right * moveSpeed /2);
                tr.Translate(-Vector2.up * moveSpeed / 2);
                break;
            case 9:
                tr.Translate(Vector2.right * moveSpeed / 2);
                tr.Translate(Vector2.up * moveSpeed / 2);
                break;
        }
    }
}