사생활 보호 설정
https://gamjia.tistory.com
Updated News
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~을 출력하게 해봤다
원래 처음 만든 List에서 세려고 했는데세는건 문제가 안되는데객체를 건들거나 뭐하면 InvalidOperationException:Collection was modified; enumeration operation may not execute. 이 문제가 생기더라 컬렉션이 수정 되어서 열거 작업이 안된다는 뜻그래서 똑같은 리스트 내용을 복사해서걔를 검사하도록 했다 그리고 DestroyCoin이라는걸 추가했는데
Coin 성질을None으로 바꿔버리게 만드는 것이다 근데 왜 Destroy 안하고None 객체로 만드냐면
이자식 때문이다얘는 객체가 비거나 삭제되면빈공간 없이 메꾸려고 하기 때문에None 객체를 만든 것이다 이게 뭔말이냐면
저 동그라미 친 녀석을한번 꺼보겠다
그러면 이렇게 된다;;;줄서기를 너무너무 잘해서어쩔 수 없이 None 객체를 만들었다 암튼 Destroy까지 한 결과를영상으로 보여주겠다 큐큐
아 배고파햄버거 먹어야징