テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

スクリプト

Unityでゲームのフラグ管理

ちょっと聞かれたのでUnityでフラグ管理について。 これの続きです。 tsubakit1.hateblo.jp フラグ管理と聞けば面倒なように聞こえるが、要するに何処からでもアクセス出来るようなクラスに値を持たせておくだけでOKだ。後はifやswitchで必要になった時に確…

コンポーネントとプレハブの紐付けを自動化する

Unityはプレハブとして登録したゲームオブジェクトへ参照を持つことが出来る。STGを作るケース等では割とこの方法でオブジェクトへの参照を持ち、Instantateでインスタンス化するのが常套手段となる。実はこの参照、オブジェクトにアタッチする前に登録する…

スプライトベースの多重スクロール[ゲーム入門]

Facebook助け合い所に多重スクロールについての質問があったので、メモしておこうと思う。多重スクロール…の前にスクロールだが、実際2つの手段がある。一つはUVを利用した背景テクスチャのスクロール。これは単純にテクスチャのオフセットをリアルタイムで…

ScriptableObjectを更新させない

最新版 tsubakit1.hateblo.jp ScriptableObjectを使用する場合、ScriptableObjectのパラメータを更新するとベースの値も更新されてしまう。対策として値を変更するScriptableObjectを使用する場合はGameObject.Instantiateで一回生成したものを使用する。 pu…

脱出ゲームを作ってみる(ゲームイベントの制御)

これの続き。 tsubakit1.hateblo.jp次はなにかイベントがあった際のメッセージを表示する機能を作る。昨日のと合わせると、Stage1まで作れる。メッセージウィンドウの用意メッセージ表示用の背景、メッセージを表示するTextMeshを用意する。このウィンドウが…

脱出ゲームを作ってみる(フラグ管理)

ニコ生で脱出ゲームを作っていたのが面白そうだったので、自分も作ってみた。 【雑談】Unityプロ求む-脱出ゲー作り- (番組ID:lv178561943)とりあえず動かすだけなら、「フラグ管理」「カメラ切替」「イベント制御」だけで何とかなりそうな印象だったのでそこ…

【Unity】事前にシーンのルートにあるGameObjectを取得しておく

[Unity]シーンのルートにあるGameObjectを取得するの事前準備型。 tsubakit1.hateblo.jpシーンのルートにあるオブジェクトを取得する方法。 新しい方法の変更点は2つ。ルートにあるオブジェクト一覧を事前に取得する。非activeのオブジェクトも取得する。使…

C#とJSの連携

以前[Unity][メッセージング]値の変更を通知するクラスで変更を通知するアセットを試作したが、何やら副次効果でC#とJSの簡単な連携に成功した。 tsubakit1.hateblo.jpやり方は単純で、NotificationObjectクラス及びNotificationObjectを定義したクラスをPlu…

コルーチンで非同期処理を制御、Thread Ninja

今だとAsync/Awaitを使用したほうが良いです。 以前に紹介したとおり、UnityのAPIはスレッドセーフではないのでスレッド上で使用することは出来ない(スレッドセーフはスレッド同期コストが上がるので、普通はやらない)なので、基本的にUnityのAPIを呼び出…

AIを試作してみる日記

ふと思ってAIなど作成出来ないか色々と試している。AIを構成するパーツは2つで「判断」「実行」さえしっかりしてればソコソコの物は作れると踏んでる。もう少し細かいパラメータはソース丸っと改造すればいいや。今試しているもののベースは[Unity]作成したS…

ソースコードに日本語を使いたい?

ソースコードを記述する際、変数名や関数名をどのような英語に割り当てるか悩むことがある。簡単な単語で表現出来るなら兎も角、見覚えのない単語が割り当てられると、ソースコードに大量にコメントを残したくなる(英語を覚えれば解決する問題でもあるが)…

NativePluginsにC#デリゲートを登録する

NativePluginsからUnityへメッセージを送る際、コールバックやSendMessageを使うのだが、実はもう一つだけ方法がある。この方法はC#のデリゲートをコールバックとしてネイティブに登録し、それを直接呼び出してもらう方法だ。 これを実現するには、MonoPInvo…

Unityでunsafeを使って直接メモリ制御を行う

