5. Reactive Extensions for Unity
https://github.com/neuecc/UniRx/
async/await(UniTask)
async UniTask<string> DemoAsync()
{
// You can await Unity's AsyncObject
var asset = await Resources.LoadAsync<TextAsset>("foo");
// .ConfigureAwait accepts progress callback
await SceneManager.LoadSceneAsync("scene2").ConfigureAwai
// await frame-based operation(you can also await frame c
await UniTask.Delay(TimeSpan.FromSeconds(3));
// like 'yield return WaitForEndOfFrame', or Rx's Observe
await UniTask.Yield(PlayerLoopTiming.PostLateUpdate);
// You can await standard task
await Task.Run(() => 100);
// get async webrequest
async UniTask<string> GetTextAsync(UnityWebRequest req)
{
var op = await req.SendWebRequest();
return op.downloadHandler.text;
}
var task1 = GetTextAsync(UnityWebRequest.Get("http://goog
var task2 = GetTextAsync(UnityWebRequest.Get("http://bing
var task3 = GetTextAsync(UnityWebRequest.Get("http://yaho
// concurrent async-wait and get result easily by tuple s
var (google, bing, yahoo) = await UniTask.WhenAll(task1,
// You can handle timeout easily
await GetTextAsync(UnityWebRequest.Get("http://unity.com"
39. // こんなクラスがあるとして
public class Sample
{
public int Id { get; set; }
public string Name { get; set; }
public string[] Addresses { get; set; }
}
// Object作って
Sample obj = new Sample
{
Id = 10,
Name = "Foo",
Addresses = new[] { "Foo", "Bar", "Baz" }
};
// こんな感じにbyte[]に変換するというAPI
byte[] bin = MessagePackSerializer.Serialize<Sample>(obj);
40. // これを詳細にバラすと
byte[] bin = MessagePackSerializer.Serialize<Sample>(obj);
// Sampleの子シリアライザを取得し
var sampleFormatter = StandardResolver.Instance.GetFormatter<Sample>();
// resultの参照
byte[] bin = null;
// こんな風になっている(refによってbinに結果が詰まってくる)
sampleFormatter.Serialize(ref bin, 0, obj, StandardResolver.Instance);