위 코드를 드래그 드롭할 오브젝트에 넣어주면 된다.
코드 설명을 하자면 마우스 버튼(터치)이 눌렸을때 x, y 좌표값을 mouseDragPosition에 저장한 다음 worldObjectPosition에 ScreenToWorldPoint함수를 이용해서 좌표값을 넣어주는데 ScreenToWorldPoint함수를 사용하는 이유는 그냥 일반적으로 스크린 좌표값으로만 이동시키면 제대로 이동이 되지 않는 경우가 발생하므로 게임 화면상의 마우스클릭(터치) 된 좌표값을 월드좌표값으로 변환해주는 작업을 해줘서 원하는 위치에 이동되로록 할 수 있다.
2016년 2월 13일 토요일
유니티 기본 화면 해상도 설정
코드로 화면 해상도를 설정하기 전에 기본적으로 카메라와 해상도를 설정 할 수 있다.
물론 모바일 기기 각각의 크기에 따른 화면 해상도를 바꾸기 위해서는
Screen.SetResolution(Screen.width, Screen.width, true);
함수를 이용해서 코드를 짠다면 가능하겠지만 일단 기본적으로 처음에
프로젝트를 만들고 설정을 해주지 않으면 사이즈가 임의로 잡혀버려서
모바일에 포팅 할 경우 화면이 잘려보이게 된다.
아주 쉽게 변경이 가능하다 아래 그림처럼 Game 탭에서 바로 아래 메뉴바를
클릭하면 여러 사이즈의 화면 해상도가 변경이 가능해진다.
2016년 1월 15일 금요일
2015년 5월 31일 일요일
유니티(Unity)3D에서 비주얼스튜디오(Visual Studio) 사용하기
http://unityvs.com/documentation/installation/
위 링크대로 들어가면 vs버전별로 제공되고있다.
사용하는 버전에 맞게 프로그램을 다운로드하고 설치한다음
유니티를 재실행 하면 아래처럼 임포트 패키지에 추가된다.
추가된 패키지를 등록하고 다시 유니티를 다시 재실행하고 상단 툴바에
Visual Studio Tools 가 추가 되어 있을것이다.
클릭 한 다음 Open in Visual Studio 를 클릭하면 이제부터 Visual Studio로
디버깅 및 코드작성이 가능하다.
위 링크대로 들어가면 vs버전별로 제공되고있다.
사용하는 버전에 맞게 프로그램을 다운로드하고 설치한다음
유니티를 재실행 하면 아래처럼 임포트 패키지에 추가된다.
추가된 패키지를 등록하고 다시 유니티를 다시 재실행하고 상단 툴바에
Visual Studio Tools 가 추가 되어 있을것이다.
클릭 한 다음 Open in Visual Studio 를 클릭하면 이제부터 Visual Studio로
디버깅 및 코드작성이 가능하다.
유니티 버전업에 따른 active 사용 방법 변경된점
모델을 껏다 켰다 하기 위해 예전에는
this.transform.GetChild(enemyMLevel-1).active = true; 이렇게 사용했다.
그런데 4.0부터 사용 방식이 바뀌어서
this.transform.GetChild(mLevel - 1).gameObject.SetActive(true);
이렇게 사용해야한다.
좀 더 명확하고 캡슐화한거같은데..
this.transform.GetChild(enemyMLevel-1).active = true; 이렇게 사용했다.
그런데 4.0부터 사용 방식이 바뀌어서
this.transform.GetChild(mLevel - 1).gameObject.SetActive(true);
이렇게 사용해야한다.
좀 더 명확하고 캡슐화한거같은데..
2015년 4월 26일 일요일
유니티 모델 교체(Unity Model Change)
미사일을 예로들면 일단 missile프리팹 오브젝트에 모델이 여러개 들어있다면
int missileMaxLevel = 7;
int mLevel = 2;
미사일 레벨은 2이고 최대 레벨값이 7이라고 가정하자.
그럼 모델도 7개가 있을것이다. 그럼 아래 함수처럼 쓰면된다.
//미사일 레벨별 디자인 변경
void ChangeAvatar()
{
//미사일 최대 레벨값 만큼 반복체크
for (int i = 0; i < missileMaxLevel; i++)
{
//모든 모델 상태를 꺼둔다.
this.transform.GetChild(i).gameObject.SetActive(false);
}
//그리고 레벨에 맞는 모델만 키고 실행. -1 시키는 이유는 배열값은 0부터 시작임.
this.transform.GetChild(mLevel - 1).gameObject.SetActive(true);
}
함수 내부 반복문을 보면
this.transform.GetChild(i).gameObject.SetActive(false);
가 있다. 이것은 자기 자신의 하위에 등록된 자식 모델값을 가져와서
Active 상태를 끄겠다는것이다.
이걸 해주지 않으면 모든 미사일 이미지가 중첩되서 다 나온다.
그러니 우선적으로 모든 모델들 상태를 화면에 나타나지 않게 꺼주는 작업이 필요하다.
반복문이 끝나면
this.transform.GetChild(mLevel - 1).gameObject.SetActive(true);
위와 같이 레벨값을 GetChild에 넣어주고 Active 값을 true로 바꿔주면
원하는 모델만 켜진다.
(본인레벨보다 -1 낮게 주는 이유는 배열이 0부터 시작이다. 레벨이 0부터 시작하는 게임이거나 혹은 빈 모델을 넣고 사용하지 않는 경우에는 -1 할 필요는 없다. 다만 그렇게하면 반복문 조건도 수정해야한다.)
참고로 이렇게 말고 태그값이나 모델이름 가져와서 바꾸는 방법도 있는데...
추천하고싶지 않다. 오브젝트 많으면 텍스트이름을 가져와서 바꾸는데 매우 과부하걸린다.
int missileMaxLevel = 7;
int mLevel = 2;
미사일 레벨은 2이고 최대 레벨값이 7이라고 가정하자.
그럼 모델도 7개가 있을것이다. 그럼 아래 함수처럼 쓰면된다.
//미사일 레벨별 디자인 변경
void ChangeAvatar()
{
//미사일 최대 레벨값 만큼 반복체크
for (int i = 0; i < missileMaxLevel; i++)
{
//모든 모델 상태를 꺼둔다.
this.transform.GetChild(i).gameObject.SetActive(false);
}
//그리고 레벨에 맞는 모델만 키고 실행. -1 시키는 이유는 배열값은 0부터 시작임.
this.transform.GetChild(mLevel - 1).gameObject.SetActive(true);
}
함수 내부 반복문을 보면
this.transform.GetChild(i).gameObject.SetActive(false);
가 있다. 이것은 자기 자신의 하위에 등록된 자식 모델값을 가져와서
Active 상태를 끄겠다는것이다.
이걸 해주지 않으면 모든 미사일 이미지가 중첩되서 다 나온다.
그러니 우선적으로 모든 모델들 상태를 화면에 나타나지 않게 꺼주는 작업이 필요하다.
반복문이 끝나면
this.transform.GetChild(mLevel - 1).gameObject.SetActive(true);
위와 같이 레벨값을 GetChild에 넣어주고 Active 값을 true로 바꿔주면
원하는 모델만 켜진다.
(본인레벨보다 -1 낮게 주는 이유는 배열이 0부터 시작이다. 레벨이 0부터 시작하는 게임이거나 혹은 빈 모델을 넣고 사용하지 않는 경우에는 -1 할 필요는 없다. 다만 그렇게하면 반복문 조건도 수정해야한다.)
참고로 이렇게 말고 태그값이나 모델이름 가져와서 바꾸는 방법도 있는데...
추천하고싶지 않다. 오브젝트 많으면 텍스트이름을 가져와서 바꾸는데 매우 과부하걸린다.
피드 구독하기:
글 (Atom)