diff --git a/Unity-Master/Assets/Scenes/VR_Player1.unity b/Unity-Master/Assets/Scenes/VR_Player1.unity index 72d9f7b..79df12b 100644 --- a/Unity-Master/Assets/Scenes/VR_Player1.unity +++ b/Unity-Master/Assets/Scenes/VR_Player1.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3878f575e37c01f351d8e916e9985642c4c1387c24f1a34d0b56b7541b97ff71 -size 4403975 +oid sha256:c911d645c4a0bba6fd8b8c7300f5e58a1c276b26429924f982550bffcb05e2ef +size 4411853 diff --git a/Unity-Master/Assets/Scenes/VR_Player2.unity b/Unity-Master/Assets/Scenes/VR_Player2.unity index 93523ca..a00737f 100644 --- a/Unity-Master/Assets/Scenes/VR_Player2.unity +++ b/Unity-Master/Assets/Scenes/VR_Player2.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64d2e61f684c4011a7aacfac03def790c372db18f288bba13584b3c0cc533d8e -size 4488262 +oid sha256:5251ad7b0b163fb4778fd7b9ea3a9ab87994292ffee4e85190e0730c9ff42704 +size 4490772 diff --git a/Unity-Master/Assets/Scripts/AvatarDataDownloader.cs b/Unity-Master/Assets/Scripts/AvatarDataDownloader.cs index 2467938..4c5a8f0 100644 --- a/Unity-Master/Assets/Scripts/AvatarDataDownloader.cs +++ b/Unity-Master/Assets/Scripts/AvatarDataDownloader.cs @@ -10,6 +10,8 @@ public class AvatarDataDownloader : MonoBehaviour [Header("Server Configuration")] [SerializeField] private string serverHost = "127.0.0.1"; [SerializeField] private int serverPort = 8080; + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [SerializeField] private string targetPlayer = "player1"; // Which player data to fetch [Header("Download Configuration")] @@ -37,6 +39,16 @@ public class AvatarDataDownloader : MonoBehaviour void Start() { + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + serverHost = cfg.ipAddress; + serverPort = cfg.port; + } + } // Set up file paths syncFilesPath = Path.Combine(Application.dataPath, "Sync-Files"); if (!Directory.Exists(syncFilesPath)) diff --git a/Unity-Master/Assets/Scripts/AvatarDataUploader.cs b/Unity-Master/Assets/Scripts/AvatarDataUploader.cs index e6387c6..7baf3b0 100644 --- a/Unity-Master/Assets/Scripts/AvatarDataUploader.cs +++ b/Unity-Master/Assets/Scripts/AvatarDataUploader.cs @@ -9,6 +9,8 @@ public class AvatarDataUploader : MonoBehaviour [Header("Server Configuration")] [SerializeField] private string serverHost = "127.0.0.1"; [SerializeField] private int serverPort = 8080; + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [SerializeField] private string uploadAsPlayer = "player1"; // Upload as which player [Header("Upload Configuration")] @@ -35,6 +37,16 @@ public class AvatarDataUploader : MonoBehaviour void Start() { + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + serverHost = cfg.ipAddress; + serverPort = cfg.port; + } + } // Set up file paths syncFilesPath = Path.Combine(Application.dataPath, "Sync-Files"); if (!Directory.Exists(syncFilesPath)) diff --git a/Unity-Master/Assets/Scripts/AvatarSyncClient.cs b/Unity-Master/Assets/Scripts/AvatarSyncClient.cs index af21e6c..f758981 100644 --- a/Unity-Master/Assets/Scripts/AvatarSyncClient.cs +++ b/Unity-Master/Assets/Scripts/AvatarSyncClient.cs @@ -11,6 +11,8 @@ public class AvatarSyncClient : MonoBehaviour [Header("Server Configuration")] [SerializeField] private string serverHost = "127.0.0.1"; [SerializeField] private int serverPort = 8080; + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [SerializeField] private string targetPlayer = "player1"; // Which player data to fetch [Header("Sync Configuration")] @@ -43,6 +45,16 @@ public class AvatarSyncClient : MonoBehaviour void Start() { + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + serverHost = cfg.ipAddress; + serverPort = cfg.port; + } + } // Set up file paths syncFilesPath = Path.Combine(Application.dataPath, "Sync-Files"); if (!Directory.Exists(syncFilesPath)) diff --git a/Unity-Master/Assets/Scripts/Multiplayer/ConvaiSimpleUDPAudioReceiver.cs b/Unity-Master/Assets/Scripts/Multiplayer/ConvaiSimpleUDPAudioReceiver.cs index c63bbc1..fbf366f 100644 --- a/Unity-Master/Assets/Scripts/Multiplayer/ConvaiSimpleUDPAudioReceiver.cs +++ b/Unity-Master/Assets/Scripts/Multiplayer/ConvaiSimpleUDPAudioReceiver.cs @@ -12,14 +12,16 @@ using UnityEngine; namespace Convai.Scripts.Runtime.Multiplayer { /// - /// Simple UDP Audio Receiver V2 - Simulates microphone input by triggering normal Convai flow + /// Simple UDP Audio Receiver - Simulates microphone input by triggering normal Convai flow /// This approach is much simpler and more reliable than trying to replicate gRPC calls /// - public class ConvaiSimpleUDPAudioReceiverV2 : MonoBehaviour + public class ConvaiSimpleUDPAudioReceiver : MonoBehaviour { [Header("Network Configuration")] [SerializeField] private int listenPort = 12345; [SerializeField] private bool enableDebugLogging = true; + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [Header("NPC Target")] [SerializeField] private bool useActiveNPC = true; @@ -58,6 +60,15 @@ namespace Convai.Scripts.Runtime.Multiplayer private void Start() { _cancellationTokenSource = new CancellationTokenSource(); + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + listenPort = cfg.port; + } + } InitializeNetwork(); InitializeConvai(); diff --git a/Unity-Master/Assets/Scripts/Multiplayer/ConvaiSimpleUDPAudioSender.cs b/Unity-Master/Assets/Scripts/Multiplayer/ConvaiSimpleUDPAudioSender.cs index 87c1609..67edbf3 100644 --- a/Unity-Master/Assets/Scripts/Multiplayer/ConvaiSimpleUDPAudioSender.cs +++ b/Unity-Master/Assets/Scripts/Multiplayer/ConvaiSimpleUDPAudioSender.cs @@ -18,6 +18,8 @@ namespace Convai.Scripts.Runtime.Multiplayer [Header("Network Settings")] [SerializeField] private string targetIP = "127.0.0.1"; [SerializeField] private int targetPort = 12345; + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [Header("Audio Settings")] [SerializeField] private int recordingFrequency = 16000; @@ -47,6 +49,16 @@ namespace Convai.Scripts.Runtime.Multiplayer private void Start() { + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + targetIP = cfg.ipAddress; + targetPort = cfg.port; + } + } InitializeNetwork(); InitializeAudio(); _cancellationTokenSource = new CancellationTokenSource(); diff --git a/Unity-Master/Assets/Scripts/Multiplayer/ConvaiUDPSpeechReceiver.cs b/Unity-Master/Assets/Scripts/Multiplayer/ConvaiUDPSpeechReceiver.cs index 8b08d97..4d17f36 100644 --- a/Unity-Master/Assets/Scripts/Multiplayer/ConvaiUDPSpeechReceiver.cs +++ b/Unity-Master/Assets/Scripts/Multiplayer/ConvaiUDPSpeechReceiver.cs @@ -19,6 +19,8 @@ namespace Convai.Scripts.Runtime.Multiplayer [Header("Network Configuration")] [SerializeField] private int listenPort = 12346; [SerializeField] private bool enableDebugLogging = true; + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [Header("Audio Playback")] [SerializeField] private AudioSource speechAudioSource; @@ -105,6 +107,15 @@ namespace Convai.Scripts.Runtime.Multiplayer private void Start() { _cancellationTokenSource = new CancellationTokenSource(); + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + listenPort = cfg.port; + } + } InitializeAudio(); InitializeNetwork(); } diff --git a/Unity-Master/Assets/Scripts/Multiplayer/ConvaiUDPSpeechSender.cs b/Unity-Master/Assets/Scripts/Multiplayer/ConvaiUDPSpeechSender.cs index dd9ef81..e972e9d 100644 --- a/Unity-Master/Assets/Scripts/Multiplayer/ConvaiUDPSpeechSender.cs +++ b/Unity-Master/Assets/Scripts/Multiplayer/ConvaiUDPSpeechSender.cs @@ -21,6 +21,8 @@ namespace Convai.Scripts.Runtime.Multiplayer [SerializeField] private string targetIP = "127.0.0.1"; [SerializeField] private int targetPort = 12346; [SerializeField] private bool enableDebugLogging = true; + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [Header("NPC Source")] [SerializeField] private bool useActiveNPC = true; @@ -53,6 +55,16 @@ namespace Convai.Scripts.Runtime.Multiplayer private void Start() { + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + targetIP = cfg.ipAddress; + targetPort = cfg.port; + } + } InitializeNetwork(); InitializeConvai(); } diff --git a/Unity-Master/Assets/Scripts/NetworkConfig.asset b/Unity-Master/Assets/Scripts/NetworkConfig.asset new file mode 100644 index 0000000..0ff4eed --- /dev/null +++ b/Unity-Master/Assets/Scripts/NetworkConfig.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a67203d8d07617bf9123d8b8768746da191c3f9f0705b525103f02cbc110c31 +size 438 diff --git a/Unity-Master/Assets/Scripts/NetworkConfig.asset.meta b/Unity-Master/Assets/Scripts/NetworkConfig.asset.meta new file mode 100644 index 0000000..c5b428b --- /dev/null +++ b/Unity-Master/Assets/Scripts/NetworkConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 48e977b8cb2ab584a81bd94b48c1b2ab +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity-Master/Assets/Scripts/NetworkConfig.cs b/Unity-Master/Assets/Scripts/NetworkConfig.cs new file mode 100644 index 0000000..46022ba --- /dev/null +++ b/Unity-Master/Assets/Scripts/NetworkConfig.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +[CreateAssetMenu(fileName = "NetworkConfig", menuName = "Config/Network Config")] +public class NetworkConfig : ScriptableObject +{ + [Header("Global Network Settings")] + public string ipAddress = "127.0.0.1"; + public int port = 8080; + + private static NetworkConfig _instance; + public static NetworkConfig Instance + { + get + { + if (_instance == null) + { + _instance = Resources.Load("NetworkConfig"); + } + return _instance; + } + } +} + + diff --git a/Unity-Master/Assets/Scripts/NetworkConfig.cs.meta b/Unity-Master/Assets/Scripts/NetworkConfig.cs.meta new file mode 100644 index 0000000..17b1294 --- /dev/null +++ b/Unity-Master/Assets/Scripts/NetworkConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2f6ca8e295dcbc4a9dece402d799c69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity-Master/Assets/Scripts/UDPAvatarBroadcaster.cs b/Unity-Master/Assets/Scripts/UDPAvatarBroadcaster.cs index 518886c..b89d605 100644 --- a/Unity-Master/Assets/Scripts/UDPAvatarBroadcaster.cs +++ b/Unity-Master/Assets/Scripts/UDPAvatarBroadcaster.cs @@ -10,6 +10,8 @@ public class UDPAvatarBroadcaster : MonoBehaviour [Header("Network Configuration")] [SerializeField] private int broadcastPort = 8080; [SerializeField] private string broadcastAddress = "10.138.6.255"; // Local network broadcast + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [SerializeField] private bool enableBroadcast = true; [Header("Avatar Configuration")] @@ -83,6 +85,16 @@ public class UDPAvatarBroadcaster : MonoBehaviour void Start() { + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + broadcastAddress = cfg.ipAddress; + broadcastPort = cfg.port; + } + } InitializeNetworking(); CacheAvatarComponents(); diff --git a/Unity-Master/Assets/Scripts/UDPAvatarReceiver.cs b/Unity-Master/Assets/Scripts/UDPAvatarReceiver.cs index 561d840..17a73aa 100644 --- a/Unity-Master/Assets/Scripts/UDPAvatarReceiver.cs +++ b/Unity-Master/Assets/Scripts/UDPAvatarReceiver.cs @@ -11,6 +11,8 @@ public class UDPAvatarReceiver : MonoBehaviour { [Header("Network Configuration")] [SerializeField] private int listenPort = 8080; + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [SerializeField] private bool enableReceiver = true; [SerializeField] private byte targetPlayerID = 2; // Which player to receive data from (0 = any) [SerializeField] private bool allowPortSharing = true; // For local testing with multiple components @@ -85,6 +87,16 @@ public class UDPAvatarReceiver : MonoBehaviour if (targetAvatarRoot == null) targetAvatarRoot = transform; + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + listenPort = cfg.port; + } + } + CacheAvatarComponents(); if (enableReceiver) diff --git a/Unity-Master/Assets/Scripts/VRExperimentController.cs b/Unity-Master/Assets/Scripts/VRExperimentController.cs index b0ff294..47a2198 100644 --- a/Unity-Master/Assets/Scripts/VRExperimentController.cs +++ b/Unity-Master/Assets/Scripts/VRExperimentController.cs @@ -18,6 +18,8 @@ public class VRExperimentController : MonoBehaviour [Header("Network Settings")] [SerializeField] private int udpPort = 1221; [SerializeField] private bool allowPortSharing = true; // For local testing with multiple components + [SerializeField] private bool useGlobalNetworkConfig = true; + [SerializeField] private NetworkConfig networkConfigAsset; [Header("Avatar Assignments")] [SerializeField] private GameObject helpfulAvatar; @@ -55,6 +57,15 @@ public class VRExperimentController : MonoBehaviour void Start() { + // Apply global config if enabled + if (useGlobalNetworkConfig) + { + var cfg = networkConfigAsset != null ? networkConfigAsset : NetworkConfig.Instance; + if (cfg != null) + { + udpPort = cfg.port; + } + } InitializeObjectMaps(); StartUDPListener();