본문 바로가기

IT/유니티

(29)
에디터 화면시점으로 카메라 위치 옮기기 이걸 알기 전까지 얼마나 개고생을 했던가....이렇게 돌려보고 저렇게 돌려보고...나이먹어서 3D할라니까 개념도 이해가 안되는데, 카메라의 시점은 더더욱 3D를 힘들게 했다. 그러던중 어떤 유튜버의 강의에서 보석과 같은 팁을 얻었는데,그거슨 바로!! 에디터에서 보는 시점으로 카메라의 위치를 변경시키는것이다. 이 얼마나 직관적이고 편한 기능이란 말인가!!!!!이걸모르는 몇달동안 개고생을 했던 것인가... 방법은 아주 쉽다. hierarchy에서 카메라를 선택한후 메뉴에서 GameObject를 선택하면Align with View를 하면 카메라의 위치가 현재 에디터상의 뷰로 전환된다. 이것은 카메라에만 적용되는것이 아니라 모든 오브젝트에 적용가능하다.하지만 카메라에 적용하면 아주 쉽게 뷰를 조정할수 있다.
WorldToScreenPoint 그리고 ScreenPointToLocalPointInRectangle 오늘은 아주 간단한것을 알아보자. 유니티의 좌표계는 조금은 특이하다.특히나 나같이 기본 네이티브에서 개발하던 사람입장에서는 더더욱 그런거 같다. 왜냐하면 좌표계가 하나가 아니다. 전체 좌표계와 스크린 좌표계가 존재한다. 용어의 선택이 옳바른지는 모르겠지만, 영문을 해석하면 비슷한거 같다. 픽셀단위의 좌표계와 유니티 내부의 스크린좌표계가 존재한다. 보통 에디터에서 작업할때는 스크린좌표계를 사용하는 것이고,UI에서는 픽셀단위의 좌표계를 사용한다고 생각하면 쉬울것이다. 왜 그렇게 사용하는지는 작업을 하다보면 자연스럽게 이해가 된다. 하지만 무제는 전화를 할때 어떻게 해야하느냐 라고 할수 있다.UI작업이나 터치작업을 하면 반드시 이 좌표값들을 변환해야할 경우가 생긴다.그래서 유니티에는 다음과 같은 두개의 함수를..
[Unity] 안드로이드 기기에서 테스트 하기 내가 터치 스크립트를 만들었는데 터치가 작동하는지 안하는지는 유니티엔진에서 알 방법이없다. 백날 윈도우 화면에서 테스트 디버깅해봐야, 실제로는 스마트폰으로 만들것이기 때문에 반드시 어플 개발은 폰에서 확인해 보아야 한다. 준비물은 안드로이드 기기와 USB케이블이 있으면된다. 1. 먼저 각각 제조사에 들어가서 USB드라이버를 받는다. SDKManager에 Tools에서 받아도 되는데 이상하게 난 오류가 뜨기 때문에.. 원래 우리나라폰은 그렇게 쓰는 것일 수도 있지만.. 2. 안드로이드 기기에 Unity Remote 어플리케이션을 설치한다. GooglePlay에 있다. 3. 기기에 설정에 들어가서 개발자옵션에서 "USB디버그" 옵션을 허용한다. USB케이블에 꽃여 있으니 "켜진 상태로 유지"도 허용해준다. ..
Mesh로 2D 삼각형 그리기 유니티는 엔진이니까 모든지 다 해줄거처럼 보였는데,의외로 삼각형을 기본 제공하지는 않는다. 그래서 메쉬를 이용한 삼각형을 만들어 보았다.코드는 다음과 같다. using UnityEngine;using System.Collections; public class ExampleClass : MonoBehaviour { void Start() { gameObject.AddComponent(); gameObject.AddComponent(); Mesh mesh = GetComponent().mesh; mesh.Clear(); mesh.vertices = new Vector3[] {new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0)}; mesh.uv ..
배열 형태의 JSON데이타 가져오기 (Feat.JsonUtility) 게임서버를 구축하고 서버와 클라이언트간의 데이타 통신을 할때 가장 편하게 쓸수 있는 형식은 아마도 JSON이라고 할수 있다. 결국 딕셔너리 형식으로 형태로 어떤형태의 데이타라도 통신할수 있기때문에아주 명시적이고 간단하게 사용할수 있다. 하지만 몇년전까지만 해도 unity에서 공식적으로 JSON을 지원하지 않았기때문에,다른 개발자분들이 만드신 라이브러리를 사용하는 경우가 많았지만,5.3버전이후로 JsonUtility라고 하는 클라스를 지원해주었다. 결국 이전에 사용하던 3rd파티들의 라이브러리는 사용하지 않는 편이 좋을것이다.(당연한 이야기이지만, 공식제공하는 유틸이 훨씬 성능면이나 속도면에서 유리하다.) 이 JsonUtility의 사용법은 다음과 같다. 아주 명료하게 사용할수 있다. 하지만 이 유틸에도 ..
2016/8/24 개발노트 어떤 객체의 자식들만 검색하고 싶을때transform.FindChild("")를 이용하면 된다. 괜히 모든 객체를 검색하지 않아도 찾을수 있다. 그리고 오늘은 오랜만에 세바스찬의 길찾기 알고리즘을 만들어 보았다.역시 세바스찬의 강의는 들을때마다 항상 감동인거 같다. A*알고리즘이라고 불리우는데 알고리즘의 문외한으로써 처음 봤을때 참 멋지다고 느꼈다.알고리즘의 원리는 아주 간단하다. 위의 그리과 같이 seeker의 위치와 target의 위치를 이용해서 가장 짧은 길을 찾는것이다.의외로 단순한것이지만, 이것을 코드로 구현해내는것은 쉽지 않을것이다. 코드는 다음과 같다. Grid2D.csusing UnityEngine;using System.Collections;using System.Collections.G..
2016/8/18 유니티 개발 노트 1. Start() vs Awake() 스타트와 어웨이크는 얼뜻보면 같아보인다.하지만 그 의미가 아주 다른다. 마치 스타트는 생성자처럼 보인다. 왜냐하면 기본적으로 생성되어 나오기때문에, 기존 프로그래머들은 아마도 아~ 스타트는 생성자랑 비슷한가 보다..라고 생각할것이다. 하지만 스타트는 전~혀 생성자 라고 말하기 힘들다.생성자라기 보다는 업데이트직전에 불려지는 업데이트의 문이라고 생각하시면 더 정확할것이다. 그럼 반면에 어웨이크는 기본적으로는 보이기 않기때문에 잘 모르는 개발자가 있을수도 있지만,어웨이크가 훨씬 생성자에 가깝다고 말할수 있다.말그대로 깨어나다 라는 뜻을 가진 어웨이크는 그 클라스가 어웨이크 할때 즉 생성될때 불려진다. 왜 스타트와 어웨이크가 중요한가하면 다음의 소스를 보면 이해하기 쉬울..
20. 유니티 교육 (Sebastian Lague 강의-2DRunner #2) Controller2D.cs using UnityEngine;using System.Collections; public class Controller2D : RaycastController { float maxClimbAngle = 80;float maxDescendingAngle = 75; public CollisionInfo collisions; [HideInInspector]public Vector2 playerInput; public override void Start(){base.Start ();collisions.faceDir = 1;} public void Move(Vector3 velocity, bool standingOnPlatform){Move (velocity, Vector2.zero..