サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
掃除・片付け
qiita.com/toRisouP
前提 「R3」とは、ReactiveExtensionsの最新の環境のC#に合わせて再構築したライブラリです。Unityでは「UniRx」というライブラリがありましたが、大雑把にいえば「UniRxを最新の環境にあわせてリメイク」したものという認識でよいでしょう。 詳しくは別記事でまとめてあります。 次世代Rx「R3」解説 またこの記事執筆時点での環境は次のとおりです。 Unity - 2023.1.14f1 R3 - 1.0.0 ObservableCollections - 2.0.1 NuGetForUnity - 4.0.2 今回の概要 「UniRx」と「R3」の機能の比較、R3での新機能や廃止された機能、UniRxからR3に置き換えるときの代替などについて紹介します。(細かい部分まですべては拾いきれないので、紹介漏れはご容赦ください。またUnity向けでない機能などは省略しています
今回の内容 C#向けの新しいReactiveExtensions(Rx)ライブラリ「R3」について、従来のRxとの変更点を紹介します。 R3について リポジトリ R3 開発元はUniTaskやMagicOnionなどを公開しているCysharp社であり、メインの開発者はUniRxの作者でもあるneuecc氏です。 どんなライブラリか 「R3」はReactiveExtensions(Rx)を現代に合わせてより洗練した形に再定義/再実装した、C#用のライブラリです。 というのも、Rxは10年以上前に登場した概念であり、当時はまだ非同期処理に対するベストプラクティスが模索されていたタイミングでした。 そのためRxは「LINQをEventにも適用できる」という側面も持ちつつ「非同期処理にも用いることができる」という2つの側面をもった、少しややこしいライブラリとして登場しました。 そして2024年現
今回の話 「Visitorパターン」を使ってswitch文やif文での型分岐を置き換えてみよう、という話です。C#で書いてます。 (サンプルコードはだいぶ端折ってるのであまり突っつかないで下さい) switchやif文のどこが良くないのか 「型の判定によって処理を分岐する」という実装をswitchやifで作ってしまうと、後から構造を変更した際などに問題が起きる可能性があります。 (そもそもオープンクローズド原則違反になってしまう) たとえば「型をみてデータ構造を変換する」といった場合はこの問題を踏みやすいです。 例:データ構造を1:1変換する 「RPGのキャラクター(ジョブ)」という概念があったとしましょう。 これは基底クラスであり、派生先にいくつかのジョブがあってそれぞれで独自のパラメータを保持しています。 /// キャラクターの抽象クラス public abstract class C
はじめに C#におけるasync/awaitを使う上で、絶対に意識しないといけないものは「キャンセル処理」です。 正しく処理をキャンセルしないとメモリリークを起こしたり、デッドロックやデータ不整合を引き起こす可能性があります。 今回はこの「async/awaitにおけるキャンセル処理」について話します。 対象 C#におけるasync/await全般 Task/ValueTask/UniTaskすべてに共通します Unity含む C#のasyc/awaitについてイマイチ自信が持ててない人 先に「結論」 asyncメソッドはCancellationTokenを引数に取るべき await対象が引数にCancellationTokenを要求する場合は省略せずに渡すべき OperationCanceledExceptionの取り扱いを意識するべき 解説 そもそも「キャンセル」とは何を指すのか そも
はじめに このたび、独習C# 第5版を著者の山田祥寛さんよりご献本いただきました。 今回はこちらの書籍についてレビューをしていきます。 書籍について 独習C# 第5版はタイトルのとおり、C#について解説されている技術書です。 C#の基礎となる.NET環境の解説からはじまり、基礎的な概念、制御構文、標準ライブラリ、踏み込んだ上級者向けの機能と網羅的に解説しています。 また最新のC# 10にも対応しており、C#7以降に登場した機能については目次や章題にそのことが明記してあります。 このためすでにC#についてある程度触れている方が、最新のC#に追いつくための学習資料として使うこともできるようになっています。 この書籍の特徴 C#の言語機能について網羅して解説している 2022年時点で最新のC# 10の機能にも対応 C# 7以降に登場した機能については目次や章題で把握できるようになっている 各章の
はじめに 今回はUnityにおける「Model-View-(Reactive)Presenterパターン」とは何なのかについて解説します。 対象読者 Unity開発者 UniRxを使うことができる UnityにおけるGUI周りの実装に困っている GUI周りの設計パターン Model-View-(Reactive)Presenterパターン(略してMV(R)Pパターン)とは、UnityにおけるGUI周りの設計パターンの一種です。 「GUI」とはいわゆる「ユーザインターフェース」のことで、ゲーム中における「画面上に表示される情報」や「メニュー」や「ボタン」といったものを指します。 (ざっくりいえば、uGUIのことだと思って下さい) GUI周りの実装手法というものはUnityに限らず、複雑になりがちな難しい部分です。 そのためいろいろな設計パターンが考案されてきました。 代表的なもので言えばMV
はじめに 私が「UniRx入門」という記事を書き始めてから5年、最後に投稿してから4年が経過してしまいました。 記事を更新していなかったこの数年間で、UniRxを取り巻く環境が大きく変わってしまいました。 UniRxというライブラリ自体に特に大きな更新はないのですが、UnityのC#バージョンがアップデートされたり、UniRxよりも便利なライブラリが登場したりしました。 今回は2022年現在のUnityにおけるUniRxの立ち位置と、その使い方について解説します。 UniRxの立ち位置 現代のUniRxの状況 2017年頃の古いバージョンのUnityにおいては.NET 3.5相当のかなり貧弱なC#しか用いることができませんでした。 非同期処理にasync/awaitすら使えず、「コルーチン」で書くか「UniRx」で書くかという状況でした。 そのため、時間が関係した処理はコルーチンかUniR
はじめに C#も2021年現在ではC# 10.0が登場し、古いC#とは比べ物にならないほど様々な機能が追加され、ますます便利になってきました。 その中でも個人的にイチオシの機能が「パターンマッチング」です。 この機能のおかげでめちゃくちゃ実装が捗るようになったので今回はこちらを紹介します。 また、パターンマッチングと直接の関係はありませんが、「タプル(ValueTuple)」という機能もC#にはあります。ValueTupleは自分で定義した型に対してパターンマッチングを利用する際に使うことがあるので、ついでにこちらも紹介します。 タプル(ValueTuple)(C# 7.0~) タプルとは「複数のデータを一時的に扱う」ときに生成されるオブジェクトです。 すごく簡単にいうと、使い捨て用途のクラス/構造体の定義を極限まで簡単にしたものです。 タプルという概念自体はC#6以前からも存在し、.NE
この記事について 古い記事のPVが未だにそれなりにあるので、2021年現在のやり方で書き直してみました。 やりたいこと 「スクリプトの実行タイミングを操作したい」です。 つまり一定時間後に指定した処理を実行するといった処理をどう書くか紹介します。 標準機能のみで書く場合 外部ライブラリを用いず、UnityやC#の機能のみで記述する場合のやり方。 処理をN秒後に実行したい Invokeを使う MonoBehaviour.Invoke()メソッドを使うことで指定した処理を一定秒数後に呼び出すことができます。 引数には対象のメソッド名を指定します(nameofで指定すると便利) 実行をキャンセルする場合はCancelInvoke()を使います。 using UnityEngine; public class Sample : MonoBehaviour { private void Start(
レベル-1 : C#の文法がわかってない まず根本として「C#の文法がわかっていない」がレベル-1として存在すると考えます。 つまり「UnityのAPI」と「C#の言語機能」の区別がついていない状態です。 この状態では設計の話をするよりも、まずC#の学習をするのが先になります。 レベル-1を脱出するためには まずC#の言語機能を抑えよう MonoBehaviourを使わないクラス定義のやり方を覚える 今使っている機能がUnityAPIなのかどうかの区別をつける レベル0 : 設計なし レベル0は「設計なし」という状態です。 後先考えず、MonoBehaviourを継承した上で手当たり次第に実装を行っている状態です。 「プロトタイピングレベルの超小規模・超短期間な開発」であればこのやり方でも上手くいくかもしれませんが、「ユーザリリースを前提とした開発」では推奨しません。 この状態で1週間も開
UniRxには「Debug」という便利なオペレータが存在します。 これは「Observable上で起きたすべてのイベントをログに出力する」というオペレータです。 どの値が発行されたか 何の例外が起きたか どのタイミングでSubscribe()されたか どのタイミングで購読が中断されたか などをこのオペレータ1つですべて知ることができます。 定義 定義としてはこうなってます。 // copy from https://github.com/neuecc/UniRx/blob/master/Assets/Plugins/UniRx/Scripts/UnityEngineBridge/Diagnostics/ObservableDebugExtensions.cs public static IObservable<T> Debug<T>(this IObservable<T> source,
はじめに この記事はVRChatにおけるUdonおよびUdonSharp(U#)を使った際の備忘録です。 これからUdonを使い始める人のために書き連ねておきます。 この記事は2020/5/26現在のVRChatを前提に書いています。 Udonとパフォーマンスチューニング Udonは実質、UnityのAPIをラップして呼び出しているだけにすぎません。 そのためUnityでプログラミングをするときと同じ様にパフォーマンスにもこだわる必要があります。 プロファイラを見よう Unityには標準でProfilerという機能が備わっています。 1フレーム単位でどのような処理が実行され、それにどれくらいの時間がかかっているかをチェックすることができます。 詳しい使い方はこちらを参考にしてください。 Profiler ウィンドウ 【Unity】CPUプロファイラでパフォーマンスを改善する 前編 【Uni
他の資料 C# Tokyo オンライン「Unity 祭り」で登壇した資料も追加しておきます。あわせて御覧ください。 UniTaskの使い方2020(スライド) 発表動画(YouTube) UniTask2 UniTaskが大きくアップデートされて、Ver2となりました! 今回はその変更点についてまとめてみました。 ※ Ver.2.0.25準拠で書いています。 破壊的変更 まずは1系からの破壊的変更。導入時に気をつける必要があるところです。 必要な最低Unityバージョン 2018.4.13f1 が最低サポートバージョンとなりました。 名前空間の変更 名前空間がUniRx.AsyncからCysharp.Threading.Tasksに変更されました。 もともとUniRxのライブラリの一部だった名残なのですが、今回のアップデートで完全に名残がなくなりました。 UniTaskのawait2度漬け
【超初心者向け】Unityのプロジェクトを、GitHub for Unityを使って超簡単にバックアップする方法 この記事の目的 「Gitって何」というレベルの人が、とりあえずGitを使ってUnityプロジェクトをローカルでバックアップできるようになる 想定としては非プログラマ(デザイナーとか、VRChatユーザとか) 想定ユーザは1人だけで、チーム開発ではない ここでいう「バックアップ」は次のことができる 今のUnityプロジェクトの状態を保存できる 操作をミスってぶっ壊したときに、直前のプロジェクトの状態に戻せる PC自体がぶっ壊れた!みたいな状況には対応していません(後述するサーバ保存などを併用しましょう) Gitの「むずかしい」機能は使わない ブランチ操作などはしない GitHub for Unity って名前のプラグインだけど、別に「GitHub」は使わなくても大丈夫です 今回使
この記事について この記事ではC#の「ラムダ式」についてなんとなくわかったつもりになれるを目標に説明をします。 そのため多少端折ってたり、厳密じゃない説明もでてきます。ご了承ください。 もし厳密な解説を知りたい方は、次の記事がオススメです。 【LINQの前に】ラムダ式?デリゲート?Func?な人へのまとめ【知ってほしい】 この記事で出てくる用語 ラムダ式 デリゲート Action Action<T> Func<TResult> Func<T, TResult> はじめに ラムダ式って何 C#に限らず、プログラミングをしていると「ラムダ式」という用語を耳にすることがあります。 果たしてこの「ラムダ式」とは何をするためのもので、あるとどうして嬉しいのか、それぞれ解説していきます。 「その場で」関数を書ける機能がラムダ式 「ラムダ式」という名前からしてかなりいかつい印象をうける人もいるでしょう。
【Unity】Time.deltaTimeの正しい使い方わかってる?適当に掛ければいいてもんじゃない! Time.deltaTime、正しく使えていますか? UnityにはTime.deltaTimeというプロパティが存在します。 このプロパティを計算式に掛けることで、「スペックによらずある処理の速度が一定になる」と思っている人もいるでしょう。 実際にWebを検索すると、「フレームレートが一定でないので、Time.deltaTimeを掛けないといけない」という説明が多く出てきます。 このプロパティは本当にそういう性質のものなのか。 なぜ掛けることで処理が安定するのか。 その意味をしっかり把握して、必要な場所で正しく使うようにしましょう。 そもそもTime.deltaTimeの意味とは Time.deltaTimeは単に 直前のフレームと今のフレーム間で経過した時間[秒] を返すプロパティで
はじめに 毎年恒例のグローバルゲームジャム。今回も参加してきたのでそのまとめを書きます。 2016 -> グローバルゲームジャムでクラス設計をやったらスムーズに開発が進んだ話 2017 -> グローバルゲームジャムでクラス設計をやった話2017 2019 -> グローバルゲームジャムでクラス設計をやった話2019 グローバルゲームジャムとは GGJとは全世界同時に行われるゲームジャムのことです。ようするに、世界規模のゲーム開発ハッカソンです。 プログラマ、デザイナ、プランナ、グラフィッカなどさまざまな役職の人をごちゃまぜに、3~8人程度のチームを組み、48時間でゲームを作ろうというイベントです。(前回のコピペ)(前回のコピペ)(前回のコピペ) 今回も「ヒューマンアカデミー秋葉原会場」に参加しました。 ゲームの概要 今年のテーマ 今年のテーマは「REPAIR」でした。シンプルにわかりやすいテ
はじめに 何番煎じなのかわかりませんが、過去にいろいろ解説した記事へのリンクをまとめる意味も込めて解説します。 UniRxとは おすすめ資料 UniRx入門シリーズ 目次 UniRx オペレータ一覧 UniRx オペレータ逆引き ReactiveCommand/AsyncReactiveCommandについて ObserverパターンからはじめるUniRx Observable の非同期処理への活用 概要 UniRx - GitHub UniRxとは、Reactive ExtensionsをUnity向けの実装したC#ライブラリです。 かなり昔のバージョンのUnityでも扱うことができます。 導入することで、Unityにおいて次のような処理の実装が簡単になります。 非同期処理 何らかの処理の完了を待ち受けて次の処理を行うような処理の管理 エラーハンドリングやリトライ処理の簡略化 実行結果の
はじめに この記事におけるソースコードはすべて Public Domain です。 また本記事において利用しているUnityバージョンは2019.2です。 Assembly Definitionとは何か Assembly Definitionという機能をご存知でしょうか。 これは「C#のビルドファイル(アセンブリ)を分割して出力する」ことができる機能であり、Unity 2017.3で追加されました。 特にライブラリやC#アセットを公開することがある人は絶対に覚えておくべき機能です。 「Assembly Definitionよくわからん」という状態でもプログラムは一応作成できますが、プロならば絶対に覚えておくべき機能です。 なお、Assembly Definition自体はUnityの機能の名前です。 実際にこの機能を有効化するためにユーザが定義するファイルのことをAssembly Defi
サイドパネルとは テレビ放送などで画面の左右に表示される黒帯(ピラーボックス)のことです。今回はこのサイドパネルみたいなUIをuGUIで設定する方法を解説します。 (画面の左右に帯を出してそこにUIを表示するこの画面の作り方を紹介します) やり方 1.Canvasを設定する Canvasをシーン上に新しく作成し、[Canvas Scaler]の[UI Scale Mode]を Scale With Screen Size に設定します。 また、Rederense Resolutionも設定しCanvas上の基準となるピクセル数を決定します。(今回は1920x1080に設定) 2.空のGameObjectをCanvas上に作成 名前は適当に「MainPanle」にしておきます。 作成したらRect Transformを調整して画面全体にフィットするサイズに変更します。 3. MainPane
はじめに 今回はグローバルゲームジャム2019で用いた、開発のコツやUnityのテクニックについてまとめます。 設計についての話はこちらを参照。 グローバルゲームジャムでクラス設計をやった話2019 どんなに手間でもSceneは別けよう たとえ手間でも、「タイトルシーン」と「ゲーム本編のシーン」は分離して作った方が楽です。 理由としては次のとおり。 UIがメインとなるタイトルを別シーンに切り出すことで、分業しやすくなる ゲームの初期化が簡単にできる (最悪、ゲーム本編のシーンのみを再ロードすればScene初期化が完了する) ゲームジャムのゲームをみていると、「初期化が作れなかったので、1回ゲームを遊ぶたびに再起動しないとだめです」といった作品をたまにみます。 Sceneを分割しておくと、同じSceneをリロードするだけで初期化ができるのでオススメです。 簡単なScene遷移機構 Scene
はじめに 去年はお休みしましたが、今年もゲームジャムに参加してきたのでそのまとめを書きます。 過去の資料はこちら。 グローバルゲームジャムでクラス設計をやったらスムーズに開発が進んだ話 グローバルゲームジャムでクラス設計をやった話2017 グローバルゲームジャムとは GGJとは全世界同時に行われるゲームジャムのことです。要する、世界規模のゲーム開発ハッカソンです. プログラマ、デザイナ、プランナ、グラフィッカなど様々な役職の人をごちゃまぜに、3~8人程度のチームを組み、48時間でゲームを1つ作ろうというイベントです。(前回のコピペ)(前回のコピペ) 今回は「ヒューマンアカデミー秋葉原会場」に参加しました。 今年の概要 今年のテーマ 今年のテーマは「WHAT HOME MEANS TO YOU」でした。要約すると「あなたにとってのHOMEとは何か」ですね。 作ったゲーム 作ったゲームは「Ps
今回の内容について 本記事はUnityAdventCalendar3の記事です。 Unityでチーム開発を行う上で、プルリクではこういう点を自分は見るよというのをまとめたものです。 あくまで執筆者はこういう点をレビューしている or レビューを他人にお願いするときにこのあたりをチェックすること期待しているよ、という内容です。人によって主義主張は違うかと思うので、強烈なマサカリはご遠慮ください。 また、使用言語や人数、プロジェクト規模によって適切なレビュー体制というものは異なります。 この記事は「Unity C#開発で、プログラマ以外も含め多くの人間が開発に参加しており、中長期的(数年に渡り)保守運用する必要があるプロジェクト」をターゲットにして書いています。 全体を通して 要件を満たしているか 要件とは、いま開発しようとしているものが満たすべき条件のこと。 要件を正しく認識し、作られた機能
UniTaskとは UniTaskとはUnity向けに最適化されたTask実装を提供するライブラリです。 もとはUniRxに組み込まれていましたが途中で分離し、独立した1つのライブラリとして提供されるようになりました。 もっと詳しい資料 UniTask入門 導入 C# 7系の機能に依存しているため、UniTaskを利用する場合はUnity 2018.3以降を推奨します。 導入はGitHubからパッケージをダウンロードし、Unityに取り込むだけでOKです。 UniTask UniTaskの機能紹介 Taskより軽量な「UniTask」 UniTaskでは、非同期処理をUniTaskというクラスで扱えるようにしています。 これはTaskをUnityに最適化する形で実装された非同期処理機構です。 (中身はValueTaskに近いです) Taskの実装を見てもらうとわかると思うのですが、Task
はじめに 最近、Zenjectについて導入を検討する人が増えてきました。今回はそのZenjectがそもそも何のためのライブラリなのかを解説します。 Zenjectとは 「Zenject Dependency Injection IOC」は依存性の注入のためのフレームワークと言われています。 よくある勘違い Zenjectを導入すると、次のようなことができるようになると思っている人が多いですが、それは間違いです。 Zenjectを入れると疎結合になる! Zenjectを入れるとテストが書きやすくなる! 何かよくわからないけど入れるとプログラムが書きやすくなる! 繰り返しますが、上記の認識は間違いです。 Zenjectの正しい説明 Zenjectは疎結合な設計やテストを書きやすくするためのライブラリではありません。 順序が逆で、疎結合やテストのことを考えて設計したときに発生してしまう問題を解決
はじめに 2018年4月に、ドワンゴが「VRM」という新しい3Dアバターフォーマットを公開しました。 今回はこのVRMをUnity上で利用する方法についてのメモ書きです。 (随時追加します。) なお、この記事は「VRMファイルをUnity上でどう扱うか」についての記事です。 3DモデルをVRMファイルに変換する話はしません。 一緒にみると良いかもしれない資料 ARでVRアバターを表示するシステムを構築しよう(ニコナレ) AR_VR_Viewer(github) 以前作った、VRのアバターをARで操作するシステム(twitter)について解説した資料です。 この資料でも触れているVRMについての情報をこの記事は含んでいます。 使い方メモ 0.UniVRMの各種使い方など まずは公式ドキュメントを読みましょう。 下の方にBlendShape(表情変更)のやり方についての説明とかあります。 1.
はじめに Unity 2018からついに.NET 4.6がstableになり、async/awaitを使いこなせるようになっておく必要がでてきました。 今回は個人的な練習として、Unityのコルーチンをasync/awaitで待機できるようにしてみました。 そのまえに:UniRxを導入すれば全部できるよ 実はこれから紹介するような実装をわざわざする必要はありません。 UniRxを導入すればいい感じにコルーチンやAsyncOperationをawaitできるようになります。 参考:.NET 4.6時代のUnityでUniRx using System; using System.Collections; using UnityEngine; using UniRx; class LoadTextureTest : MonoBehaviour { async void Start() { va
はじめに Unity 2018から.NET 4.6がstableになり、async/awaitやTask使いこなせるようになっておく必要がでてきました。 今回はそれらの裏に隠れている、SynchronizationContextという機構とその使い方について紹介します。 なお、この記事はUnity2018.1bを基準に書いています。 SynchronizationContextとは何なのか SynchronizationContextとは、ざっくり説明すると「指定した処理を指定したスレッドで実行するために用いるオブジェクト」です。 非同期処理を実行する場合、あるスレッドから別スレッドに処理を移譲することになります。 このとき、「非同期処理が終わったときに元のスレッドに処理を戻す」という需要が発生します。 これを解決するのがSynchronizationContextというオブジェクトです。
はじめに Unity 2018.1でついに .NET 4.6バージョン がstableとなり、今までの.NETバージョンがLegacy扱いとなりました。 そこで、 .NET 4.6バージョン(C#6.0)でUniRxがどうなるのかを解説します。 Observableのawaitができるようになる 大きな特徴として、Task同様にObservableのawaitができるようになります。 今まではObservableを同期的に待とうとするとコルーチンを使わざるを得ませんでしが、今後は直接awaitすれOKになります。 なお、awaitを終わる条件はOnCompletedが発行されることなので、無限長のObservableを待ち受けるにはTake(1)やFirst()を入れてOnCompletedを発行させる必要があります。 単にawaitする例 class AsynTest2 : MonoBe
次のページ
このページを最初にブックマークしてみませんか?
『@toRisouPのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く