• 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>
    • ... 
  • 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

+ Recent posts