사생활 보호 설정
https://gamjia.tistory.com
Updated News
Mini Rooms
답글수 [0]
What Friends Say
한마디로 표현해봐~
1촌평 관리
[Day 14] Color Fill Tutorial 3
GamJia 2024. 11. 20. 21:12
오블완 챌린지 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하는걸로
마무리 하겠습니다!
이 게임은 이제 저기에 색깔 바꾸는
기능만 넣어주면 사실상
거의 완성입니다..ㅋㅋ
감사합니다!!