ui搭建完成

This commit is contained in:
2026-05-14 21:25:42 +08:00
parent 5ec09c2ad3
commit d2235bf7b7
13 changed files with 12675 additions and 9161 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 11ac2a591441d5940b0b146f6dd3025e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 92d5b3b398289344db69a70f3830a8e4
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -16,13 +16,12 @@ namespace Unity.RenderStreaming
/// 2. 在Inspector中关联各字段
/// 3. participantVideoContainer 需要挂载 GridLayoutGroup 或 VerticalLayoutGroup
/// </summary>
[RequireComponent(typeof(HostConnection))]
public class MultiParticipantHostSample : MonoBehaviour
public class MultiParticipantHost : MonoBehaviour
{
#pragma warning disable 0649
[Header("核心组件")]
[SerializeField] private SignalingManager renderStreaming;
[SerializeField] private HostConnection hostConnection;
private SignalingManager renderStreaming;
private HostConnection hostConnection;
[Header("Host本地视频")]
[SerializeField] private VideoStreamSender videoStreamSender;
@@ -41,9 +40,7 @@ namespace Unity.RenderStreaming
[SerializeField] private Dropdown webcamSelectDropdown;
[SerializeField] private Dropdown microphoneSelectDropdown;
#pragma warning restore 0649
private string connectionId;
private RenderStreamingSettings settings;
/// <summary>
@@ -60,6 +57,8 @@ namespace Unity.RenderStreaming
void Awake()
{
renderStreaming=GameObject.FindObjectOfType<SignalingManager>();
hostConnection=GameObject.FindObjectOfType<HostConnection>();
startButton.interactable = true;
// 初始化UI
setUpButton.interactable = true;
@@ -76,7 +75,7 @@ namespace Unity.RenderStreaming
});
setUpButton.onClick.AddListener(SetUp);
hangUpButton.onClick.AddListener(HangUp);
connectionIdInput.onValueChanged.AddListener(input => connectionId = input);
connectionIdInput.onValueChanged.AddListener(input => hostConnection.RoomConnectionId = input);
connectionIdInput.text = $"{Random.Range(0, 99999):D5}";
// 本地视频Sender启动后显示
@@ -130,12 +129,12 @@ namespace Unity.RenderStreaming
if (settings != null)
videoStreamSender.SetCodec(settings.SenderVideoCodec);
hostConnection.CreateConnection(connectionId);
hostConnection.CreateConnection(hostConnection.RoomConnectionId);
}
private void HangUp()
{
hostConnection.DeleteConnection(connectionId);
hostConnection.DeleteConnection(hostConnection.RoomConnectionId);
// 清理所有Participant UI
foreach (var ui in participantUIs.Values)

View File

@@ -11,7 +11,7 @@ namespace Unity.RenderStreaming
{
public class MessageChannel : DataChannelBase
{
public event Action<string, UserInfo> OnMessageReceived;
public event Action<string, UserInfo> OnUserInfoMessageReceived;
public event Action<string, MediaStateChange> OnMediaStateChangeReceived;
[Header("消息记录")] [SerializeField, TextArea(1, 3)]
@@ -41,7 +41,8 @@ namespace Unity.RenderStreaming
{
record = new MessageRecord { type = "raw", data = message };
}
record.timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
ConnectionId=record.connectionId;
JObject json = null;
switch (record.type)
{
@@ -51,7 +52,7 @@ namespace Unity.RenderStreaming
case MessageTypes.UserInfo:
json = record.data as JObject;
var info = json.ToObject<UserInfo>();
OnMessageReceived?.Invoke(ConnectionId, info);
OnUserInfoMessageReceived?.Invoke(ConnectionId, info);
break;
case MessageTypes.MediaStateChange:
json = record.data as JObject;
@@ -112,6 +113,8 @@ namespace Unity.RenderStreaming
public object data;
public bool isSent;
public string timestamp = DateTime.Now.ToString();
public string connectionId;
public string participantId;
}
}
}

View File

@@ -49,7 +49,7 @@ TextureImporter:
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteBorder: {x: 61, y: 45, z: 58, w: 61}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
@@ -126,7 +126,7 @@ TextureImporter:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
internalID: 1537655665
vertices: []
indices:
edges: []

View File

@@ -49,7 +49,7 @@ TextureImporter:
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteBorder: {x: 50, y: 50, z: 50, w: 50}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
@@ -126,7 +126,7 @@ TextureImporter:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
internalID: 1537655665
vertices: []
indices:
edges: []

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View File

@@ -0,0 +1,140 @@
fileFormatVersion: 2
guid: 1f7bdf7736eea4e46904736d5d7b955a
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 270, y: 320, z: 270, w: 200}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 1537655665
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -49,6 +49,11 @@ namespace Unity.RenderStreaming
/// </summary>
private string roomConnectionId;
public string RoomConnectionId
{
get { return roomConnectionId; }
set { roomConnectionId = value; }
}
/// <summary>
/// 每个Participant的独立Receiverkey=participantId
/// VideoStreamReceiver/AudioStreamReceiver内部只持有一个transceiver
@@ -323,7 +328,9 @@ namespace Unity.RenderStreaming
/// </summary>
public void OnMessage(SignalingEventData eventData)
{
// eventData.
Debug.Log($"[HostConnection] Message from: {eventData.connectionId}, participantId: {eventData.participantId}, message: {eventData.message}");
foreach (var channel in streams.OfType<DataChannelBase>().Where(c => c.Label=="on-message"))
{
if (channel != null)