반응형

[Unity]/[Unity] 38

package-lock.json

유니티 버전을 업데이트하거나 할 때 생기는 package-lock.json 파일이 무엇인지 알아보았습니다. 뭔가 싶어서 제거하고 커밋에 포함시키지 않았었는데, package-lock.json 은 프로젝트에 설치된 노드 모듈들의 의존성 트리를 기록하고 있기 때문에 커밋에 꼭 포함시켜 주어야 합니다. "com.unity.services.core": { "version": "1.4.2", "version": "1.4.3", "depth": 1, "source": "registry", "dependencies": { "com.unity.modules.unitywebrequest": "1.0.0", "com.unity.nuget.newtonsoft-json": "3.0.2", "com.unity.modules.a..

[Unity]/[Unity] 2022.11.01

[Unity] DOTween

: 오브젝트의 애니메이션, 값을 변경할 때 쉽고 다양한 모션을 줄 수 있는 간편한 API입니다. DOTween은 특정 변수의 값들을 일정 시간동안 원하는 값으로 부드럽게 변화시켜주는 역할을 합니다. * 공식 문서 링크 : http://dotween.demigiant.com/documentation.php DOTween - Documentation Nomenclature Tweener A tween that takes control of a value and animates it. Sequence A special tween that, instead of taking control of a value, takes control of other tweens and animates them as a group..

[Unity]/[Unity] 2022.10.10

[Unity] Scriptable Object

: 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너 입니다. 값의 사본이 생기는 것을 방지하여 프로젝트의 메모리 사용량을 줄입니다. 변경되지 않는 데이터를 저장하는 MonoBehavior 스크립트와 연결된 프리팹이 있는 프로젝트의 경우 유용한데, 데이터를 일반 변수로 구현할 경우 인스턴스화 할 때마다 프리팹에 이 데이터에 대한 자체 사본이 생성됩니다. Scriptable Object를 사용하면 메모리에 Scriptable Object의 데이터 사본만을 저장하여 이를 참조하는 방식으로 작동합니다. 유니티 오브젝트에서 파생되지만 게임 오브젝트에 컴포넌트로 부착할 수 없고, 프로젝트에 에셋으로 저장됩니다. 에디터 사용 시, Scriptable Object에 데이터를 저장..

[Unity]/[Unity] 2022.10.03

[Unity] AsyncOperation

: 비동기적인 연산을 위한 코루틴을 제공합니다. 유니티의 LoadScene 메서드를 호출했을 때, 유니티는 해당 장면의 모든 정보를 메모리로 가져오기 전까지 다른 작업을 하지 못합니다. 이 상황이 게임이 멈춰있는 상황으로 이어질 수 있기 때문에 유니티에서는 AsyncOperation을 제공합니다. 사용 예시를 간단하게 보여드리겠습니다. using UnityEngine.SceneManagement; AsyncOperation asyncOper = SceneManager.LoadSceneAsync("SceneName"); //장면이 준비되는 즉시 장면을 활성화시킬 것인지 허용 여부 asyncOper.allowSceneActivation = false; while(!asyncOper.isDone) //해당 동..

[Unity]/[Unity] 2022.09.23

[Unity] 유니티용 비동기 라이브러리 패키지 Unitask

: 유니티용 async-await 통합 비동기 라이브러리 패키지. C#의 async-await를 유니티에 맞게 최적화하여 기본 Task보다 가볍고, 기존 C#의 Task/ValueTask/IValueTaskSource와 호환성이 뛰어납니다. * 예시 코드 private UniTask WaitTouch() { _touchButton.gameObject.SetActive(true); return _touchButton.OnClickAsync(); } try-catch로 예의처리 가능합니다. 콜백 없이 작성하는 경우, 코드가 선형적으로 순서대로 실행되기 때문에 규칙성 있고 깔끔합니다. struct base : heap에 할당되지 않으므로 zero allocation. 유니티 메인 쓰레드(Player Loop)..

[Unity]/[Unity] 2022.09.22

[Unity] 입사각, 반사각을 구하는 방법

입사각, 반사각을 구하는 방법을 알아보겠습니다. //입사벡터 Vector2 incidentVector; //충돌할 면의 벡터 Vector2 collisionVector; //충돌한 면의 벡터를 각도로 변환 float collisionAngle = Mathf.Atan2(collisionVector.y, collisionVector.x) * 180f / Mathf.PI; //입사벡터를 각도로 변환 flot incidentAngle = Vector3.SignedAngle(collisionVector, incidentVector, -Vector3.forward); //반사할 벡터의 각도를 구함(충돌한 면의 벡터 기준) float reflectAngle = incidentAngle - 180 + collision..

[Unity]/[Unity] 2022.05.11

[Unity] Error Unity AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.games.Games

프로젝트 셋팅에 있는 Player - Publishing Settings - Minify - Release에서 Proguard를 사용했더니 다음과 같은 에러가 logcat에 뜨면서 구글 플레이 서비스에 로그인이 되지 않습니다. AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.games.Games 구글링을 해보니 Proguard에서 난독화한 후에 외부 라이브러리를 사용할 때 문제가 된다고 합니다. Proguard 를 끄지 않고, 관련 플러그인을 예외처리해주면 문제가 해결된다고 하니 해보겠습니다. 1. 유니티 내에서 Proguard 사용자 설정을 바꾸기 Player Settings - Player - Publishi..

[Unity]/[Unity] 2022.04.04

[Unity] UI터치와 게임 화면 터치 분리해주는 방법

화면을 터치해서 게임을 진행하는 방식일 때, 간혹 버튼 등의 UI창만 터치해야하는데 화면을 터치한 것으로 동시에 인식하는 경우가 있습니다. 이럴때는 다음과 같은 분리 작업이 필요합니다. 1. 화면 터치와 분리하고 싶은 UI Image의 Raycast Target이 켜져있는지 확인. 2. 화면터치 스크립트에 다음과 같이 코드 작성 if(Input.touchCount > 0) { if(EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) return; //UI 터치가 감지됐을 경우 return //여기서부터 화면 터치 코드 } * 단, Input.touchCount는 마우스 클릭은 감지하지 않기 때문에 유니티 내에서 테스트하는 것은..

[Unity]/[Unity] 2022.03.19

[Unity] Button onClick 이벤트 연결 방법(feat. AddListener())

유니티에서 버튼에 함수를 연결할 때 아래와 같이 인스펙터 창에서 On Click () 창에 스크립트를 직접 연결하는 방법을 주로 사용하는데요, 이 방법은 함수 이름이 바뀌거나 하면 연결이 풀려 계속 다시 연결해줘야 하는 단점이 있습니다. 오늘은 직접 드래그 앤 드랍으로 연결하는 방식 말고, 연결이 끊어질 걱정없게 스크립트 내에서 함수를 연결해주는 방법을 알아보도록 합시다. 제 쿠키런 오븐브레이크 모작 포트폴리오에서 이를 활용해줄겁니다. 사용 방법은 간단합니다. Button jumpButton; void Start() { //버튼 찾아서 연결해주기 jumpButton = transform.GetChild(0).GetComponent(); //AddListener로 jump 함수 연결 jumpButton.o..

[Unity]/[Unity] 2022.02.13
반응형