본문 바로가기

21 - 2학기/슬기로운 코딩생활

[TIL] 유니티2d로 게임 개발 3주차

TAB 2021 겨울방학 학회활동 [슬기로운 코딩생활]

3주차 TIL입니다.

작성자 : 38기_이병헌


3주차 - 보드판 만들기, 칸에 맞도록 코딩하기


보드판을 정형화하기 위해 크기를 설정한다.

블럭의 크기가 100px이므로 칸 100px, 경계선 1px로 정한다.

6X6 크기의 보드판이므로 내부는 607px, 테두리의 두께는 21.5px로 650*650의 보드판을 만들었다.

3번째 칸의 오른쪽 테두리는 출구이므로 뚫어두었다.

보드판(6X6)

보드판을 블럭과 같이 prefab화 하였다.


블럭을 보드칸에서 이동시킬 때 칸에 맞춰서 움직이도록 스크립트를 짠다.

이전에 만들었던 블럭의 스크립트에서 편집한다.

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

public class BlockX_controller : MonoBehaviour
{

    private Vector2 mousePosition; //마우스 위치
    private float initialX, currentX, deltaX, distance; //블럭의 x좌표, 거리
    public float speed; //블럭 이동속도
    public Rigidbody2D body;

    // Start is called before the first frame update
    void Start()...

    // Update is called once per frame
    void Update()...

    private void OnMouseDown()
    {
        initialX = transform.position.x; //블럭의 처음 위치 저장
    }

    private void OnMouseDrag() //마우스를 드래그중일때 작동하는 함수...

    private void OnMouseUp()
    {
        currentX = transform.position.x; //블럭이 놓였을 때의 위치 저장
        body.velocity = new Vector3(0, 0, 0); //마우스에서 손을 떼면 블럭의 속도 0으로 설정(이후에 보드칸에 맞춰 이동하도록 재설정)
        if(Mathf.Round(Mathf.Abs(initialX)/50)%2 == 1) //홀수 크기의 블럭
        {
            transform.position = new Vector2(Mathf.Round((currentX-50) / 100) * 101 + 50, transform.position.y); //가까운 칸으로 맞춰서 이동
        }
        else //짝수 크기의 블럭
        {
            transform.position = new Vector2(Mathf.Round(currentX / 100) * 101, transform.position.y); //가까운 칸으로 맞춰서 이동
        }
    }
}

블럭이 짝수, 홀수개의 크기냐에 따라 중앙이 바뀌므로 처음 마우스를 클릭했을 때의 좌표를 저장하여 판단한다.

마우스 클릭을 올렸을 때 현재 좌표에서 가장 가까운 칸을 계산하여 이동하도록 하였다.

테스트1.gif


추가로 블럭의 최소이동속도를 늘려주었다.

if (distance < 0.05) //거리가 작으면 이동하지 않도록 속도를 0으로 설정
{
	speed = 0;
}
else if( distance < 2.6)
{
	speed = 4;
}
else
{
	speed = distance * 1.5f; //거리 * 1.5를 속도로 설정
}

4주차 계획 - 되돌리기, 리셋 기능 만들기, 이동횟수 표시