Ini adalah plug-in asli yang membagi data tertentu ( System.IntPtr
atau array) ke dalam ukuran tertentu dan memulihkannya terlepas dari urutan inputnya. Ini ditujukan untuk kasus penggunaan seperti pengiriman data berukuran besar melalui UDP.
https://github.com/hecomi/uPacketDivision.git#upm
ke Manajer Paket.https://registry.npmjs.com
com.hecomi
Saat ini, ini hanya dibuat untuk Windows.
Buat Divider
dan panggil Divide<T>(T[])
dengan array sebagai input (atau Divide(System.IntPtr, int size)
). Ini akan membagi paket secara internal.
Divider divider = new Divider ( ) ;
void Divide ( )
{
Texture2D image ;
var pixels = image . GetPixels32 ( ) ;
divider . maxPacketSize = packetSize ;
divider . Divide ( pixels ) ;
}
Kemudian, kirimkan data yang dipisahkan ke remote dengan cara tertentu. Fungsi-fungsi berikut tersedia.
GetChunkCount()
.GetChunk()
byte[]
dari data terpisahGetChunkSize(int index)
.GetChunkData(int index)
. uOSC . uOscClient client ;
void Send ( int width , int height )
{
client . Send ( "/Size" , width , height ) ;
for ( uint i = 0 ; i < divider . GetChunkCount ( ) ; ++ i )
{
client . Send ( "/Data" , divider . GetChunk ( i ) ) ;
}
}
Jika Anda ingin menggunakan penunjuk dan ukuran secara langsung, gunakan GetChunkSize()
dan GetChunkData()
sebagai gantinya.
Gunakan Assembler
untuk mengumpulkan data yang dikirimkan kepada Anda. Berikut adalah contoh bagian penerima yang menggunakan uOSC.
Assembler assembler = new Assembler ( ) ;
Texture2D texture ;
public void OnDataReceived ( uOSC . Message message )
{
if ( message . address == "/Size" )
{
var w = ( int ) message . values [ 0 ] ;
var h = ( int ) message . values [ 1 ] ;
OnSize ( w , h ) ;
}
else if ( message . address == "/Data" )
{
var data = ( byte [ ] ) message . values [ 0 ] ;
OnData ( data ) ;
CheckEvent ( ) ;
}
}
void OnSize ( int w , int h )
{
texture = new Texture2D ( w , h ) ;
}
void OnData ( byte [ ] data )
{
assembler . timeout = timeout ;
assembler . Add ( data ) ;
}
Setiap kali Anda menambahkan data, periksa kelengkapan atau kehilangannya sebagai berikut.
void CheckEvent ( )
{
switch ( assembler . GetEventType ( ) )
{
case EventType . FrameCompleted :
{
OnDataAssembled ( assembler . GetAssembledData < Color32 > ( ) ) ;
break ;
}
case EventType . PacketLoss :
{
var type = assembler . GetLossType ( ) ;
Debug . LogWarning ( "Loss: " + type ) ;
break ;
}
default :
{
break ;
}
}
}
Jika Anda ingin mendapatkan pointer dan ukurannya alih-alih array, tersedia API berikut.
var index = assembler . GetAssembledFrameIndex ( ) ;
var data = assembler . GetFrameData ( index ) ;
var size = assembler . GetFrameSize ( index ) ;
OnDataAssembled ( data , ( int ) size ) ;
assembler . RemoveFrame ( index ) ;
Kemudian akan dilakukan rekonstruksi data sebagai berikut.
void OnDataAssembled ( Color32 [ ] pixels )
{
texture . SetPixels32 ( pixels ) ;
texture . Apply ( ) ;
GetComponent < Renderer > ( ) . material . mainTexture = texture ;
}