Unity Project #1 수박게임(2) - Prefab 만들고 생성하기.
지난번 포스팅에서 오브젝트가 생성, 떨어지는 것을 구현해봤다.
수박게임에서 오브젝트 루틴은 다음과 같다.
생성(정지) > 터치다운 > 손가락을 따라 좌우로만 움직임 > 터치업 > 떨어짐
위 루틴을 구현하되 테스트를 위해 터치 대신 마우스 클릭으로 대신한다.
1. Rigidbody2D - Gravity Scale
시작하면 오브젝트가 바로 아래로 떨어지기 때문에 만들어둔 프리팹의 Gravity Scale 속성값을 0으로 변경해준다.
2. GetMouseButton()
마우스로 오브젝트를 움직일 수 있도록 기반을 마련한다. ( mainObject > prefabObject 로 이름 변경)
public GameObject prefabObject;
private GameObject spwanObject;
private void Start() {
//오브젝트 생성
spwanObejct =
Instantiate(prefabObject, new Vector3(0, INIT_Y_POS, 0), Quaternion.identity);
}
private void Update() {
if (Input.GetMouseButtonDown(0)) {
// Mouse Down - 오브젝트 x값을 마우스 x값으로
} else if ( Input.GetMouseButton(0)) {
// Mouse Move - 오브젝트 x값을 마우스 x값으로
} else if (Input.GetMouseButtonUp(0)) {
// Mouse Up - 오브젝트 떨어짐
}
}
- spwanObject 라는 빈 그릇을 만들어 생성된 오브젝트를 담는다.
- Update() 에 마우스 up, move, down 조건을 만들어준다.
3. 마우스 따라 움직이기
유니티에는 여러 위치값(좌표계)이 존재한다. 깊게 들어가면 힘드니 간단하게 말해보자면
- Screen Point : 카메라로 보는 위치
- World Point : 실제 게임 내 위치
물 밖에서 물고기를 손가락으로 찍는다고 물고기가 실제 그 위치에 있을까? 아니다.
물 밖에서 내가 보는 물고기의 위치가 바로 Screen Point.
실제 물 속에 있는 물고기의 위치가 World Point.
마우스의 위치는 카메라로 보는 위치 즉, 물 밖에서 보는 위치이고 실제 움직여야 할 오브젝트의 위치값과는 다르다.
따라서 오브젝트의 위치를 마우스 위치 좌표계로 바꾸거나(World to ScreenPoint) 반대로 해서 (Screen to WorldPoint) 마우스의 좌표값과 오브젝트의 좌표값을 맞춰줘야 한다.
private static readonly int GRAVITY_SCALE = 2;
public GameObject prefabObject;
private GameObject spwanObject;
private void Start() {
//오브젝트 생성
spwanObejct = Instantiate(prefabObject, new Vector3(0, INIT_Y_POS, 0), Quaternion.identity);
}
private void Update() {
if (Input.GetMouseButtonDown(0) || Input.GetMouseButton(0)) {
ObjectMove();
}
else if (Input.GetMouseButtonUp(0)) {
ObjectDrop();
}
}
private void ObjectMove() {
// Screen 좌표계인 mousePosition을 World 좌표계로 바꾼다
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// 오브젝트는 x로만 움직여야 하기 때문에 y는 고정
mousePos.y = spwanObject.transform.position.y;
spwanObject.transform.position = mousePos;
}
private void ObjectDrop() {
//마우스버튼을 떼면 gravity scale에 값을 넣어 아래로 떨어지게 한다.
spwanObject.GetComponent<Rigidbody2D>().gravityScale = GRAVITY_SCALE;
}
4. 오브젝트 떨어지기 (위 코드 참조)
마우스 버튼을 손에서 떼면 오브젝트가 떨어져야 한다.
Input.GetMouseButtonUp(0)이면 오브젝트의 Rigidbody2D 컴포넌트를 찾아 gravity Scale에 값을 넣어준다.
만약 오브젝트에 Rigidbody2D가 없다면 에러가 나기 때문에 Rigidbody2D가 있는지 검사를 해주거나 오브젝트에 Rigidbody2D를 반드시 포함시키도록 코드를 짤 수도 있다.
play.google.com/store/apps/details?id=com.bognstudio.mergegame
'Unity' 카테고리의 다른 글
Unity Project #1 수박게임(2) - Prefab 만들고 생성하기. (0) | 2021.03.23 |
---|---|
Unity Project #1 수박게임(1) - Intro. (0) | 2021.03.23 |
댓글