TAB 2021 겨울방학 학회활동 [슬기로운 코딩생활]
2주차 TIL입니다.
작성자 : 38기_이병헌
2주차 - 블럭 코딩하고 prefab화 하기
prefab이란?
prefab은 이미 완성이 된 게임 오브젝트를 여러번 재사용 가능하도록 만드는 기능이다.
하나의 게임 오브젝트가 반복되어서 사용될 때 일일이 만들지 않고, prefab으로 만들어 두면 손쉽게 재사용하고 수정하기 쉽다.
러시아워 게임에서 사용되는 블럭은 가로로 이동하는 블럭, 세로로 이동하는 블럭이 있다.
우선 가로로 이동하는 블럭을 설정한다.

스프라이트를 만들고 Component를 설정해준다.
- Box Collider 2D - 블럭간, 보드판 테두리와의 충돌 설정, 2칸짜리 가로블럭이므로 Size를 200*100으로 설정
- Script - 마우스 드래그 설정을 위한 스크립트(이후 블럭 관련 코드 추가 예정)
- Rigidbody 2D - 물체에 물리기능을 집어넣는 기능, 충돌을 위한 설정, 중력을 없애고 y, z축으로의 이동과 회전 고정

스프라이트의 이미지를 제작, 적용해준다.
2칸 짜리 가로블럭이므로 200*100 픽셀로 제작한다.
마우스로 드래그하면 이동하도록 스크립트를 짠다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlockX_controller : MonoBehaviour
{
private Vector2 mousePosition; //마우스 위치
private float deltaX, distance; //블럭의 x좌표, 거리
public float speed; //블럭 이동속도
public Rigidbody2D body;
// Start is called before the first frame update
void Start()
{
body = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
}
private void OnMouseDrag() //마우스를 드래그중일때 작동하는 함수
{
mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); //현재 마우스의 위치
deltaX = transform.position.x; //블럭의 x좌표
distance = Mathf.Abs(mousePosition.x - deltaX); //거리 = (마우스의 x좌표 - 블럭의 x좌표)의 절댓값
if (distance < 0.05) //거리가 작으면 이동하지 않도록 속도를 0으로 설정
{
speed = 0;
}
else
{
speed = distance * 1.5f; //거리 * 1.5를 속도로 설정
}
if (mousePosition.x > deltaX) //마우스와 블럭의 위치에 따라 블럭 이동 방향 설정
{
body.velocity = Vector3.right * speed; //블럭의 속도를 설정하여 이동시킨다.
}
else if (mousePosition.x < deltaX)
{
body.velocity = Vector3.left * speed;
}
//this.transform.position = new Vector2(mousePosition.x - deltaX, deltaY);
}
private void OnMouseUp()
{
body.velocity = new Vector3(0, 0, 0); //마우스에서 손을 떼면 블럭의 속도 0으로 설정(이후에 보드칸에 맞춰 이동하도록 재설정)
}
}
OnMouseDrag() 함수로 마우스를 드래그하는 동안 작동하는 코드를 짠다.
마우스의 좌표와 블럭의 현재 좌표의 거리에 따라 속도를 조정하고 블럭의 속도를 .velocity로 설정하여 이동하도록 한다.

세로 블럭도 가로 블럭과 똑같이 설정해주고 x좌표와 y좌표의 설정만 바꿔준다.
prefab으로 만들기 위해 만든 오브젝트를 유니티 화면 밑의 project로 드래그한다.
세칸짜리 블록은 prefab에서 300*100 또는 100*300 픽셀로 이미지와 collider를 설정해준다.
보드판을 만들고 블럭들의 위치를 설정하여 대충 적용해 보았다.

3주차 계획 - 보드판 정형화, prefab화, 블럭을 보드칸 근처에서 놓으면 칸에 맞도록 순간이동시키기
'21 - 2학기 > 슬기로운 코딩생활' 카테고리의 다른 글
| [TIL] .Net 설치 및 기존 프로그램 연동 (0) | 2022.01.12 |
|---|---|
| [TIL]2주차 바닐라JS(2) (0) | 2022.01.12 |
| [TIL]2주차: bookmark앱 만들기_2, Blog 앱 (0) | 2022.01.12 |
| [TIL] 노마드코더 JS 5.0 ~ 6.2 (0) | 2022.01.11 |
| [TIL]1주차:장고 개발의 기본사항, bookmark앱 만들기_1 (0) | 2022.01.05 |