본문 바로가기

메모장/스네이크 게임

스네이크 게임 - 조작키 코드 보완

유튜버 "골드메탈"님의 영상을 참고하여 모바일 게임용 조작키를 추가하였고
조작키에 대한 코드를 보완하였다.
https://www.youtube.com/watch?v=IJxc-ANxO-w&t=1204s

모바일용 컨트롤러를 추가한 후 해당 컨트롤러용 조작 코드를 작성하였다.
기존의 키보드를 통한 조작도 가능하도록 되어 있다.

 

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

public class SnakeMove : MonoBehaviour
{
    // Snake Movement Var
    Vector2 dir = 1 * Vector2.right;
    private float size = 1;

    // Snake Direction Var
    float h;	// Horizontal
    float v;	// Vertical
    bool isHorizonMove;

    // Mobile Key Var
    int up_Value;
    int down_Value;
    int left_Value;
    int right_Value;
    bool up_Down;
    bool down_Down;
    bool left_Down;
    bool right_Down;
    bool up_Up;
    bool down_Up;
    bool left_Up;
    bool right_Up;

    void Start()
    {
        InvokeRepeating("Move", 0.3f, 0.3f);
    }

    void Update()
    {
        // Move Value (PC + Mobile)
        h = Input.GetAxisRaw("Horizontal") + (right_Value + left_Value);
        v = Input.GetAxisRaw("Vertical") + (up_Value + down_Value);
        
        // Check Button Down & Up (PC || Mobile)
        bool hDown = Input.GetButtonDown("Horizontal") || right_Down || left_Down;
        bool vDown = Input.GetButtonDown("Vertical") || up_Down || down_Down;
        bool hUp = Input.GetButtonUp("Horizontal") || right_Up || left_Up;
        bool vUp = Input.GetButtonUp("Vertical") || up_Up || down_Up;

        // Check Horizontal Move
        if (hDown)
            isHorizonMove = true;
        else if (vDown)
            isHorizonMove = false;
        else if (hUp || vUp)
            isHorizonMove = (h != 0);	

        // Determine Direction
        if (h != 0 || v != 0)
            dir = (isHorizonMove ? new Vector2(h, 0) : new Vector2(0, v));

        // Mobile Var Init
        up_Down = false;
        down_Down = false;
        left_Down = false;
        right_Down = false;
        up_Up = false;
        down_Up = false;
        left_Up = false;
        right_Up = false;
    }

    void Move()
    {
        transform.Translate(size * dir);
    }

    // Button Down (Mobile)
    public void ButtonDown(string type)
    {
        switch (type)
        {
        case "U":
            up_Value = 1;
            up_Down = true;
            break;
        case "D":
            down_Value = -1;
            down_Down = true;
            break;
        case "L":
            left_Value = -1;
            left_Down = true;
            break;
        case "R":
            right_Value = 1;
            right_Down = true;
            break;
        }
    }

    // Button Up (Mobile)
    public void ButtonUp(string type)
    {
        switch (type)
        {
        case "U":
            up_Value = 0;
            up_Up = true;
            break;
        case "D":
            down_Value = 0;
            down_Up = true;
            break;
        case "L":
            left_Value = 0;
            left_Up = true;
            break;
        case "R":
            right_Value = 0;
            right_Up = true;
            break;
        }
    }
}

 

궁금하신 점은 밑에 댓글 바랍니다