unsafeとは、メモリを直接扱う事を可能にする機能だ。メモリ管理とは具体的にはポインタを指す。Unityの使用しているmonoはマネージドコード(メモリ管理を自動で行う)のなので、ポインタを操作する事は本来出来ないが(せいぜいref等の直接参照がある程度…

作成したScriptableObjectを呼び出す

そういえば[Unity]Excelでデータを管理してUnity iOS/Androidで使うワークフローをノーコーディングで使えるようにした等でScriptableObjectを作る方法を紹介したが使う方法を紹介していなかったので、紹介。ScriptableObjectについては[Unity]ScriptableObj…

知っておくと少し幸せになる最低限のエディタ拡張

OnValidate Unityのエディタ拡張で、実際に使い勝手の良い使って便利で最低限なエディタ拡張手法を紹介しようと思う。他にも「Unity エディタ拡張」で検索すれば色々と出るが、少なくとも自分はこれだけで何とかなってる。OnValidateOnValidateを使用すると…

新・オブジェクトプール

オブジェクトプールを新しく自作した。前に作ったオブジェクトプール tsubakit1.hateblo.jp オブジェクトプールについて オブジェクトプールとはオブジェクトの生成・破棄を回避するギミック。基本的にオブジェクトやインスタンスの生成・破棄はパフォーマン…

値の変更を通知するクラス

Unityのゲーム開発で大抵頭を悩ませるのがメッセージングだ。メッセージングとは、オブジェクト・コンポーネント間のメッセージのやりとりだ。プレイヤーの持つHPやパラメータ、ゲームのステート、ゲームオーバーの判定等、値が変更された時に他のオブジェク…

シーンのルートにあるGameObjectを取得する

シーンのルートにあるオブジェクト一覧を取得する。例えばオブジェクトを削除する場合、ルートのオブジェクトを削除してしまえばそれ以下のオブジェクトも釣られて削除出来る…とか、ルートのオブジェクトをdisableにしてアクティブスイッチでシーン切り替え…

スクリプトデバッガをもう少し使いこなす

今回はUnityのデバッガについてです。この記事は以下の記事の続き的な物です[Unity3D]Unityでデバッグする [Unity]iOSの実機でスクリプトでバッグする方法 [Unity]Android実機でスクリプトデバッグする方法Unityの…というかMonodevelopのデバッガは常識の範…

iOSの実機でスクリプトでバッグする方法

今回は iOS実機 でスクリプトデバッグを実機で行う方法について書いておきます。Androidのデバッグ方法については、こちらをどうぞ。 tsubakit1.hateblo.jpさて、iOSのデバッグ方法は非常に面倒ですが、このような手順で行います。1.Unityからアプリをビル…

Android実機でスクリプトデバッグする方法

今回はAndroidのスクリプトデバッガの使い方について。デバッガ / Debuggerデバッガを使うと、「どのような順番で処理が進んでいるか」とか、「この処理中の他のパラメータ(変数)は何なのか」等を確認することが出来る。特に細かい部分の処理を確認するの…

Spriteをランタイムに生成する

[Unity]ResourcesからスライスしたSpriteを取得する3つの方法で紹介したが、もう少し詳しく書いておこうと思う。 Sprite.Createでは、単純に4つの引数を使用する。・texture:スプライトとして抽出する元のテクスチャ ・rect:テクスチャのUV(x,y)とスプライ…

ResourcesからスライスしたSpriteを取得する3つの方法

単純なSingleSpriteならばResources.Load(fileName)でロード出来る。ただし、これをMultiple(スライスしたスプライト)に実行すると、一番上のスプライトがロードされてしまう。このスライス済みスプライトについては、Resources.LoadAllで一旦全部取得して…

CodeDOMによるコードの自動生成の実験

コードの自動生成について、誰得って気もするが、せっかくやったのでメモに残しておこうと思う。今回の目的はMsgpack_cliのPacer/Unpackerコードの生成。MessagePackSerializerが使えれば正直楽なのだが、AOTで動作するiOSのせいでコレが使えず、レガシー宜…

Unityのコンソールログを日本語で確認 ConsoleTranslator

英語コンソールログを読みやすくするため、コンソールログを翻訳する機能作ってみたが、思いの外使い勝手が良かったので共有しておこうと思う。公開停止しました DLConsole Translatorは、ログを翻訳して表示するアセット。英語が苦手だったり、英語にトラウ…

Unity標準クラスにメソッドを追加する方法

所謂「拡張メソッド」というものをUnityも使うことが出来る。拡張メソッドは、要するに既にあるクラスに機能を追加する方法。 継承でも追加したり出来るが、継承すると継承元を参照しているクラスを総とっかえしなければならないので、若干面倒…といった場合…

エディタでゲーム再生中に変更した値を停止しても消さない方法

Unityはゲーム再生中のデータを残せない。例えばPushを押す度にカウントが+1されるプログラムを組む。それをシーンに配置し、ゲームを再生前は0のカウントをプレイ中に5まで増やしたとする。その後再生を停止させてしまうと0に逆戻り、5から進行することは出…

WebPlayerでGetMethodのパラメータを取得する

こんな感じのゲームを作りたくなった。選択肢をミスると即死する即死系RPG。死んだ際、死んだ理由(やってはいけない事リスト)がメモに書かれる。1日に3回までプレイ出来る。3回死んだ後Twitter向けにURLが発行される。URLからプレイすると、死んだ理由・死…

アプリサイズを減らす その3

アプリサイズを減らす その2で紹介した方法(StreamingAssetsに配置する)だが、どうやらAndroidでは若干安定度に難がある。で、もう少し良い方法を思いついた。[Unity3D]iosアプリサイズを節約する http://tsubakit1.hateblo.jp/entry/20120512/1336773155…

ゲームをビルドした後でもスクリプト(機能)を追加する

既にビルドし出力したゲームに追加でスクリプトを与えて実行する。上手く使えば、基本システムを出力した後、外部システムを丸ごと追加する事も可能かもしれない。ただし、当然のように最適化はかからないし、さらにJIT実行出来ない環境(具体的にはiOS)で…