오블완 챌린지 14일차
알리에서 산 원피스 버리고
지그재그에서 이쁜 원피스를
사서 신난 GamJia 입니다
어제 강의에 이어서
Color Fill을 만들어 보겠습니다
오늘은 Player 작업을 해보도록 하겠습니다
세팅은 이미지를 참고해주세요
특이사항이라면 Rigidbody Type이
Dynamic이라는 것 입니다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace ColorFill
{
[AddComponentMenu("Color Fill/Color Fill Player")]
public class Player : MonoBehaviour
{
private float moveSpeed = 0f;
private Vector2 moveDirection; // 이동 방향
private Vector2 startMousePosition; // 마우스 시작 위치
private bool isMoving = false; // 이동 중인지 여부
private void Update()
{
// 마우스 클릭 시 (드래그 시작)
if (Input.GetMouseButtonDown(0)&&!isMoving)
{
startMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
isMoving = true;
moveSpeed=7;
}
if (isMoving)
{
Vector2 currentMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// X 또는 Y 방향으로만 이동 (좌우/상하)
if (Mathf.Abs(currentMousePosition.x - startMousePosition.x) > Mathf.Abs(currentMousePosition.y - startMousePosition.y))
{
// X 방향으로 이동 (왼쪽/오른쪽)
if (currentMousePosition.x > startMousePosition.x && moveDirection != Vector2.right)
{
moveDirection = Vector2.right; // 오른쪽으로 이동
}
else if (currentMousePosition.x < startMousePosition.x && moveDirection != Vector2.left)
{
moveDirection = Vector2.left; // 왼쪽으로 이동
}
}
else
{
// Y 방향으로 이동 (위/아래)
if (currentMousePosition.y > startMousePosition.y && moveDirection != Vector2.up)
{
moveDirection = Vector2.up; // 위쪽으로 이동
}
else if (currentMousePosition.y < startMousePosition.y && moveDirection != Vector2.down)
{
moveDirection = Vector2.down; // 아래쪽으로 이동
}
}
// 계속 이동 (마우스를 떼도 계속 이동)
}
transform.Translate(moveDirection * moveSpeed * Time.deltaTime);
}
// 충돌 시 이동 멈추기
private void OnCollisionEnter2D(Collision2D collision)
{
// 충돌한 경우 이동 멈추기
if ((moveDirection == Vector2.right && collision.transform.position.x > transform.position.x + 0.9f)
|| (moveDirection == Vector2.left && collision.transform.position.x+0.9f < transform.position.x)
|| (moveDirection == Vector2.up && collision.transform.position.y> transform.position.y+0.9f)
|| (moveDirection == Vector2.down && collision.transform.position.y+0.9f < transform.position.y))
{
isMoving = false; // 이동 멈추기
moveSpeed = 0f; // 이동 속도 0으로 설정
}
}
}
}
Player 코드를 하나 만들어주겠습니다
OnCollision을 보면 if 조건이
굉장히 긴데요 사실 길기만 길지
내용은 크게 어렵지 않습니다
저 코드의 내용은 제가 마우스를
드래그 한 방향으로 캐릭터를
일직선으로 이동 시키는 내용입니다
7의 속도로 이동하게 되는데
벽에 부딪힐 경우 속도를
0으로 감소 시켜야 합니다
만약에 저 조건이 없을 경우
이동하면서 벽에 닿아 일직선으로 못 가고
바로 멈춰버리게 됩니다
저장 후 실행해보니
캐릭터가 Direction 방향에 있는
Collider와 충돌할 때만
멈추는 모습입니다
오늘은 여기까지 하고
GitHub에 Commit하는걸로
마무리 하겠습니다!
이 게임은 이제 저기에 색깔 바꾸는
기능만 넣어주면 사실상
거의 완성입니다..ㅋㅋ
감사합니다!!