サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
terasur.blog.fc2.com
ゲームを作る上でスローモーションを行いたくなるケースがある。 その場合はUnityでストップやスローモーション・早送りを実現するにはのように、Time.timescaleで時間を停止・加速させてしまうのは手っ取り早い。少なくともAnimationで挙動を制御している場合。 しかし、rigidbody等のような異なる時間軸で動作する物がある場合は一緒にInterpolateを設定しておくことをお勧めする。 まず、普通にボックスsを吹っ飛ばすシーンがあったとする。 これを単純にTime.timeScaleだけで処理すると、以下のようになる。要するにガクガクになる(以下のGIFは60FPSで撮影)。スローで再生しているのだが、ブロックが明らかに飛んでしまう。 そこでInterpolateを使用した版。比較すると、スムーズにブロックが吹っ飛んでいるのがわかる。撮影自体は上のGifと同じだが、最後の
GameObject.Find 系関数の処理速度の検証結果を受けて、シングルトンを見なおした。 この記事は、以下の記事の続き。 [Unity3D]もっと楽なシングルトンの実装 [Unity3D]シングルトンなオブジェクトを作る 試したのはオブジェクトをtagから検索する事で高速化を図る手法。この手法だと必ずGameControllerもしくはGameManagerタグの付いたオブジェクトにアタッチする必要がある。 結論としては、それなりの高速化が見込めそうだ(オブジェクトの数が増えても速度に影響しないのが特徴)。ただし、高速化する部分は「Awakeが呼ばれる前に呼び出したケース」のみで、Awakeが呼ばれた以降の場合は速度に差は殆ど無い。 ソースコードはこちら。 使い方は今までどおり。以下のように記述する。また、ソースコードは特定のタグのオブジェクトに必ずアタッチする。 using Un
どうも @tsubaki_t1 です。 コメント欄に「ポケモンのようなRPGのサンプルとなるコード・アセットがあれば紹介して欲しい」旨のコメントが来ていたので、少し探してみます。 まず「ポケモンのようなRPG」について少し考える。ちなみに自分の知識は「赤・緑」の地点で止まってるのであしからず(しかもうろ覚え) パっと思いつく要素を大雑把に並べてみる。 ・グリッドベースの移動 ・会話シーン ・ターン制バトル ・原則1対1 ・戦闘キャラクターの交換 ・敵を鹵獲し、鹵獲した敵を使役する ・レベルベースの成長 さて、この中で要素を分けると以下の3つ。 マップ ・グリッドベースの移動 ・会話シーン 戦闘 ・ターン制バトル ・原則1対1 ・戦闘キャラクターの交換 インベントリ ・戦闘キャラクターを鹵獲し使役 ・レベルベースの成長 となりそうだ。 まず出るのが、[Unity]ターン制のローグ系RPG、O
「ドット単位の移動」なる物についてTwitterにて話題があったので やり方を書いておこうと思う。 今回は、レンダリング直前にドット絵的に中途半端な位置にあるオブジェクトの位置を補正し、レンダリング後に元に戻す方法を紹介する。 画面左はスムーズに動くが、画面右はドット単位で動く やり方 Pixels to units で1ドットの大きさを1mにする。 これで1m動かした際に1ドット動くようになる。 ついでに、Filter ModeをPointにしてボカシを無くし、FormatをTrueColorにして圧縮をキャンセルする。 次に、今作成したスプライをシーンに突っ込み、下のコンポーネントをアタッチする。 やってる事は簡単で、Update後・レンダリング前のLateUpdateに現在の座標を登録後、現在の座標を丸めて座標更新。こうする事で、INT単位で座標を動かす。で、レンダリングが終わるOn
プレハブとしてオブジェクトを作成するには、以下のようにコードを記述します。 #if UNITY_EDITOR var tile = UnityEditor.PrefabUtility.InstantiatePrefab(prefab.gameObject) as GameObject; #else var tile = Instantiate(prefab.gameObject) as GameObject; #endif 要するに、InstantatePrefabを使用すると、インスタンス化ではなくプレハブとしてエディタに配置します。この方法ならば、プレハブとしての機能を活用出来るので、配置したオブジェクトの一括変更やパラメータの調整を楽に行うことが出来ます。ただしこれはEditor専用機能なので、実行時向けにInstant
無料のタイルマップが地味にすごかった。 AutoTileSetは、タイルマップを作る感じのアセットだ。 AutoTileSet AutoTileSet(AutoTileSetManager)を選択中に画面にタイルが表示されるので、そのタイミングで画面をタップすると画面にタイルが置かれる超シンプル構造。 しかも枠の外側・内側で自動的に草が置かれる。 さらに、光を使う事で凹凸が表現出来るモダンなドット絵の表現が出来る。 斜めも指定する事が出来る。斜めの当たり判定はEdgeColliderで実装するみたいだ。斜めにするにはAutoTileQuadのSlopeCornersにチェックをいれるようだ。 とりあえずファーストインプレッションは凄いの一言。もう少し使い方を調べてみよう。
以前にも紹介したが、IBL(イメージベースドライティング)とは「画像を元にライティングを行う」技術だ。オブジェクトをリアルに表現している要素は殆どライティングなので、既存の画像を元に光源を設定すると、非常によく見える。 これと「物理シェーダー(現実に存在する材質の反射率や光沢等を使用してシェーダーのパラメータを設定する技法)」を組み合わせると、非常にリアルな感じに見えるようになる。 今回はIBLの話。 絵の中にモデルを配置してみた的な 光源計算は画像から取得 Lightmapping Extended UnityのIBLで代表的な物はSkyshopだが、今回は無料のアセットのLightmapping ExtendedでIBLを実現する。 Lightmapping Extendedは、UnityのBeastを割と手軽に操作する為のアセットだ。 Unityが採用しているBeastは元々IBLを
先日公開したUnityプロジェクトへファイルを追加する際に上書き更新するについて、「オーバーライドする際にダイアログを出す」サンプルを頂いたので早速試してみた。 snakaさんrodostwさん、情報ありがとうございます m(_ _)m 使ってみると、かなり良い感じ。 ただ、これ使ってると「移行の処理を全て同じ処理にする」入力欄が欲しくなる所。むむむ、・・・その内作るか また、metaを個別に探して削除していたが、FileCopyでファイルを上書きコピーした後にAssetDataBase.Deleteで削除するようにした。こちらのほうが多分健全だし、.metaが作られないケースでも多分対応出来る。 ソースコードは分けようかと思ったけど上書きしちゃったてへぺろ。
まず最初に書いておくと、この方法は失敗作だ。 単純にパフォーマンスが良くないし、精度も今ひとつ。 だけど、同じ過ちを犯す人がいるかもしれないから、メモに残しておく。 ちなみに、こんな感じになる。一応リアルタイム。 画像はSweetSpotの見せられないよアイコンより。 モデルはAoiちゃん。 少し前からあった自分好みのアセットで、制服・パジャマ・道着のような物から、ボロボロにされた服やバスタオル一枚、スク水ニーソ・セーラー服の下にスク水といった、マニアックな物も入ってる逸品。 モーションも格闘から会話・移動等々、非常に良い感じ(62種類?多すぎて分からん) Aoi Character Pack あ、ちなみにバスタオルの中は黒塗りです。 つまりシュレティンガーのぱんつ。 この方法、やってる事はすごく簡単だ。 Mesh Coliderをリアルタイムに更新パンツにコライダーを設定パンツへ向けてR
昨日、あるイベントで音楽に合わせてプロジェクションマッピングの絵が動くデモを魅せられて大興奮な椿は、プロジェクションマッピングについて調べるのでしたおわり。 とりあえずプロジェクションマッピングはこれが使えそうだ。(昨日のデモを作った人の記事) Unity によるプロジェクションマッピング入門 まあ、実際の配置位置の調整は、無理してUnityでやるよりは 専用ツールを使って行ったほうが良さそうだ。 Unityでインタラクティブなプロジェクションマッピングを そういえばデモでは「円形の板」に「球体」を投影する事で、あたかも板が立体物であるようにしたりと色々と面白いことをしていた。 次があったらまた見たい。
Unity 2Dのチュートリアルにまた新しいゲームが追加された。 その名も、Catch Game どうやら、上空から落下してくるボーリング玉を帽子で受け止めるゲームらしい(ボーリング!?) その際、爆弾を間違えて受け止めてしまった場合はゲームオーバー。 ボーリング玉を地面に落としてしまった場合もゲームオーバーのようだ。 さて、今回のチュートリアルも操作説明のチュートリアルビデオが付随する。今回のビデオはサクっと手軽に見れる、60分×3 + αだ。 2D Catch Game - Pt 1(54分) 2D Catch Game - Pt 2(65分) 2D Catch Game - Pt 3(59分) Q&A 誰か要約してくれないかな ちなみに素材となる素材集は結構色々なものがありそう。 あとで確認する Unity Samples : 2D Pack
Unityのカメラは選択中に表示され、選択が解除されると非表示になります。このため、画面範囲内にキャラクターが入っているかの有無は、ゲームビューで判断しなくてはいけません、これは不便です。 なので、画面範囲が常に表示されるエディタ拡張を作成しました。 この今回作成したコンポーネントをカメラに付与すると、カメラの描画範囲がカメラを選択していなくても表示されるようになります。また、カメラを選択している場合、カメラのより詳しい情報(カメラの描画範囲やワールドスケール)が表示されるようになります。 一応、平行投影にも対応。参照しているカメラの撮影モードにより、表示されるUIモードが少し変化、通常のCameraのGizmoと同じような形になります。 ソースコードはこちら 実はこれ、少し悩んでいます。 もし何かアイディアがあれば教えてくれると嬉しいです。 Perspectiveでの画面範囲の扱い Pe
先日、Unity開発者が複数人で開発を進める上で覚えておくと幸せになる9つの事を書いたが、ややこしいと呟いていた人居たので、超簡易版を用意する。 こういった物は手順だけ教えるより概念を理解してもらったほうが良いと思うので記載した。反省はしない。とは言え、確かにGitの操作系は要らなかったかもしれない。(でもzipを投げてくる奴・投げても良いと聞いてきた奴、テメーは駄目だ。読め) とりあえず以下の事に注意すればOK。 Unityエディタのバージョンを一致させる Unityプロジェクトの設定を一致させる ファイルは基本的にエディタで操作する。 ファイルを上書きする場合はエディタ外で操作する エディタ外でファイルを動かす・改名する際は必ず***.metaも一緒に操作する AssetServerとかGitとかでプロジェクトやファイルを共有する
ゲームジャムが近いので、複数人開発で注意すべきことをまとめる。この内容は自分の開発経験やヒアリングを元に考えたものだ。※この方法が正しいとは限らない。とにかく意見がほしい 今回は管理システムにはGitでSource Tree、Unityのバージョンは4.5を想定。 まとめると言いたい事は以下の3つ バージョン管理は便利! メタデータの扱いは特に注意しろ! プッシュ・プルの失敗は解決出来る頑張れ! バージョン管理システムを覚える ゲームジャム・ゲーム開発で、Gitやバージョン管理システムが使えない人がいるとかなり足手まといになりやすい。特に、ゲームジャムのように展開が高速で物事が進む上に客員に余裕が無い場合、バージョン管理に参加出来ない人がグラフィックやシステムを作っても、最終的にゲームに組み込まれない事が多々ある。 Gitの操作方法については、【連載Git目次】ほんとは簡単?SourceT
弾を生成する場合、以下の手順を行うのが一般的だ。 弾のprefabを生成Resources、もしくは参照から1を取得2をGameObject.Instantiateする 実はGameObject.Instantiateは、別にプレハブでなくとも実行できる。 GameObject.Instantiateの本質は「GameObjectをクローンする」の一点なので、例えばシーン内に存在するオブジェクトを量産する場合にも使用することが出来る。 利点 これの便利な点は2つ。 プレハブのバリエーションが作りやすい この方法でプレハブを使用した場合、プレハブの参照を維持したままバリエーションを持ったプレハブを用意する事ができる。例えば下の画像では、3種類のパターンのオブジェクトが生成可能。しかもベースとなるプレハブは1個のため、ベースプレハブを変更すればパラメータを一括変更することが可能。 本来はプレハ
rigidbodyの落下位置を予測する。 powerの分だけ左にふっとばす感じのソースコードを用意。rigidbody2dでもrigidbodyでも良い。 rigidbody.AddForce(Vector3.left * power, ForceMode.Impulse); もしくは rigidbody2D.AddForce(Vector2.right * -power, ForceMode2D.Impulse);次に、落下位置を予測する。 Vector3 GetPos(float time, float power, float mass) { float halfGravity = Physics.gravity.y * 0.5f; float x = time * -power / mass ; float y = halfGravity * Mathf
Unityの次期バージョン、Unity 4.6から待望のuGUIが搭載される。uGUIについてはUniteのセッションで既に紹介されていたが、さらに先日、追撃の紹介ビデオが公開された。 しかし、約30分もあるビデオなので見るの面倒! なので情報を少しまとめてみた。 絵は動画のキャプチャ! Canvasが基本 uGUIはCanvasの単位でUIを描画するらしい。ビデオではImageを追加したタイミングで、自動的に追加されていた。 Canvasには「Screen Space - Overlay」「Screen Space - Camera」「world space」があり、この設定により表現方法が若干変わるらしい。Overlayは今までのUnity-GUIのように最前面カメラへの描画、Screen Space - cameraは指定したカメラから見たUI、world spaceはワールド座標の
端末のスクリーンショットを撮影する際、高画質なスクリーンショットを撮影したい場合もある。 そんな時はApplication.CaptureScreenshotの第二引数(superSize)に倍率を指定する。下のコードはスクリーンショットを倍にしたケース。 Application.CaptureScreenshot("image.png",2);もし解像度を2048とか1024に近い値にしたい場合、以下のように指定する。 float max = Mathf.Max(Screen.width, Screen.height); int scale = Mathf.RoundToInt( 2048 / max); Application.CaptureScreenshot("image.png", scale); サンプルコード ちなみに、高解像度のRenderTextureを指定しそこか
Unity は ProjectSettings の Resolution and presentationw の Default Orientation を Auto Rotation に設定することで、端末を傾けた際に傾けた方向へ向くように設定出来る。 この際、横(Landscape)にチェックを外すと、上下に回転するようになる(Unity のゲームを作ってる人はぜひとも上下回転に対応させて欲しい。そうすればゲームを充電しながらプレイ出来る) その際、回転を固定したくなるケースがあるかもしれない。そんな場合はこんな感じに記述すると、回転を固定することが出来る。 switch (Screen.orientation) { case ScreenOrientation.Portrait: Screen.orientation = Scr
前回のPrefab In Prefabとは方式が異なる、新しい方法を試してみた。 前回:[Unity]prefabの入れ子構造を可能にする、プレハブのネスト化を試作 その1 ■Nested Prefab 2 今回はプレハブ化に辺り特殊な事は行わず、ただ単純に元のプレハブの値を参照してオブジェクトのパラメータを戻す事を可能にしてみた。 Nested Prefab 2 要するにプレハブをまとめてプレハブ化した場合でもプレハブ元への参照を破棄せず、元々のプレハブの情報を巻き戻せるようにした。本来であればプレハブ化により元々のプレハブへの参照が切れてしまうのだが、これを残すことでプレハブ化した際にも値を巻き戻せる。 前回のコンセプトは「プレハブのネスト化をエディタ・ランタイムで行う」「プレハブ情報はシーンに保存」がコンセプトだったので、今回は逆の方法を試した感じ。 ■使い方 使い方は簡単、Proj
とりあえずフラグ管理が良く分からなければ、コレを突っ込んでおけばOKだと思う。 FlagManager インストール方法 FlagManagerをインポートする(ProjectビューへD&D)FlagManagerフォルダのFlagManager(プレハブ)を最初に読むシーンへドラッグ&ドロップ使い方 黄色い部分の数値を0~127に変更すると、指定番号のフラグを折ったり立てたりする。 0番目のフラグを立てる。 FlagManager.Instance.flags[0] = true;0番目のフラグを折る FlagManager.Instance.flags[0] = false; フラグが立ってるか確認する。同じく黄色の数値を0~127に変更して指定番号のフラグを確認する。これをUpdate関数内やStart関数、OnGUI関数内で確認する。 // Flag 0 を確認する
ちょっと聞かれたのでUnityでフラグ管理について。 こんなのも書いてた。[Unity]脱出ゲームを作ってみる(フラグ管理) フラグ管理と聞けば面倒なように聞こえるが、要するに何処からでもアクセス出来るようなクラスに値を持たせておくだけでOKだ。後はifやswitchで必要になった時に確認すれば良い。 色々考えたが、やはりシンプルなDictionaryで十分かなと思った。 Dictionaryはキーを指定すると値を取得できるコレクション(値をたくさん持ってるアレ)だ。これを使用すると、フラグ名を指定して値を取得したり、逆に上書きしたりする事ができる。 using System.Collections.Generic; using UnityEngine; public class FlagManager : MonoBehaviour { public Dictionary<str
Unity 4.5が来た! 今回は少なめのたったの450個位の更新な訳だが、今回も簡単に注目ポイントを独断と偏見によりまとめてみようと思う。 Unity 4.5 リリースノート 他にも「ココは見るべきそうすべき」「コレを見れないtsubakiに未来はにぃ」的な物があれば、下のコメント欄やツィートで補足してくれると超うれしい。 1. Unity Remoteがかなり使いやすくなった UniteRemoteは、Unityのタッチパネルやプレビュー画面を エミュレートするiOS/Androidアプリだ。 これを利用する事で、アプリを実機端末へビルドする事なく、 タッチの操作感やアプリの挙動を確認することが出来る。 今回新しくなったUnityRemote4は今までのUnityRemote3と 違いWifiではなくUSB接続となり、わざわざPCと同じネットワーク空間に配置せずともUSBを繋ぐだけで遠
Unityに限らずプログラムを作成し管理する際、整形のルールを設けることでソースコードを読む負荷が大分減る。ただし、この手法で統一した際に整形ルールを守らないコードが出た場合、非常に気持ちが悪い。 ソースを整形する方法だが、基本的にMonodevelopのFormatがお手軽でお勧め出来る。但し、Unity 4.3以降ではMonodevelopのプロジェクトを作成する機能がバグっており、インテントが余計に気持ちの悪い物になるので、Mac版の場合は一旦ソリューションを修正する必要がある。 インテントを修復するには、プロジェクト毎に以下の手順を行う。 Monodevelopを開くプロジェクト -> ソリューションオプションを開くコードフォーマッティング → Text fileを開くIndent widthの設定を8から4へ変更する ソースコードを整形するには、以下の手順で行う。 Monodev
UnityのIL2CPP(C#をC++に変換する技術)だが、別のプラットフォームにも使うらしい。(正しくはC#の吐いたアセンブリをC++に直す) そもそもIL2CPPはWebGL 具体的にはasm.jsに対応する為の技術として公開されていた。で、これを他のプラットフォームでも行う事が今日のUnity公式ブログにあった。 The future of scripting in Unity (ユニティのスクリプトの未来) 凄く要約すると、こんな感じ。 ・C#コードもC++化して最適化がかけられるのでパフォーマンスが2〜3倍上がる ・静的解析もできるんで深く最適化出来る ・.NET(Mono)がアップデートされる。Microsoftと共同で互換性を担保 ・静的解析によりGCが減る(スコープが短い処理はスタックに置くとか?) ・とりあえずWebGL版が上手く行ったら他にも移植する ・AOTと同じ制約
ニコ生で脱出ゲームを作っていたのが面白そうだったので、自分も作ってみた。 【雑談】Unityプロ求む-脱出ゲー作り- (番組ID:lv178561943) とりあえず動かすだけなら、「フラグ管理」「カメラ切替」「イベント制御」だけで何とかなりそうな印象だったのでそこだけ作った。もう少し拘る場合はイベント発動中にアニメーションさせたり、そういった所が必要かもしれない。実装は大体1時間半くらい。 デモ フラグ管理 SingletonMonoBehaviourで何処からでもアクセス可能なフラグクラスを作った。基本的に挙動はこのクラスから制御する形になる。また別のステージでも汎用的に使えるように文字列アクセスのDictionaryを利用。 intや適当な文字列のフラグを用意する場合、多分ステージ独自のパラメータとして持ったほうが良さそう。 自分のSingletonMonoBehaviourは基本的
トランジションで画面遷移するアセットを自作してみた。 FadeCamera ライセンスはとりあえずMITで公開。 その内AssetStoreにAssetStoreLicenseで公開する予定 UnityのApplication.LoadLevelで画面遷移した場合のような、画面が「ガッ」と停止し次のシーンが始まるのは嫌な人も多い。その為、多くの場合はフェードアウト・フェードインを行い画面が自然に遷移するような形の実装をする事が多い。 Unityであっさりとフェードインができた 【Unity】シーン遷移時のフェードイン・フェードアウトを実装してみた 今回用意したトランジションは、これをもう少し発展させトランジションのルール画像(白黒画像)からフェードのパターンを作れるようにした。これを使用すると、もう少し複雑な形状のフェードが可能になる。例えば、下のようなパターンの画像を使用した場合、右のよ
Unityエディタは幾つかのUIを外に配置しているため、その項目であれば日本語表記に変更することが出来る。この機能を利用すると、多少だがUnityのエディタを日本語化する事ができる。 下の図は実際に日本語化してみた図。 これで、[Unity]Unityのコンソールログを日本語で確認 ConsoleTranslatorによるログの日本語化だけでなく、UIもある程度日本語化出来る。 日本語化するには、エディタのUI_Strings_EN.txtを編集する。要するに外出しされたメタデータを編集する。UI_Strings_EN.txtの位置はWindowsとMacで若干違うので注意。 Windows版 : Unityをインストールしたフォルダ/Editor/Data/ResourcesMac版: Unityをインストールしたフォルダ/Unity.app/Contents/Resources UI_
Unity 4.3より以降greeのWebViewアセットをAndroidで使用した場合、キーボードが正常に動作しない不具合等が確認されている。この不具合はAndroid 4.4で修正されているのだが、4.3以前のAndroidデバイスを使用したい場合、幾つか対策が必要となる。 対応方法としては、今のところ3つの方法がある。 NativeActivityではなくActivityを使用するUnityに届いたメッセージをフックしてWebViewに伝えるキーボードを自作するなお、この問題はUnity側も把握しており、Issue Trackerにも登録されている。 Backspace doesn't works in WebView android pluginでもvote(バグ修正に賛成)が今日の地点で7。意外と誰も困ってないのかな。 ■NativeActivityではなくActivityを使用
次のページ
このページを最初にブックマークしてみませんか?
『テラシュールウェアブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く