개발/Unity

개발/Unity

Sprite Renderer Click Event 구현

부득이하게 3D 환경에서 2D UI를 사용하지 않고, Sprite Renderer를 이용해 UI와 유사한 형태를 구현해야하는 상황이 생긴다. 이 때 클릭 이벤트를 구현하기 위해서는 2D Box Collider Component를 삽입해야한다. Collider의 크기는 Renderer에 적용한 이미지 크기에 따라 유동적으로 조절하면 된다. 이후에 다음과 같은 스크립트를 적용해 클릭 이벤트를 구현할 수 있다. public class SpriteRendererClickDetector : MonoBehaviour { bool isOver = false; void Update() { if(isOver && Input.GetMouseButtonDown(0)) { //좌클릭 이벤트 } if(isOver && Inpu..

개발/Unity

SkinnedMeshRenderer Collider Update

Unity에서 SkinnedMeshRenderer를 사용하는 경우, Blender를 사용하거나 Transform을 변경할 때 Mesh Collider를 Update해줘야하는 상황이 발생한다. 이 때 다음 코드를 사용하면 원활하게 변경할 수 있다. //Input Data SkinnedMeshRenderer meshRenderer; MeshCollider collider; //Mesh Init Mesh bakedMesh = new Mesh(); collider.sharedMesh = bakedMesh; //Transform or Blend meshRenderer.SetBlendShapeWeight(0, 1); //Mesh Update meshRenderer.BakeMesh(bakedMesh); collide..

개발/Unity

Sprite Renderer Overlay Shader 구현

Sprite Renderer가 항상 Camera에 가장 가깝게 보이도록(Overlay) 구현하기 위해서는 커스텀 쉐이더를 적용해야 한다. Shader "Custom/SpriteOverlay" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 [HideInInspector] _RendererColor ("RendererColor", Color) = (1,1,1,1) [HideInInspector] _Flip ("Flip", Vector) = (1,1,1,1) [P..

개발/Unity

Unity 업데이트문에서 더블클릭 처리하기

//Double Click 처리용 변수 public float m_DoubleClickSecond = 0.25f; private bool m_IsOneClick = false; private double m_Timer = 0; if (m_IsOneClick && ((Time.time - m_Timer) > m_DoubleClickSecond)) { m_IsOneClick = false; } if (Input.GetMouseButtonDown(0)) { if (!m_IsOneClick) { m_Timer = Time.time; m_IsOneClick = true; } else if (m_IsOneClick && ((Time.time - m_Timer) < m_DoubleClickSecond)) { m_Is..

개발/Unity

폴더 순회하며 깔끔하게 삭제하기

유니티에서 로컬 폴더에 접근해 폴더 안의 파일까지 모두 지우고 싶을 때, 오류가 발생하며 정상 작동하지 않는 경우가 있다. 이럴 때는 디렉토리의 모든 파일을 먼저 지운 후 폴더를 지우는 코드를 실행하면 정상적으로 삭제를 진행할 수 있다. 아래 코드에 path 변수에 원하는 디렉토리 경로를 지정할 경우 정상 삭제되는 모습을 확인할 수 있다. string path = "path" foreach (string directory in Directory.GetDirectories(path)) { try { Directory.Delete(directory, true); } catch (IOException) { Directory.Delete(directory, true); } catch (UnauthorizedAc..

개발/Unity

Mouse Cursor 바꾸기

public class MouseController : MonoBehaviour { public Texture2D cursorTextureA; public Texture2D cursorTextureB; public CursorMode cursorMode = CursorMode.Auto; public Vector2 hotSpot = Vector2.zero; void Start() { } public void ChangeMouseAMode(){ Cursor.SetCursor(cursorTextureA, hotSpot, cursorMode); } public void ChangeMouseBMode(){ Cursor.SetCursor(cursorTextureB, hotSpot, cursorMode); } } -..

개발/Unity

Unity Button UI가 의지대로 활성화 되지 않는 경우

Unity Button UI에는 Navigation이라는 Option이 존재[None, Everything, Horizontal, Vertical, Automatic, Explicit] 이벤트에 따른 다른 Button UI의 활성화를 도와주는 기능 - Horizontal : ←, → 방향키에 반응 - Vertical : ↑, ↓ 방향키에 반응 - Automatic : 주변의 UI에 자동으로 반응 - Explicit : 키보드 방향별로, 버튼별로 매핑 가능 Automatic으로 설정할 경우 원하지않는 활성화가 일어날 수 있음 3D 프로그램에 2D UI를 고정적으로 사용하는 경우에는 꼭 침착하게 모든 Button UI에 Navigation을 None으로 바꿔주는 것이 좋을 듯 함

개발/Unity

Unity TextmeshPro 한글 폰트 에셋 만들기

1. 한글을 지원하는 폰트 파일을 Asset 폴더에 Import ex. Assets/Fonts/NanumBarunGothic.ttf 2. Window -> TextMeshPro -> Font Asset Creator 클릭 3. Source Font File에 1번에서 Import한 Font.ttf 파일을 선택한 뒤 아래와 같이 폰트 정보를 입력 - Sampling Point Size : Custom Size / 30 - Padding : 4 - Packing Method : Fast - Atlas Resolution : 4096 / 4096 - Character Set : Custom Range - Character Sequence(Decimal) : 32-126[영어], 44032-55203[한글], ..

njsung
'개발/Unity' 카테고리의 글 목록 (2 Page)