Engine/Unity

    유니티 Billboard Renderer 직접 구현할 필요가 없다

    유니티 Billboard Renderer 직접 구현할 필요가 없다

    지금까지는 아래 코드와 같이 billboard를 직접 구현해서 썻는데 검색해 보니까 billboard renderer 라는 컴포넌트가 있더라! public class CameraFacingBillboard : MonoBehaviour { private Camera m_Camera; private Transform m_Transform; private void Awake() { m_Camera = Camera.main; m_Transform = transform; } void Update() { m_Transform.LookAt(transform.position + m_Camera.transform.rotation * Vector3.forward, m_Camera.transform.rotation * Ve..

    유니티 GetChild() vs GameObject.Find() 어느 것이 속도가 빠를까.

    유니티 GetChild() vs GameObject.Find() 어느 것이 속도가 빠를까.

    구글링을 해보았더니, 나와 똑같은 의문을 가진 개발자가 있었다. 유니티 포럼에서도 여러 의견이 나뉘는데, 내가 봤을 때는 1 => 2 => 3 순으로 느리다. 따라서 유니티 인스펙터에 컴포넌트를 걸어두고 사용하자! 참고 문서 https://docs.unity3d.com/ScriptReference/Transform.GetChild.html Unity - Scripting API: Transform.GetChild If the transform has no child, or the index argument has a value greater than the number of children then an error will be generated. In this case "Transform child o..

    유니티 Camera.main은 캐싱해서 쓰자

    아래 코드와 같이 Camera.main을 매번 호출할 필요는 없다. Start()에서 미리 Camera.main을 Camera 변수에 담아놓고 다른 함수에서 불러쓰는 것이 좋겠다. 성능 상 큰 문제는 아니지만, 성능을 고려하자면 캐싱해 놓고 써야겠다. public class Example : MonoBehaviour { //This is Main Camera in the Scene Camera m_MainCamera; //This is the second Camera and is assigned in inspector public Camera m_CameraTwo; void Start() { //This gets the Main Camera from the Scene m_MainCamera = Camer..

    유니티 [ExecuteInEditMode]로 플레이 하지 않은 상태에서 값 변경하기

    해당 스크립트가 유니티 에디트 모드에서도 동작하도록 설정합니다. [ExecuteInEditMode] // 스크립트가 에디터모드에서 동작하도록 설정 public class CameraControl : MonoBehaviour { } 참고 문서 https://docs.unity.cn/kr/2017.4/ScriptReference/ExecuteInEditMode.html UnityEngine.ExecuteInEditMode - Unity 스크립팅 API Makes all instances of a script execute in edit mode. docs.unity.cn

    유니티 인스펙터 창에 속성들 구분하는 [Header()]

    유니티 인스펙터 창에 속성들 구분하는 [Header()]

    클래스의 속성들(멤버 변수)을 관리하기 편하게 구분해 주는 header가 있습니다. 아래 코드와 같이 구분 하면 인스펙터 창을 그룹화 해줄 수 있습니다. [System.Serializable] public class CameraSettings { [Header("-Positioning-")] public Vector3 m_CamPositionOffsetLeft; public Vector3 m_CamPositionOffsetRight; [Header("-Camera Options-")] public Camera m_UICamera; // UI 용 카메라 public float m_MouseXSensitivity = 5.0f; // 마우스 감도 public float m_MouseYSensitivity = ..

    Unity Addressable Asset System 좋은 글 링크

    https://gist.github.com/MeowKim/904087f7c2b372a5df72a0925add85d6 Unity Addressable Asset System 가이드 Unity Addressable Asset System 가이드. GitHub Gist: instantly share code, notes, and snippets. gist.github.com

    Unity 2021 에서 auto-refresh 기능 끄기

    Unity 2021 에서 auto-refresh 기능 끄기

    Edit => Preferences => Asset Pipeline => Auto Refresh => Disabled

    [Side Project] DivisionLike v0.1.0 with Unity engine

    https://youtu.be/qlCFAl2lha8 https://github.com/ddayin/Unity-DivisionLike GitHub - ddayin/Unity-DivisionLike: develop a game like Tom Clancy's The Division by using Unity develop a game like Tom Clancy's The Division by using Unity - GitHub - ddayin/Unity-DivisionLike: develop a game like Tom Clancy's The Division by using Unity github.com 사이드 프로젝트 같이 하실 분 구합니다. 클라, 서버, 디자이너, 기획 무엇이든 좋습니다.

    유니티 2022.2 로딩화면 믓지네!

    유니티 2022.2 로딩화면 믓지네!

    유니티 버전 업도 빠르고 로딩 화면도 새로워서 마음에 든다.

    우분투 리눅스에 유니티 개발 환경 세팅 완료

    우분투 리눅스에 유니티 개발 환경 세팅 완료

    삽질 끝에 우분투 리눅스에 유니티 최신 버전을 설치하였다. 이로써 Windows, MacOS, Ubuntu Linux 등 세 개의 운영체제에서 유니티 개발 환경을 세팅할 수 있게 되었다. 리눅스 자체에 익숙치 않다 보니까 시간이 꽤 오래 걸렸다. 우분투에서 유니티 개발 환경 세팅하는 방법은 나중에 정리해야겠다.

    [Unity] Canvas Group의 유용함에 대해서

    [Unity] Canvas Group의 유용함에 대해서

    Canvas Group은 매우 유용하다. 알파값 제어, 입력 제어 등의 속성을 가지고 있다. 특히 알파값 제어의 경우, Canvas Group의 자식들로 구성된 UI Elements를 한꺼번에 제어할 수 있는 편의를 제공한다. 입력 제어도 마찬가지이다. 스택오버 플로우를 참고하자면, https://stackoverflow.com/questions/47035144/unity3d-invisible-canvas-performance Unity3D invisible Canvas performance I'm developing a 2d menu heavy mobile game, which uses a lot of canvases, panels, popups etc. In the beginning I had all..

    책 [유니티 C# 스크립팅 마스터하기] 통독 후 깨달은 점

    책 [유니티 C# 스크립팅 마스터하기] 통독 후 깨달은 점

    정독하지는 않았다. 이미 알고 있거나 익숙한 내용은 넘겨보았기 때문이다. 우선 아쉬운 점은 2016년에 국내에 출판된 책이라서 무려 6년 전 번역된 책이다. 하지만 6년이 지난 지금에도 여전히 중요한 개념과 스크립팅이 많아서 좋았다. MonoDevelop IDE는 더 이상 안 쓰이기 때문에 개발 툴 사용 법은 참고만 하는 것이 좋겠다. 알고는 있으나, 아직 익숙하지 않은 내용을 정리해 보았다. 아직 부족한 부분이 많다는 것을 깨우치게 한 책이었다. delegate를 이용한 이벤트 주도적 프로그래밍 문자열 : 정규식 가변 개수 파라미터 LINQ와 정규식 IEnumerable과 IEnumerator 책은 사서 봅시다. http://www.yes24.com/Product/Goods/24027404 유니티 C#..

    [Unity] Object.GetInstanceID() 로 오브젝트 식별

    Unity 버전 : 2021.3.8f1 LTS 유니티에서는 고유 식별자를 가져올 수 있는 메서드를 제공한다. The instance ID of an object is always unique. The ID changes between player runtime and Editor sessions. https://docs.unity3d.com/ScriptReference/Object.GetInstanceID.html Unity - Scripting API: Object.GetInstanceID Returns int Returns the instance ID of the object. When used to call the origin object, this method returns a positive v..

    [Unity] GameObject.FindGameObjectWithTag() 빠르지만 안 쓰는 이유

    [Unity] GameObject.FindGameObjectWithTag() 빠르지만 안 쓰는 이유

    Unity 버전 : 2021.3.8f1 LTS Tag 는 매우 유용한 식별자이긴 하다. tag가 빠른 이유는 내부적으로 문자열을 숫자 형태로 변환해 태그 비교 속도를 향상시키기 때문이다. - 책 [유니티 C# 스크립팅 마스터하기] 중 그러나 Tag를 잘 쓰지 않는 이유는 분명하다. 아래와 같이 모니터 화면 안에 다 보이면 좋지만, 게임을 개발하다 보면 자꾸 tag 추가해야 해서 리스트를 스크롤 해야 되는 상황이 생긴다. 따라서 tag는 꼭 필요한 곳에서만 쓰는 것이 좋다. 아래 OnTriggerEnter()와 같이 특정 유니티 이벤트 함수에서 특정 물체와 충돌했는지 판단할 때 tag가 쓰일 수 있다. private void OnTriggerEnter2D(Collider2D collision) { if (..

    [Unity] private 변수를 에디터 인스펙터 상에서 보려면 (디버깅 용)

    [Unity] private 변수를 에디터 인스펙터 상에서 보려면 (디버깅 용)

    Unity version : 2021.3.8f1 LTS private 으로 설정된 변수를 유니티 인스펙터 상에서 볼 수 있는 방법이 있다. 간단히 인스펙터 상에서 메뉴를 선택하면 된다. 오른쪽 상단의 버튼을 클릭하면 메뉴가 열린다. Normal로 체크 되어 있는 것을 Debug로 변경한다. 그러면 아래와 같이 private을 포함한 모든 변수들이 인스펙터 상에 표시된다.

    [Unity] SendMessage(), BroadcastMessage() 안 쓰는 이유

    유니티 공식 스크립팅 API에 따르면, 아래와 같은 코드로 SendMessage()를 활용하고 있다. 무척 유용해 보이지만 성능 상의 이유로 잘 쓰지 않는다. using UnityEngine; public class Example : MonoBehaviour { void Start() { // Calls the function ApplyDamage with a value of 5 // Every script attached to the game object // that has an ApplyDamage function will be called. gameObject.SendMessage("ApplyDamage", 5.0); } } public class Example2 : MonoBehaviour { ..