본문 바로가기

유니티(Unity)

(42)
3D 애니메이션 문제 및 해결법 1. Run 은 LoopTime(무한반복)이 체크되었음에도 한 루프 작동 후 idle로 되돌아갔다가 다시 Run이 작동되는 작업이 연속적으로 발생함.=> Run -> Idle 방향의 trandition에서 HasExitTime을 체크 해제 해주었더니 정상적으로 작동. 2. Idle 에서 특정 애니메이션으로 전환될때 뭔가 어색한 애니메이션으로 작동됨. => 원인은 세팅아래의 파란색 영역이 너무 길기 때문에 idle에서 점프로 전환되는 시간이 너무 길어져서 애니메이션이 이상하게 작동되는 것. 해결법은위 짤에서 보다시피 파란색 영역의 크기를 줄여주면됨.
Webgl 로컬에서 실행시키기(Express) Unity에서 webgl 빌드 후, 빌드 된 파일을 로컬 서버로 실행.(Webgl은 비압축 형태로 빌드)vscode에서 프로젝트 폴더를 만들고 express설치. 이 프로젝트 폴더에 webgl파일들을 넣어야 하는데,빌드된 파일들을 "WebGLTEST" 이라는 폴더에 담고, vscode 프로젝트 폴더에 넣는다. 서버측 코드const express = require("express");const app = express();const http = require("http")const path = require("path");const port = 8000;app.use(express.static(path.join(__dirname, "/WebGLTEST")));app.get("/", (req, res) =>..
코루틴 확장하기 using System.Collections;using UnityEngine;public class CoroutineManager : MonoBehaviour{ public static CoroutineManager instance = null; public static CoroutineManager Instance { get { if (instance == null) instance = new GameObject("CoroutineManager").AddComponent(); return instance; } } //MonoBehaviour가 없는 스크립트의 IEnumera..
vscode와 유니티에서 async 스레드 테스트 테스트 이유:유니티는 기본적으로 메인 스레드에서 작동되고, UI나 컴포넌트에 접근하는 것은 메인스레드에서만 가능함.그런데 async를 이용하면 다른 스레드에서 실행될 것이라고 생각함. 그래서 UI업데이트나 GetComponent 와 같이 메인스레드에서만 작동 가능한 기능들을 사용못할 줄 알았음.그런데 실제로는 async 메소드 안에서 메인스레드에서 작동되어야할 기능들이 작동되었음.그래서 테스트 하게 됨.  vscodeusing System.Diagnostics;partial class Program{ static async Task Main(string[] args) { await TestAsync(); } static async Task TestAsync() { ..
자바스크립트 Dll 사용하기 https://docs.unity3d.com/kr/2022.3/Manual/webgl-interactingwithbrowserscripting.html 브라우저 스크립팅과 상호작용 - Unity 매뉴얼웹용 콘텐츠를 빌드할 때 웹페이지의 다른 요소와 커뮤니케이션해야 할 수 있습니다.또는 Unity가 현재 기본적으로 노출하지 않는 웹 API를 사용하여 기능을 구현하고 싶을 수 있습니다.두 가지docs.unity3d.com 공식 문서에 나온 것처럼 자바스크립트 Dll을 사용하기 위해서는 아래와 같은 절차를 거쳐야한다. (1) .jslib 확장자 파일공식 문서에 나온 예처럼mergeInto(LibraryManager.library, { Hello: function () { window.alert("Hel..
Unity 텍스처 압축 시 주의 할 점. 런타임 최적화를 위해 머터리얼에 들어있는 텍스처를 압축 하는 중에 문제 발생. 머터리얼에 들어 있는 텍스처를 수정하기 위해서는 Read/Write가 true가 되어야하는데 이것은 에디터에서만 설정할 수 있다. 텍스처를 복제하여 새롭게 생성해주면 수정이 가능하기 때문에 기존의 텍스처를 복제하려고 했다. 하지만 문제가 많이 발생했다. 1. 에디터에서는 잘 동작. 하지만 윈도우 빌드에서는 GetRawTextureData 부분에서 읽을 수 없다는 에러발생.(GetPixels도 마찬가지)Texture2D tex = (Texture2D)mat.GetTexture(name); byte[] data = tex.GetRawTextureData(); Texture2D compressTex = new Texture2D(te..
텍스처 해상도 = 높이 * 너비 픽셀 총 개수= 해상도 예를 들어 RGB16 텍스처가 있다고 한다면 RGB 16비트 이미지는 각 색상 채널(Red, Green, Blue)이 16비트로 표현. 이것은 각 색상 채널이 2^16 (65,536) 가지의 서로 다른 색상을 표현할 수 있다는 것을 의미. 따라서 각 픽셀은 다음과 같이 데이터를 가지고 있음Red 채널: 16비트Green 채널: 16비트Blue 채널: 16비트그러므로 각 픽셀은 16비트 + 16비트 + 16비트 = 48비트의 데이터를 가지고 있다. 그리고 픽셀의 수와 비트의 상관 관계에 따라 전체 이미지의 데이터 크기를 계산할 수 있다. 만약 이미지의 해상도가 256x256 픽셀이라면, 전체 이미지의 데이터 크기는 다음과 같이 계산. 전체 이미지의 데이터 크..
그래픽스 퍼포먼스 최적화 전후 런타임 중에 3D 모델을 임포트 하는 프로젝트 진행 중, 300MB 크기의 모델을 임포트 하니 프레임 드랍이 너무 심함. 아무리 에디터에서 테스트 했다지만 게이밍 노트북으로 fps가 30까지도 떨어져버림. 그래서 최적화를 진행하게 됨. -최적화 전(FPS : 30 ~ 90) -최적화 시도 과정 가장 먼저 한 시도는 하위 오브젝트의 모든 메시들을 하나의 메시에 서브메시로 병합. 하지만 이 방법은 batches 는 물론이고 프레임 드랍도 그대로. batch가 어디에 영향을 받는지 테스트 해보니 머터리얼 수와 서브메시의 수에 영향을 받는 것을 확인. 그래서 머터리얼을 유지하면서 서브메시를 줄이기 위해 고민하다가 같은 속성 값들을 가진 머터리얼끼리 묶어 서브 메시들을 한번더 병합. 그러자 batches 1590..
Unity 3D 렌더링 최적화 및 fps 높이기 -batches수에 영향주는 요소 1. 서브메시 개수 2. 할당된 머터리얼 수 총 배치수 = 서브메시 개수 + 머터리얼 개수 이를 개선하면 렌더링 속도 개선. (단일 material사용하는 경우 다른 메시 및 서브메시를 통합하여 하나의 material을 적용하면 된다.) (CombineMeshes 메소드 사용) -머터리얼 front로 바꾸기 material.SetInt("_CullMode", (int)UnityEngine.Rendering.CullMode.Front); (테스트 결과 fps 의 향상)
Unity 알림텍스트 using UnityEngine; using UnityEngine.UI; public class Notification : MonoBehaviour { static GameObject notifyText, canvasObject, panelObject; public static Notification instance = null; public static Notification Instance { get { if(instance == null) { CreateText(); CreateCanvas(); CreatePanel(); instance = canvasObject.AddComponent(); } return instance; } } static void CreateText() { notifyText..