いんでぃーづ

ゲームいろいろ、いろいろ自由

C#

Unity : 衝突検出したら他のスクリプトに通知する汎用コンポーネント

MonoBehaviour による衝突検出をおこなうにはCollider をつけたオブジェクトに直接スクリプトをアタッチする必要があるので、検出したあと他のスクリプトで処理を行いたい場合は一工夫おこなう必要がある。 イベントごとにそれぞれ別な処理を都度作るのはめ…

Unity Editor : Texture2D を png 形式で保存してアセットとしてインポートする

Texture2D で動的に生成したテクスチャを png 形式で保存、その後すぐアセットとしてスクリプトで扱いたい場合が結構あるのですが、クラスやメソッドによってパスの扱い方に差があったりして結構めんどうなのでスニペットを置いておきます。

C# : 文字列からEnum値に変換する

エディタスクリプトとかで、文字列をパースしてEnumとして取りたい場合があったので。 以下のようなEnumが定義されている場合 enum TestEnum { Unity, Test, Fakku }

Unity : 配列の要素を Random.Range で取得するときに最後の要素だけなぜか出てこない

うっかりやってしまったのでおさらい... Transform[] TransformList; TransformList[Random.Range(0, TransformList.Length - 1)]; みたいに Length - 1 をつかってランダム値を取得しようとするとちゃんと取得できませんよって話。 基本的な仕様の理解 Unit…

Unity : エディタ拡張スクリプトでプロジェクト内にフォルダを作成する

エディタ拡張で、ある命名規則で自動でフォルダ作ったりする場合にどうするか調べました。

Unity : インスペクタに表示させたボタンから任意の関数を実行する

下のようなかんじでインスペクタにボタンを表示させ、 押したときに MonoBehaviour の任意の関数を実行させる。

Unity : シーン編集中にAnimator付き3Dモデルにポーズをとらせる

シーン内にオブジェクトを配置している際、人物モデルのAnimatorに設定してあるアニメーションのポーズをとらせたかったのに方法がわからなかったので、 スクリプトで強引に解決した。

Unity : スクリプトを重複して付けてしまうのを防止する

デフォルトではGameObjectに同じスクリプトを2個以上つけてもなんの問題もなく動いてしまうので、 非常に見つけづらいバグのもとになってしまいます。

Unity : スクリプトに必要なコンポーネントを自動でつける

コライダーなどのコンポーネントがついていることを前提としたスクリプトを書いた時、 GameObjectやプレハブにスクリプトをつけるときに必要なコンポーネントを全部手作業でつけたりしていませんか? そんなとき、スクリプトと同時にUnityが自動でコンポーネ…

Unity : Randomを使うとエラーが出る場合の解決方法

C#

Random.Range 関数でランダム値を取得しようとすると以下のようなエラーが出る場合があります。 error CS0104: 'Random' is an ambiguous reference between 'UnityEngine.Random' and 'System.Random' error CS0104: 'Random' is an ambiguous reference be…

Unity : スリープしないようにする

C#

最近ぜんぜんブログ更新できなかったのですがリハビリがてら Screen.sleepTimeout = SleepTimeout.NeverSleep; NeverSleep でスリープしない SystemSetting でシステムで設定されている時間でスリープ いじょう Screen-sleepTimeout - Unity スクリプトリフ…

Unity ECS : Jobで攻撃の総当たり判定を行うときのテンプレっぽいもの

現在ECSでRTS(タワーディフェンス)を作っているのですが、攻撃の当たり判定と敵の当たり判定を総当たりで判定するのにちょっと手間取ったのでメモ。

Unity ECS : メッシュ表示と物理挙動が有効なWorldを自作する

ECSを使うならWorldは自作すべきと言い切れます。 なんでかというと、ずっとAndroidゲームの起動時間が最低でも5秒くらいかかっていて短縮するためにいろいろ試していたのですが、 結局ECSの デフォルトワールドを無効にしただけで1秒で起動するように な…

Unity ECS : JobComponentSystem が not run になる場合はEntityの状態を確認しよう

JobComponentSystem を使っているときに、OnUpdateが一回だけ呼ばれて以降のループが止まる という現象に悩まされたのですが、どうも仕様っぽい動作だったのでメモ。 not run になっている

