관리 메뉴

도드넷

도드의 개발노트#3 - 유니티 마우스로 유닛 선택해서 움직이기 본문

창고/나만의 게임 제작

도드의 개발노트#3 - 유니티 마우스로 유닛 선택해서 움직이기

도드! 2016. 9. 21. 19:57
반응형




도드의 개발노트#3


- 유니티 마우스로 유닛 선택해서 움직이기


마우스로 유닛 선택해서 움직이게하는 워크플로우와 사용한 명령어 공개





1) 플레이어에게서 마우스 입력을 받고 명령을 내리는 뇌와같은 역할을 하는 스크립트


Master Of Puppets


사용한 핵심 명령어 모음


좌클릭(0) 우클릭(1) 감지

if (Input.GetMouseButtonDown(0)) {}

if (Input.GetMouseButtonDown(1)) {}


클릭한 위치와 클릭한 물체를 반환

Vector2 Click_Point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Collider2D Click_Collision = Physics2D.OverlapPoint(Click_Point);


Collider2D Click_Collision는 클릭포인트와 충돌한 맨 처음 물체를 반환하는데,

Z 좌표상 앞에있는걸 먼저 잡아낸다. 고로, 클릭되어야할 콜라이더를 작은 Z좌표에 배치한다.


선택한 유닛목록을 만들기위해 List 리스트 사용

using System.Collections.Generic; // 제네릭 사용해야함

...

public List<GameObject> Selected_Objects; // 리스트 선언

Selected_Objects.Clear(); // 일단 이전 리스트를 지우고..
Selected_Objects.Add(Click_Collision.gameObject); // 추가한다.



2) Master Of Puppet 에서 내린 명령을 받아서 해당 유닛을 움직이게하는 스크립트 


Puppet Control 


사용한 핵심 명령어 모음


물체 속도 설정

This_Rigidbody = gameObject.GetComponent<Rigidbody2D>();

...

This_Rigidbody.velocity = new Vector2(This_Stats.Current_Speed, 0);


물체 이동방향 설정

목적지 - 현재가 0.05보다 크면, This_Stats.Current_Speed = This_Stats.Movement_Speed;

목적지 - 현재 위치 0.05보다 작으면, This_Stats.Current_Speed = -This_Stats.Movement_Speed;


0.05? : 0이 아닌 0.05라는 오차 허용범위를 주므로써 같은 지역에 여러번 같은 명령을 내려도 움찔하지않게 한다. 즉 목적지와 현재위치가 저 이상 만큼 차이나지 않으면 이동하지 않겠다는 말이된다.


물체 뒤집기 스프라이트 flip

if (This_Stats.Current_Speed < 0 && fliped == false)
{
Vector3 newScale = transform.localScale;
newScale.x *= -1;
transform.localScale = newScale;
fliped = true;
}

else if(This_Stats.Current_Speed > 0 && fliped == true)
{
Vector3 newScale = transform.localScale;
newScale.x *= -1;
transform.localScale = newScale;
fliped = false;  

}


목적지 도착시 멈추게하기

물체가 양의 속도를 가지고 목적지보다 x위치가 같거나 커지면 바로 멈추게 한다.

물체가 음의 속도를 가지고 목적지보다 같거나 작아지면 바로 멈추게 한다.


    



반응형
Comments