- 2-0) 코루틴의 이해와 활용
- https://novlog.tistory.com/54
- https://coding-of-today.tistory.com/171
- https://eunjin3786.tistory.com/515
- https://luv-n-interest.tistory.com/696
- ...
- 2-1) Audio 로컬 파일 사용하기
-
private AudioSource audioSource; void Start() { ... audioSource = GetComponent<AudioSource>(); } void Update() { if (audioSource.isPlaying == false) { ... StartCoroutine(Speak(msg)); // 꼭 코루틴을 사용해야... } } IEnumerator Speak(string msg) { if (msg is null) { yield break; } ... string speak_path = ...; ... AudioClip audioclip = null; using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip("file://" + speak_path, AudioType.WAV)) { yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.ConnectionError) { Debug.Log(www.error); } else { audioclip = DownloadHandlerAudioClip.GetContent(www); } } audioSource.clip = audioclip; audioSource.Play(); }
- ...
-
- 2-2) Transparent Background Screen Capture
-
void Start() { StartCoroutine(Animation(...)); } IEnumerator Animation(...) { float duration = (float)input["duration"] * 25; float silence = (float)input["silence"] * 25; for (duration 만큼) { Capture(); yield return new WaitForEndOfFrame(); frameCount += 1; } for (silence 만큼) { Capture(); yield return new WaitForEndOfFrame(); frameCount += 1; } StartCoroutine(Animation(...)); } void Capture() { //RenderTexture backupT = Camera.main.targetTexture; //RenderTexture backupA = RenderTexture.active; Camera cam = Camera.main; int width = Screen.width; int height = Screen.height; // 카메라 배경을 투명하게 cam.clearFlags = CameraClearFlags.Color; cam.backgroundColor = Color.clear // 카메라 타겟을 -> 임의 RT으로 RenderTexture rt = RenderTexture.GetTemporary(width, height, 24, RenderTextureFormat.ARGB32); cam.targetTexture = rt; //cam.Render(); 굳이 수동으로 해줄필요 없이? 걍 한프레임 대기? yield return new WaitForEndOfFrame(); // 매번 active에 넣는게 이상할까? (참고로 메인 쓰레드에서만 가능한 코드) RenderTexture.active = cam.targetTexture; Texture2D texture = new Texture2D(width, height, TextureFormat.ARGB32, false, true); texture.ReadPixels(new Rect(0, 0, width, height), 0, 0, false); //texture.Apply(); 굳이 안해도 됨? //Camera.main.targetTexture = backupT; //RenderTexture.active = backupA; //byte[] bytes = texture.EncodeToPNG(); byte[] bytes = ImageConversion.EncodeToPNG(texture); string path = textureR.name; File.WriteAllBytes(path, bytes); // File.WriteAllBytesAsync(path, bytes); RenderTexture.ReleaseTemporary(rt); Texture2D.Destroy(texture); }
- ...
-
- 2-3) 애니메이터 State 및 transition 셋팅
- Animator 컴포넌트를 추가한뒤, 해당 컨트롤러 및 아바타 셋팅
- 애니메이터 -> idle 상태, 각 희노애락(?) 상태를 셋팅함
- 애니메이터 -> 각 희노애락(?) 에 맞는 파라미터 셋팅함
- transition 의 condition 에 해당 파라미터 적용 (Has Exit Time 없어야~ 바로바로 넘어갔던거 같음)
- animator.SetTrigger("idel");
- animator.SetInteger(emotion_type, Random.Range(0, 3)); 식으로 제어를 함!
- ...
2-4) 렌더링 과부화 와 애니메이션 씽크 이슈- 2-5) 유니티 캐릭터 에셋
- https://assetstore.unity.com/packages/3d/characters/unity-chan-model-18705
- https://assetstore.unity.com/packages/3d/characters/humanoids/kekos-customizable-3d-character-cartoon-kids-208301
- https://assetstore.unity.com/packages/essentials/tutorial-projects/the-heretic-digital-human-168620
- 활용법 :
- 보통 매뉴얼화 되어 있지 않기 때문에... 그냥 설치후 "튜토리얼 UI 씬" 쪽 코드를 직접 보면서 컨트롤 해보는 식.
- 웹클라이언트 콜백 : web script -> unity function 은 간단했다... (반대는 좀 복잡햇다)
- https://assetstore.unity.com/packages/2d/gui/icons/animated-loading-icons-47844
- 활용법 :
- '버퍼링' 이라는 말은... 콩글리쉬? animated or spinning or ...
- import → .perb → Canvas 밑에 놓으니 잘보임...
- 2-6) 고급 텍스트(?) TextMeshPro
- https://hyeokjunjjang.tistory.com/entry/UNITY-TextMesh-Pro-간단-사용법
- https://ssscool.tistory.com/454
- https://opchacha.tistory.com/11 // 음.. 잘안됨 1818
- 18 어느순간 생성도 엄청걸림... -> 그냥... 싸이즈50 및 안씨Extend 으로해서... 걍 만듬
- static ->
다이나믹 만하면... 한글은 잘됨- 한글, 일어, 중궈, 등등의 각국 언어는 -> 해당 폰트 차원에서 지원 여부가 결정 되는듯...
- 특정 폰트에서 깨지는 특정 문자 커버는... -> FallBack List 에 대체폰트 등록 해주는 식으로!
- 아... 딥빢! 다이나믹 으로 해서 그런지... 런타임에 버벅임... 18
- 싸이즈 16, Fast, SDF 으로 하니까... 그나마 속도 나옴 (A... 도 튜닝?)
- 1100-11FF,3131-318F,AC00-D7A3, 3040-309F,30A0-30FF,31F0-31FF, 4E00-9FBF (한중일HEX)
- (영어32-126, 특문8200-9900, 한글자모12593-12643, 한글44032-55203)
- (통합한자19968-40895, 일본어12352-12799)
- 중일 잘 안되는 폰트는... 그냥 한영만 CustomRange 하고 -> FallBack 커버 하는 식으로~
- <mark=#FF800080 padding="20, 20, 0, 0">으흐흐흐흐</mark>
- ...
- https://hyeokjunjjang.tistory.com/entry/UNITY-TextMesh-Pro-간단-사용법
- 2-7) 빌드 설정
- 2-8) Unable to find player assembly ... UnityEngine.TestRunner.dll 경고
- 이것때문에, DoNotShip 폴더 생기고 그러는 건강???
- https://blog.unity.com/kr/technology/enhancing-mobile-performance-with-the-burst-compiler
- https://baba-s.hatenablog.com/entry/2022/01/24/150000
- 2-9) 메세지박스(?) 만들기
- 오브젝트에 txt, img 등등을 어떻게 하위로 추가하는지... 개빡후 -> !!!
- 메세지용 이미지를 -> 씬에 추가 -> Sprite Rander 컴포넌트 -> ...
- 기본 Canvas (일반 UI) 에 쓰는 Canvas 컴포넌트 추가 -> "World Space" 으로 셋팅
- 해당 오브젝트에 txt, img 등등을 추가하고~ Transform 을 맞춤 -> 해당 오브젝트 움직이면 따라서 같이 움직임!
- 2-10) Newtonsoft JSON 설치
- package-manager -> + -> [add pakaage by name...]
- com.unity.nuget.newtonsoft-json 입력
- ...
-끝-
'게임' 카테고리의 다른 글
unity3 (0) | 2023.03.15 |
---|---|
Live2D Cubism SDK (0) | 2022.10.28 |
Live2D Cubism (0) | 2022.08.28 |
Ready Player ME (0) | 2022.08.27 |
unity1 (0) | 2021.11.14 |