From 295645f0da7d1bf021c1597893d5d10a2b7d3c65 Mon Sep 17 00:00:00 2001 From: "DESKTOP-S4BOTN2\\user" Date: Sat, 3 May 2025 17:53:42 +0900 Subject: [PATCH] =?UTF-8?q?FIX=20:=20=EC=86=8C=EC=86=8C=ED=95=9C=20?= =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=ED=8C=A8=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tyRecieve_FACEMOTION3D_and_iFacialMocap.cs | 182 +++++++----------- .../Scripts/OptitrackStreamingClient.cs | 4 +- .../Character/00.R&D/TestVRM/Zonko_VRM.prefab | 2 +- Assets/Scenes/Development scene.unity | 4 +- .../SpoutOutputScript/RenderStreamOutput.cs | 7 +- .../Editor/StreamingleAvatarExport.cs | 6 +- .../Editor/CameraManagerEditor.cs | 2 +- Packages/manifest.json | 4 +- Packages/packages-lock.json | 4 +- 9 files changed, 83 insertions(+), 132 deletions(-) diff --git a/Assets/External/Ifacialmocap/UnityRecieve_FACEMOTION3D_and_iFacialMocap.cs b/Assets/External/Ifacialmocap/UnityRecieve_FACEMOTION3D_and_iFacialMocap.cs index 09cf0170..33966d87 100644 --- a/Assets/External/Ifacialmocap/UnityRecieve_FACEMOTION3D_and_iFacialMocap.cs +++ b/Assets/External/Ifacialmocap/UnityRecieve_FACEMOTION3D_and_iFacialMocap.cs @@ -16,22 +16,15 @@ public class UnityRecieve_FACEMOTION3D_and_iFacialMocap : MonoBehaviour private UdpClient client; private bool StartFlag = true; - //object names - public string faceObjectGroupName = ""; - public string headBoneName = ""; - public string rightEyeBoneName = ""; - public string leftEyeBoneName = ""; - public string headPositionObjectName = ""; + //object references + public SkinnedMeshRenderer[] faceMeshRenderers; + public Transform headBone; + public Transform rightEyeBone; + public Transform leftEyeBone; + public Transform headPositionObject; private UdpClient udp; private Thread thread; - private SkinnedMeshRenderer meshTarget; - private List meshTargetList; - private List headObjectArray; - private List rightEyeObjectArray; - private List leftEyeObjectArray; - private List headPositionObjectArray; - private string messageString = ""; public int LOCAL_PORT = 49983; @@ -62,11 +55,18 @@ public class UnityRecieve_FACEMOTION3D_and_iFacialMocap : MonoBehaviour void CreateUdpServer() { - udp = new UdpClient(LOCAL_PORT); - udp.Client.ReceiveTimeout = 5; + try + { + udp = new UdpClient(LOCAL_PORT); + udp.Client.ReceiveTimeout = 5; - thread = new Thread(new ThreadStart(ThreadMethod)); - thread.Start(); + thread = new Thread(new ThreadStart(ThreadMethod)); + thread.Start(); + } + catch (Exception e) + { + Debug.LogError($"[iFacialMocap] UDP 서버 생성 실패: {e.Message}"); + } } IEnumerator WaitProcess(float WaitTime) @@ -76,11 +76,18 @@ public class UnityRecieve_FACEMOTION3D_and_iFacialMocap : MonoBehaviour void Connect_to_iOS_App() { - //iFacialMocap - SendMessage_to_iOSapp("iFacialMocap_sahuasouryya9218sauhuiayeta91555dy3719", 49983); + try + { + //iFacialMocap + SendMessage_to_iOSapp("iFacialMocap_sahuasouryya9218sauhuiayeta91555dy3719", 49983); - //Facemotion3d - SendMessage_to_iOSapp("FACEMOTION3D_OtherStreaming", 49993); + //Facemotion3d + SendMessage_to_iOSapp("FACEMOTION3D_OtherStreaming", 49993); + } + catch (Exception e) + { + Debug.LogError($"[iFacialMocap] iOS 앱 연결 실패: {e.Message}"); + } } void StopStreaming_iOS_App() @@ -90,20 +97,24 @@ public class UnityRecieve_FACEMOTION3D_and_iFacialMocap : MonoBehaviour //iOSアプリに通信開始のメッセージを送信 //Send a message to the iOS application to start streaming - void SendMessage_to_iOSapp(string sendMessage,int send_port) + void SendMessage_to_iOSapp(string sendMessage, int send_port) { try { client = new UdpClient(); client.Connect(iOS_IPAddress, send_port); byte[] dgram = Encoding.UTF8.GetBytes(sendMessage); - client.Send(dgram, dgram.Length); - client.Send(dgram, dgram.Length); - client.Send(dgram, dgram.Length); - client.Send(dgram, dgram.Length); - client.Send(dgram, dgram.Length); + + // 메시지 전송 시도 + for (int i = 0; i < 5; i++) + { + client.Send(dgram, dgram.Length); + } + } + catch (Exception e) + { + Debug.LogError($"[iFacialMocap] 메시지 전송 실패: {e.Message}"); } - catch { } } // Update is called once per frame @@ -122,17 +133,20 @@ public class UnityRecieve_FACEMOTION3D_and_iFacialMocap : MonoBehaviour void SetBlendShapeWeightFromStrArray(string[] strArray2) { string mappedShapeName = strArray2[0].Replace("_R", "Right").Replace("_L", "Left"); - float weight = float.Parse(strArray2[1], CultureInfo.InvariantCulture); - - foreach (SkinnedMeshRenderer meshTarget in meshTargetList) + if (faceMeshRenderers != null) { - var shared_mesh = meshTarget.sharedMesh; - int index = shared_mesh.GetBlendShapeIndex(mappedShapeName); - if (index > -1) + foreach (var meshRenderer in faceMeshRenderers) { - meshTarget.SetBlendShapeWeight(index, weight); + if (meshRenderer != null && meshRenderer.sharedMesh != null) + { + int index = meshRenderer.sharedMesh.GetBlendShapeIndex(mappedShapeName); + if (index > -1) + { + meshRenderer.SetBlendShapeWeight(index, weight); + } + } } } } @@ -174,31 +188,22 @@ public class UnityRecieve_FACEMOTION3D_and_iFacialMocap : MonoBehaviour if (strArray2.Length == 2) { string[] commaList = strArray2[1].Split(','); - if (strArray2[0] == "head") + if (strArray2[0] == "head" && headBone != null) { - foreach (GameObject headObject in headObjectArray) - { - headObject.transform.localRotation = Quaternion.Euler(float.Parse(commaList[0], CultureInfo.InvariantCulture), -float.Parse(commaList[1], CultureInfo.InvariantCulture), -float.Parse(commaList[2], CultureInfo.InvariantCulture)); - } + headBone.localRotation = Quaternion.Euler(float.Parse(commaList[0], CultureInfo.InvariantCulture), -float.Parse(commaList[1], CultureInfo.InvariantCulture), -float.Parse(commaList[2], CultureInfo.InvariantCulture)); - foreach (GameObject headPositionObject in headPositionObjectArray) + if (headPositionObject != null) { - headPositionObject.transform.localPosition = new Vector3(-float.Parse(commaList[3], CultureInfo.InvariantCulture), float.Parse(commaList[4], CultureInfo.InvariantCulture), float.Parse(commaList[5], CultureInfo.InvariantCulture)); + headPositionObject.localPosition = new Vector3(-float.Parse(commaList[3], CultureInfo.InvariantCulture), float.Parse(commaList[4], CultureInfo.InvariantCulture), float.Parse(commaList[5], CultureInfo.InvariantCulture)); } } - else if (strArray2[0] == "rightEye") + else if (strArray2[0] == "rightEye" && rightEyeBone != null) { - foreach (GameObject rightEyeObject in rightEyeObjectArray) - { - rightEyeObject.transform.localRotation = Quaternion.Euler(float.Parse(commaList[0], CultureInfo.InvariantCulture), -float.Parse(commaList[1], CultureInfo.InvariantCulture), float.Parse(commaList[2], CultureInfo.InvariantCulture)); - } + rightEyeBone.localRotation = Quaternion.Euler(float.Parse(commaList[0], CultureInfo.InvariantCulture), -float.Parse(commaList[1], CultureInfo.InvariantCulture), float.Parse(commaList[2], CultureInfo.InvariantCulture)); } - else if (strArray2[0] == "leftEye") + else if (strArray2[0] == "leftEye" && leftEyeBone != null) { - foreach (GameObject leftEyeObject in leftEyeObjectArray) - { - leftEyeObject.transform.localRotation = Quaternion.Euler(float.Parse(commaList[0], CultureInfo.InvariantCulture), -float.Parse(commaList[1], CultureInfo.InvariantCulture), float.Parse(commaList[2], CultureInfo.InvariantCulture)); - } + leftEyeBone.localRotation = Quaternion.Euler(float.Parse(commaList[0], CultureInfo.InvariantCulture), -float.Parse(commaList[1], CultureInfo.InvariantCulture), float.Parse(commaList[2], CultureInfo.InvariantCulture)); } } } @@ -211,68 +216,7 @@ public class UnityRecieve_FACEMOTION3D_and_iFacialMocap : MonoBehaviour void FindGameObjectsInsideUnitySettings() { - //Find BlendShape Objects - meshTargetList = new List(); - - GameObject faceObjGrp = GameObject.Find(faceObjectGroupName); - if (faceObjGrp != null) - { - List list = FM3D_and_iFacialMocap_GetAllChildren.GetAll(faceObjGrp); - - foreach (GameObject obj in list) - { - meshTarget = obj.GetComponent(); - if (meshTarget != null) - { - if (HasBlendShapes(meshTarget) == true) - { - meshTargetList.Add(meshTarget); - } - } - } - } - - //Find Bone Objects - headObjectArray = new List(); - foreach (string headString in headBoneName.Split(',')) - { - GameObject headObject = GameObject.Find(headString); - if (headObject != null) - { - headObjectArray.Add(headObject); - } - } - - rightEyeObjectArray = new List(); - foreach (string rightEyeString in rightEyeBoneName.Split(',')) - { - GameObject rightEyeObject = GameObject.Find(rightEyeString); - if (rightEyeObject != null) - { - rightEyeObjectArray.Add(rightEyeObject); - } - } - - leftEyeObjectArray = new List(); - foreach (string leftEyeString in leftEyeBoneName.Split(',')) - { - GameObject leftEyeObject = GameObject.Find(leftEyeString); - if (leftEyeObject != null) - { - leftEyeObjectArray.Add(leftEyeObject); - } - } - - headPositionObjectArray = new List(); - foreach (string headPositionString in headPositionObjectName.Split(',')) - { - GameObject headPositionObject = GameObject.Find(headPositionString); - if (headPositionObject != null) - { - headPositionObjectArray.Add(headPositionObject); - } - } - + // 모든 Transform 참조는 이미 인스펙터에서 할당되므로 추가 초기화가 필요 없음 } void ThreadMethod() @@ -289,8 +233,16 @@ public class UnityRecieve_FACEMOTION3D_and_iFacialMocap : MonoBehaviour byte[] data = udp.Receive(ref remoteEP); messageString = Encoding.ASCII.GetString(data); } - catch + catch (SocketException e) { + if (e.SocketErrorCode != SocketError.TimedOut) + { + Debug.LogError($"[iFacialMocap] 데이터 수신 오류: {e.Message}"); + } + } + catch (Exception e) + { + Debug.LogError($"[iFacialMocap] 예상치 못한 오류: {e.Message}"); } do diff --git a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackStreamingClient.cs b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackStreamingClient.cs index d3184793..a1673ff5 100644 --- a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackStreamingClient.cs +++ b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackStreamingClient.cs @@ -24,7 +24,6 @@ using NaturalPoint; using NaturalPoint.NatNetLib; using UnityEditor; using UnityEditor.UIElements; -using UnityEngine; using UnityEngine.UIElements; using static TMPro.SpriteAssetUtilities.TexturePacker_JsonArray; @@ -341,7 +340,6 @@ public class OptitrackStreamingClient : MonoBehaviour private bool m_hasDrawnCameras = false; private bool m_hasDrawnForcePlates = false; private bool m_subscribedToMarkers = false; - private bool m_subscribedToTMarkMarkers = false; // trained markerset added private OptitrackHiResTimer.Timestamp m_lastFrameDeliveryTimestamp; private Coroutine m_connectionHealthCoroutine = null; @@ -611,7 +609,7 @@ public class OptitrackStreamingClient : MonoBehaviour /// An arbitrary OptitrackClient from the scene, or null if none are found. public static OptitrackStreamingClient FindDefaultClient() { - OptitrackStreamingClient[] allClients = FindObjectsOfType(); + OptitrackStreamingClient[] allClients = FindObjectsByType(FindObjectsSortMode.None); if ( allClients.Length == 0 ) { diff --git a/Assets/ResourcesData/Character/00.R&D/TestVRM/Zonko_VRM.prefab b/Assets/ResourcesData/Character/00.R&D/TestVRM/Zonko_VRM.prefab index 8d68ff1f..d89499e3 100644 --- a/Assets/ResourcesData/Character/00.R&D/TestVRM/Zonko_VRM.prefab +++ b/Assets/ResourcesData/Character/00.R&D/TestVRM/Zonko_VRM.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:779ff71ae6b21d154b32ea13bcbc4b5c697c9dc47301ce6ef422aac44f91bd8e +oid sha256:2ca95a643d329da11eebc3167bc7c590c7d4e1d95f805c2b9323ea506406b835 size 283240 diff --git a/Assets/Scenes/Development scene.unity b/Assets/Scenes/Development scene.unity index 1b2bfaf6..7291880b 100644 --- a/Assets/Scenes/Development scene.unity +++ b/Assets/Scenes/Development scene.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a37a2f545bf68167adafe3210bb4671b8b324f97a2880c7e9d4977ec852dc58e -size 79247 +oid sha256:331798cc8d0da5ca6d677a5b73d574d4d5ed0d7dccaeb3459c6bed52a8c60a06 +size 83947 diff --git a/Assets/Scripts/SpoutOutputScript/RenderStreamOutput.cs b/Assets/Scripts/SpoutOutputScript/RenderStreamOutput.cs index 8408b80c..32ed7885 100644 --- a/Assets/Scripts/SpoutOutputScript/RenderStreamOutput.cs +++ b/Assets/Scripts/SpoutOutputScript/RenderStreamOutput.cs @@ -3,6 +3,7 @@ using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; using Klak.Spout; using Klak.Ndi; +using System; // 출력 방식 열거형 public enum OutputMethod @@ -304,6 +305,7 @@ public class AlphaRecodingRenderPass : ScriptableRenderPass m_ShaderTexture = shaderTexture; } + [Obsolete("This method is obsolete. Use the new Render Graph API instead.")] public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { try @@ -315,8 +317,11 @@ public class AlphaRecodingRenderPass : ScriptableRenderPass try { + // Update cameraColorTargetHandle usage + var colorTarget = renderingData.cameraData.renderer.cameraColorTargetHandle; + // 최종 렌더링 결과를 가져옵니다 - RenderTargetIdentifier source = renderingData.cameraData.renderer.cameraColorTargetHandle; + RenderTargetIdentifier source = colorTarget; cmd.Blit(source, m_ShaderCameraTexture); // ShaderCameraTexture를 ShaderContral의 _MainTex에 할당 diff --git a/Assets/Scripts/Streamingle/StreamingleAvatarExport/Editor/StreamingleAvatarExport.cs b/Assets/Scripts/Streamingle/StreamingleAvatarExport/Editor/StreamingleAvatarExport.cs index 1b751128..46708bb3 100644 --- a/Assets/Scripts/Streamingle/StreamingleAvatarExport/Editor/StreamingleAvatarExport.cs +++ b/Assets/Scripts/Streamingle/StreamingleAvatarExport/Editor/StreamingleAvatarExport.cs @@ -160,11 +160,7 @@ public class StreamingleAvatarExporter : EditorWindow }; // 빌드 옵션 설정 - BuildAssetBundleOptions options = BuildAssetBundleOptions.ForceRebuildAssetBundle - | BuildAssetBundleOptions.StrictMode - | BuildAssetBundleOptions.DeterministicAssetBundle - | BuildAssetBundleOptions.DisableLoadAssetByFileName - | BuildAssetBundleOptions.DisableLoadAssetByFileNameWithExtension; + BuildAssetBundleOptions options = BuildAssetBundleOptions.None; // AssetBundle 빌드 BuildPipeline.BuildAssetBundles( diff --git a/Assets/Scripts/Streamingle/StreamingleControl/Editor/CameraManagerEditor.cs b/Assets/Scripts/Streamingle/StreamingleControl/Editor/CameraManagerEditor.cs index b46b66e6..d9b0d4cb 100644 --- a/Assets/Scripts/Streamingle/StreamingleControl/Editor/CameraManagerEditor.cs +++ b/Assets/Scripts/Streamingle/StreamingleControl/Editor/CameraManagerEditor.cs @@ -50,7 +50,7 @@ public class CameraManagerEditor : Editor if (GUILayout.Button("새 프리셋 추가", GUILayout.Height(30))) { // Scene에 있는 CinemachineCamera 컴포넌트를 가져와서 새 프리셋 생성 - var newCamera = GameObject.FindObjectOfType(); + var newCamera = FindFirstObjectByType(); if (newCamera != null) { manager.cameraPresets.Add(new CameraManager.CameraPreset(newCamera)); diff --git a/Packages/manifest.json b/Packages/manifest.json index a0e24e5b..9d8cefd8 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0484a82face991d71f810636ba025c7171520043dc23f8c5d2fdcc129cffedf5 -size 2328 +oid sha256:c026471f5901aaa1d9bdbf6ec3dcb2c0b0e0dd1c754220d18bb3effe1165fc96 +size 2366 diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 55e115d3..ac7450a1 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d052547d34d2f4f8f332de4c7da68e4613eb7ba7a1493754098e1e3c241029a -size 13867 +oid sha256:bf1adb5f99639da69012a3bff624e5e05322588094d99d1464108a790c806955 +size 14103