TAB 2021 겨울방학 학회활동 [슬기로운 코딩생활]
3주차 TIL입니다.
작성자 : 38기_이병헌
3주차 - 보드판 만들기, 칸에 맞도록 코딩하기
보드판을 정형화하기 위해 크기를 설정한다.
블럭의 크기가 100px이므로 칸 100px, 경계선 1px로 정한다.
6X6 크기의 보드판이므로 내부는 607px, 테두리의 두께는 21.5px로 650*650의 보드판을 만들었다.
3번째 칸의 오른쪽 테두리는 출구이므로 뚫어두었다.
보드판을 블럭과 같이 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); //가까운 칸으로 맞춰서 이동
}
}
}
블럭이 짝수, 홀수개의 크기냐에 따라 중앙이 바뀌므로 처음 마우스를 클릭했을 때의 좌표를 저장하여 판단한다.
마우스 클릭을 올렸을 때 현재 좌표에서 가장 가까운 칸을 계산하여 이동하도록 하였다.
추가로 블럭의 최소이동속도를 늘려주었다.
if (distance < 0.05) //거리가 작으면 이동하지 않도록 속도를 0으로 설정
{
speed = 0;
}
else if( distance < 2.6)
{
speed = 4;
}
else
{
speed = distance * 1.5f; //거리 * 1.5를 속도로 설정
}
4주차 계획 - 되돌리기, 리셋 기능 만들기, 이동횟수 표시
'21 - 2학기 > 슬기로운 코딩생활' 카테고리의 다른 글
[TIL]4주차:기존 앱 개선하기 (0) | 2022.01.25 |
---|---|
[TIL]3주차 바닐라JS(3)_momentum 클론코딩 (0) | 2022.01.19 |
[TIL] CNN Applications (0) | 2022.01.19 |
[TIL]3주차:프로젝트 홈페이지 만들기 (0) | 2022.01.18 |
[TIL]2주차 크롤링과 봇 개발 (0) | 2022.01.12 |