Unity : ECSのTransform関係の仕様を理解するためのリファレンス

ECSのリファレンスとして使えるの情報がブログとかしか見つからなくて困っていたのですが、公式ページでTransformの解説をしているページをやっと見つけました。 docs.unity3d.com とりあえず各章を流し読みしながら図を追うだけでも勉強になります。 ・今回…

Unity : PlayMode 中の変更をスクリプトでプレハブに保存、更新する

PrefabUtility 使えば楽勝やろ(鼻ホジー)と思ってたらハマった。 さてどうやろう PlayMode中にシーン内のインスタンスの元プレハブを取得する PlayMode中のプレハブ関係 解 : SaveAsPrefabAsset

テスト用に用意したシーンを UnityTestRunner で実行する

いつも悩ましい Unity のテストですが、Play Mode でテスト内容を調整しつつ、そのままシーンを Unity Test Runner で実行 できないかなと試行錯誤した結果なんとか実現できたのでメモ。 PlayerTest ディレクトリを作成 テスト用シーンを作成 スクリプトを作…

Unity : VSCode によく使うコードを登録して一発入力

いわゆる スニペット というやつで、定型文を登録しておいて数クリックで書ける機能です。

Unity : MonoBehaviour, ScriptableObject をJSONファイルに保存する [C#]

まあ、ごくたまになんですけど、Unityをバージョナップしたりアセットをインポートしなおしたときに、シリアライズされたデータがふっとぶ時があったんです。 けっこうショックがデカいんですよね。いろんなデータをそこに入れてたりすると。 こんなときバッ…

Unity : プレハブの値をエディタスクリプトから変更・保存する

エディタ拡張書いたときに、プレハブの値を読むのは以下の記事の方法でできる。 indie-du.com 読んだ上で 書き換える には一工夫必要になる。

Unity : 自作エディタウインドウにプレハブを擬似シリアライズ

エディタウインドウを自作したときに、EditorGUILayout.ObjectField で受けたプレハブ情報を保存しておく場合の方法。

Unity : グローバルなイベント通知の仕組み(EventBus)を自前実装する [C#]

例えば、敵を倒したタイミングで、プレイヤー、UI、他の敵が何らかのアクションを起こしたい場合、どのような経路でイベントを通知するか悩みます。 敵を各オブジェクトが監視したりするのは、参照が絡み合って管理がめんどうくさいです。 そこで便利なのがE…

Unity : ゲーム性を持たせるAnimationCurveの小技3選

こういったウインドウを見たことがあると思いますが、これは AnimationCurve 型のメンバ変数を持つことで、インスペクタから設定することができます。 AnimationCurve - Unity スクリプトリファレンス public class AnimationCurveForRandom : MonoBehaviour…

Unityエディタウインドウを自作する

エディタウインドウ作成方法をよく忘れるのでメモ

Unity : プレハブに保存した値を Instantiate せずに直接読む

プロジェクトフォルダにあるPrefabから、Instantiate せずに各種コンポーネントを取得したかったメモ。

Unity : ScriptableObject解体新書(?)

共有データ保存になんとなく使っていた ScriptableObject について、いろいろ研究してみました。 そして、今までいろいろ間違った使い方をしていたことに気づきました。

UniRx付属のObjectPoolが割とガチで使える件

UniRxの中に知る人ぞ知る(?) UniRx.Toolkit というネームスペースがあり、この中に ObjectPool というクラスが定義されています。 これは 使用済みのGameObjectをDestroyせずに保存(プール)しておき、後で使い回す ことでパフォーマンスに優しいプログ…

MonoBehaviour のメソッドをオーバーライドする [Unity , C#]

C#でプログラムを組む上で避けて通れないのが 継承 ですが、Unity特有のMonoBehaviourクラスの派生クラスを さらに継承 してクラスを作成することができます。 Start関数やUpdate関数をオーバーライド することで、基本処理を共通化することが可能です。

Unity : 連番画像を動画として表示する

今回は、ファイルシステムに保存した画像を、コマ送り動画として表示させてみます。

Unity : テキストファイルをメンバ変数として扱う [C#]

TextAssetというクラスを使うと、テキストファイルを扱えます。 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; public class TextSerializeTest : MonoBehaviour { // テキストファイルをメンバ変数に …


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。