Short Cake
8PM - Animal Crossing Wild World

사생활 보호 설정

https://gamjia.tistory.com

Mini Rooms

  • 내 미니룸
  • 미니미설정
  • 미니룸설정
  • 답글수 [0]

What Friends Say

한마디로 표현해봐~

1촌평 관리

동전게임 개발일지 - 4

GamJia 2024. 1. 15. 00:01

동전게임 개발일지 4편

드래그 박스를 만들어보자
 

전에 Coin 객체가 Instantiate하게 했는데
그러면 자기가 Coin 클래스를 가질 수가 없길래
랜덤 코인 번호를 가져오고
거기에 맞는 이미지를 설정하게 바꿨다
 

 
그리고 Init이 될 수 있는 조건을
IsAvailable이라는 bool 클래스에 뺐다
웃긴게 원래는 flexibleGridLayout의 row가
row보다 작을 경우만 봤었는데
그렇게 하니까 9:18 같이
세로가 가로의 2배인 경우에는
Init을 전혀 못하는거다
 
그래서 세로가 가로의 2배인 경우,
그렇지 못한 경우로 나눠놨다..;;;
 

 
다른 비율은 괜찮았는데..
9:27 비율은 이상하게 한줄을 못 채운다
 
근데.. 애초에 지금 9:27
비율의 핸드폰이 있나?
일단 저건 나중에 고쳐야지..ㅋ
 

있다면 이런 비율이 아닐까.........

 

처음 블로그 보면 점이
이거의 1/2 사이즈일텐데
그도 그럴게 colums를 14개에서
7개로 줄였으니...(모바일 배려)
 
대신 일정 시간 지나면
세팅을 리셋 시킬 수 있는 버튼을
만들어서 게임 흐름이
끊기지 않게 할 예정이다
 
리셋 기능 만들기 잘했군
 

 
일단 배치 기능은 어느 정도 됐고
오늘은 드래그 해서 객체를 선택하는
기능을 만들어 볼 것이다
 

 
일단 Collider2D와 Rigidbody2D를
추가해준 뒤 Trigger를 켜주고
Body Type을 Kinematic으로 바꿔준다
 

 
그리고 Selection Box라는
객체를 하나 생성해주고
Line Renderer를 만들어준다
 

 
Loop를 켜주고
두께는 원래 1.0이 Default인데
0.1로 줄여준다
색상은 원하는 색 아무거나 정하고
Material에 Default-Line이라는
Material을 설정해준다
 
저건 유니티 기본 Material이니까
뭐 설치하고 그럴 필요 없다
 

 
그리고 클래스를 하나 만들어준다
 

 
일단 LineRenderer를 가져오고
positionCount를 0으로 설정해준다
 

 
positionCount란 LineRenderer 안에
Size를 말하는데 꼭짓점 개수를 생각하면 된다
 
Start에서 0개로 초기화를 해준다
 

 
마우스를 클릭하면
꼭짓점 개수를 4개로 늘린다
 
왜냐..?
사각형이니까..
그리고 처음 클릭한 위치를
네 꼭짓점의 초기 위치로 설정해준다
 
마우스를 클릭하면 BoxCollider를
하나 만들어준다 얘는 마우스를 떼면
바로 destroy된다
 

꼭짓점 0번(왼쪽 위)는
처음 마우스를 클릭한 곳에 고정 되어있고
마우스를 클릭 후 드래그 할때는
1,2,3만 위치를 옮기면 되기 때문에
0번은 건드릴 필요가 없다
 
currentMousePosition은 현재
마우스의 위치를 화면에서
2D 월드 좌표로 변환 한 위치다
 

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

public class SelectionBox : MonoBehaviour
{
    private LineRenderer lineRenderer;
    private Vector2 startMousePosition, currentMousePosition;
    private BoxCollider2D boxCollider;

    void Start()
    {
        lineRenderer = GetComponent<LineRenderer>();
        lineRenderer.positionCount = 0;
    }

    void Update()
    {
        DragLine();
    }

    void DragLine()
    {
        if (Input.GetMouseButtonDown(0))
        {
            startMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            lineRenderer.positionCount = 4;

            for (int i = 0; i < 4; i++)
            {
                lineRenderer.SetPosition(i, startMousePosition);
            }

            boxCollider = gameObject.AddComponent<BoxCollider2D>();
            boxCollider.isTrigger = true;
            boxCollider.offset = Vector2.zero;
        }

        if (Input.GetMouseButton(0))
        {
            currentMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

            lineRenderer.SetPosition(1, new Vector2(currentMousePosition.x, startMousePosition.y));
            lineRenderer.SetPosition(2, currentMousePosition);
            lineRenderer.SetPosition(3, new Vector2(startMousePosition.x, currentMousePosition.y));   

            Vector2 center = (startMousePosition + currentMousePosition) / 2;

            boxCollider.offset = center;
            boxCollider.size = new Vector2(Mathf.Abs(startMousePosition.x - currentMousePosition.x),

            Mathf.Abs(startMousePosition.y - currentMousePosition.y));          
        }

        if (Input.GetMouseButtonUp(0))
        {
            lineRenderer.positionCount = 0;
            Destroy(boxCollider);
        }
    }
}

 

 

그리고 coinID가 None이 아닐 경우에만
Collider에 닿았을 때 색이 변하게 해주자
저 조건을 안 넣으면 오른쪽 이미지 처럼 된다
 
Color.red.. orange, yellow 등등은
alpha값이 1이기 때문에
조건을 설정해줘야 한다
 

 
겁나 좋군?
 
근데 너무 빨개서 객체들
구분이 안된다;;
 

 

new Color32(rgb,alpha)값을 넣어줬다

 

 

좋아좋아
 

 
SelectionBox에 GameObject List를 하나 추가해주고
Collider에 닿은 객체들만 List에 넣어주었다
 

아주 좋아~

 

 
그리고 마우스를 뗄 때
List 안에 있는 객체들을 세고
서로의 갯수가 같을 때
테스트로 good~을 출력하게 해봤다
 

결과는 good~~

 

 
원래 처음 만든 List에서 세려고 했는데
세는건 문제가 안되는데
객체를 건들거나 뭐하면
 
InvalidOperationException:
Collection was modified; enumeration operation may not execute.
 
이 문제가 생기더라
 
컬렉션이 수정 되어서 열거 작업이 안된다는 뜻
그래서 똑같은 리스트 내용을 복사해서
걔를 검사하도록 했다
 
그리고 DestroyCoin이라는걸 추가했는데
 

 
Coin 성질을
None으로 바꿔버리게 만드는 것이다
 
근데 왜 Destroy 안하고
None 객체로 만드냐면
 

 
이자식 때문이다
얘는 객체가 비거나 삭제되면
빈공간 없이 메꾸려고 하기 때문에
None 객체를 만든 것이다
 
이게 뭔말이냐면

 
저 동그라미 친 녀석을
한번 꺼보겠다
 

 
그러면 이렇게 된다;;;
줄서기를 너무너무 잘해서
어쩔 수 없이 None 객체를 만들었다
 
암튼 Destroy까지 한 결과를
영상으로 보여주겠다
 
큐큐
 
 

 
아 배고파
햄버거 먹어야징
 

'Game Develop' 카테고리의 다른 글

동전게임 개발일지 - 5  (0) 2024.01.17
수박게임 개발일지 - 28  (0) 2024.01.16
수박게임 개발일지 - 27  (0) 2024.01.12
수박게임 개발일지 - 26  (0) 2024.01.11
동전게임 개발일지 - 3  (0) 2024.01.10