12/31日「コミックマーケット103」で、サークルスペースを頂くことができました。 本日無事に新刊の入稿が完了しました。
続きを読む【Unity】UniTaskで直列処理をする場合
複雑な非同期処理を行うときに色々考えたことをメモ代わりに書いていきたいと思います。
直接処理
単純にawaitを処理順に並べると、順番に対象の処理を行います。
private async UniTaskVoid Start() { await Method1Async(); await Method2Async(); } private async UniTask Method1Async() { // ここにtask1の処理を書く await UniTask.Delay(1000); // 例として1秒待つ処理を書く } private async UniTask Method2Async() { // ここにtask2の処理を書く await UniTask.Delay(2000); // 例として2秒待つ処理を書く }
Concatwithを使う
await Method1Async().ContinueWith(async _ => await Method2Async());
UniTask
OpenUPMを使ってみる
ネットで検索すればOpenUPMについていくつか記事が出ているのですが、 最近、自分でもOpenUPMを使って設定する機会があったので、ブログにまとめていきたいと思います。
続きを読む【C102】サークル「albatrus」にお越しいただきありがとうございました!
本日、東京ビッグサイトで開催されたコミックマーケット102・西-あ05b「albatrus」にお越しいただき、ありがとうございました。 今日は曇りや雨で天候が不安定でしたが、無事にサークル参加ができました。 albatrus.com
壁サークル
人生で2回目の壁サークルでした。 壁サークルの利点は、後ろに物をたくさん置けることと、壁にポスターを貼ることができることです。 今回はB1サイズのポスターを作成しましたが、壁に貼ると少し遠く感じる微妙な大きさでしたので、専用のポスター立てを使用しました。 壁サークルの場合、A1サイズ以上の方が良さそうです。
本
「Unityエフェクト本」を書きました。
配布結果
今回は20部を印刷しました。 開場が10:30分でしたが、最初の45分間はサークルエリア付近にほとんど人が来ず、不安でしたが、 その後たくさんの方に手に取っていただき、おおよそ12:30頃に全て配布することができました。 お手に取っていただいた皆様、ありがとうございました。
感想
いつも私のサークルは技術書関連で配置されているのですが、サークル参加を始めてから、明らかにソフトウェア系(Unityを含む)のサークルが減ったように感じました。むしろハードウェア系のサークルが多く、ソフトウェア系のサークルは技術書典など別のイベントに参加しているのではないかと話していました。 私はコミケに参加したいという思いで出ていますが、おそらく他のイベントだとわざわざ高い費用を払って同人誌を作らないだろうと思っています。
次回は年末に参加(申し込み)予定です。 ネタはあるのですが、モチベーションが続くかどうか、また大晦日なので、どうしようか。
【Unity】ParticleSystemのRingBufferModeについて
ParticleSystemのMainモジュールにあるRingBufferModeについての記事になります。
RingBufferModeとは
RingBufferModeでは、パーティクルシステムが新しいパーティクルを生成する際に、古いパーティクルをどのように扱うかを決定します。 次の3つのモード設定ができます。
- Disabled
- Pause Until Replaced
- Loop Until Replaced
次に掲載する動画の環境です。
- Duration : 10
- StartLifetime : 1
- MaxParticles : 10
Color over Lifetimeは次のようにしています。
Disabled
これがデフォルトの設定です。
動画
Pause Until Replaced
リングバッファモードが有効化されます。パーティクルシステムは最大パーティクル数に達したとき、新しいパーティクルを生成するために最も古いパーティクルを一時停止し、置き換えます。 これにより、パーティクルの総数が一定に保たれ、連続的なパーティクルの生成が可能になります。
動画
MaxParticlesの数までパーティクルが生存しています。 生存中のパーティクルは停止しています。
Loop Until Replaced
パーティクルシステムは最大パーティクル数に達したとき、最も古いパーティクルをリサイクルして新しいパーティクルを生成します。 これにより、パーティクルの総数が一定に保たれ、連続的なパーティクルの生成が可能になります。
- Loop Range MaxParticlesに到達するまでにループするLifetimeの割合を設定できます。 例えば0(Min) 0.5(Max)と設定した場合、待機中パーティクルはlifetimeで設定されている0 ~ 0.5の割合をループして再生されます。
動画
MaxParticlesの数までパーティクルが生存しています。 生存中のパーティクルはLoop Rangeで設定された生存期間をループしています。
【Unity】UniTaskのキャンセル時の実装を調べてみた
UniTask.WaitWhileのキャンセル処理時の実装をしなくてはいけなくて調べてみました。
キャンセル処理
タイムアウトやキャンセルされる場合、OperationCanceledExceptionが発生する可能性があります。この例外を適切に処理するには、try-catch構文を使用する必要があります。 今回は、ボタンが押されるまで待機をしたい処理でしたので、次のような感じの実装ができそうです。
try { await UniTask.WaitWhile(() => true, cancellationToken: cancellationToken); } catch (OperationCanceledException) { // キャンセル処理 }
【Unity】ParticleSystemのLifetime by Emitter Speedモジュールについて
Lifetime by Emitter Speed
UnityのParticleSystemもモジュールの一つで、移動するオブジェクトの速度から発生するパーティクルの寿命を調整することができます。
Lifetime by Emitter Speedの設定項目は次の2つです。
Multiplier(マルチプライアー)
パーティクルの初期寿命に適用する乗数です。
Speed Range
寿命のスケーリングが適用される速度の範囲を定義します。最小値と最大値で指定します
挙動
今回の例では、Speedの最小値では1.0が乗算され、最大値では0.0乗算されます。 オブジェクトが停止している時はパーティクルの寿命はそのままで、スピードが上がるごとに寿命が短くなります
注意点はパーティクルの速度ではなく、ParticleSystemのGameObjectの移動速度に応じて挙動が変わることです。 マニアックな機能ですが、何か使えそうな表現もあるかもしれません。