カテゴリー別アーカイブ: ゲーム作る

ゲーム作る時のヒントなど

[Unity3d]プロジェクトを開始時する前にしておきたいソースファイルの文字コードの設定

プロジェクトの途中、いろんな環境で作業しているスタッフが混在していたり、スタッフが途中で増員すると環境が一人だけ違っていたりする事がある。特にコミットされたファイルの文字コードが違っていたりすると後で変更することは可能だが、svnのdiffが効かなくなったりblameで変遷を追えなくなる。

とはいえ、Unityで生成されるファイルはデフォルトでUtf-8なので、これ以外を使おうとする場合はコミット前に毎度確認しなければならなくなる。

そういった事態を回避する為に、予め特定の文字コードでファイルが生成されるように設定しておくと後々の不幸な出来事が無くなるのでメモしておく。

[wp_ad_camp_1]

親ファイル

新規に生成されるファイルは特定のファイルをコピーしただけになるので、親ファイルを特定して変更すればすべて解決する。

Environment3XMac

  • /Applications/Unity/Unity.app/Content/Resources/NewBehaviourScript.boo
  • /Applications/Unity/Unity.app/Content/Resources/NewBehaviourScript.cs
  • /Applications/Unity/Unity.app/Content/Resources/NewBehaviourScript.js
  • /Applications/Unity/Unity.app/Content/Resources/NewShader.shader

NewBehaviourScript.csとかjsとかbooとかshaderとかのファイルがあるのでこれを書き換えておく。
生成時にこれがまるっとコピペされるので署名等も入れておくと便利。

ちなみにこれらは3.xの場合。

4.x以降の場合

Environment4XMac

ファイルは.txtとして完全にテキストファイル化している。さらに、環境変数っぽいものも使えるようで、これを駆使して様々な記述ができそうではある。

Sublime Text 2 ならFileから変更が可能。
EnvironmentEncodeMac

Windows版の場合

3.xについては以下の通り。
EnvironmentFileDir_mac

  • Unity/Data/Editor/Resources/NewBehaviourScript.boo
  • Unity/Data/Editor/Resources/NewBehaviourScript.cs
  • Unity/Data/Editor/Resources/NewBehaviourScript.js
  • Unity/Data/Editor/Resources/NewShader.shader

4.xについては様々な問題により調査してません。が、多分Mac版同様の構成になってると思われるので次の単語で検索すると出てきそう。
– 80-Javascript-NewBehaviourScript.js.txt
– 81-C# Script-NewBehaviourScript.cs.txt
– 82-Boo Script-NewBehaviourScript.boo.txt
– 83-Shader-NewShader.shader.txt
– 84-Compute Shader-NewComputeShader.compute.txt

※最後のファイルは何なんでしょう…。はやく4.x環境に完全以降したい!

注意

UnityのTextAssetはiOSむけにコンパイル後、UTF-16withBOMのファイルを読み込ませてパースしようとすると、BEだろうがLEだろうがパースエラーになって落ちる。

Microsoft Windows 8 (DSP版) 64bit 日本語(新規インストール用)

Unity+NGUIで3Dオブジェクトに2D表示を行う

下準備・用意するもの

  • UISpriteオブジェクトを用意
  • 2Dカメラ(NGUIから Create New UI で作ったやつ)
  • 3D空間のカメラ(mainカメラ)
  • 3D空間のブジェクト

サンプル

gist

やってること

  1. 3Dカメラでワールド座標からスクリーン上の座標に変換
  2. 1の値を別のカメラのスクリーン座標上に変換
  3. 2D上に表示させたいアイテムのx,y座標だけ2で得た座標を上書き

※zは描画順やカメラの有効射程から外れるので無視。

ポイント

UISpriteは bottom に原点がくるように指定する。

bottomにすると原点が中央下部になるので、3Dオブジェクトのちょい上にあらかじめ表示が可能になる。

Spriteオブジェクトが乗ったパネルオブジェクトをPoint2DのplaneObjectに参照させる

そうするとパネル内で表示物を切り替えたりするときに便利だから。

ゲームメカニクス  おもしろくするためのゲームデザイン (ゲームデベロッパー)

のめりこませる技術 ─誰が物語を操るのか

NGUI用にフォントテクスチャを作って表示するまで

[wp_ad_camp_1]

使ったツール

bmGlyph

作り方

流れ

  • bmGlyphをDL
  • ひらく
  • フォントを選ぶ
  • テクスチャ化したい該当文字を入力する
  • Publish!
  • Unityでフォントプレファブを作成する
  • UILabelで出してみる

使用するフォントの選択

日本語が使えるフォントと使えないフォントが入り交じっているが、表示用文字挿入カラム内に日本語を入力してフォントを選択することで、日本語フォントを内包するフォントを洗い出す事が出来る。
試用不可能な場合は画像の様に使用可能には見えなくなる。

bmGlyph

フォント一覧カラム内をアローキーで順繰りにしていけばプレビューに日本語が表示されるので、仕様可否が判別できる。
JapaneseFont
日本語が表示可能だとプレビューが変化する。

一つ注意をするとすれば、フォントを選ぶ際は最低限の文字列で行うべきだ。プレビュー作成にけっこうな時間を要してしまう。

必要な文字列の抽出

青空文庫のサイトで漢字の基準がまとまってUPされている。
青空文庫

ここから任意の基準の文字列をDLしてbmGlyphに記入する。

エラーが出る

suffixを記述しないとその旨のエラーが出る。
記述してもエラーが残る場合は、bmGlyphを再起動することで回避できる。
Error

NGUI Font Makerでフォントを作成する

bmGlyphで作成したテクスチャとテキストデータをドラッグしてフォントを作成する。
名前を新たにつけておく。
NGUI_FontMaker

Create the Fontをクリックしてしばらく待つとドラッグ元にプレファブが生成される。

UILabelに実際に文字を入れてみる

UILabelをアタッチしたオブジェクトに名前を入れる。

Test_UILabel

ちゃんと表示された。”晋弘”部分はフォントに無いので表示されない。

Test_UILabel2

このとき、UILabelのx,yのスケールはポイントを表すので画面サイズに対して何ポイントで表示させたいかでスケールを決める必要がある。
またUILabelには文字数の上限があって、1800文字程度入力すると表示がされなくなる。

よって、規約などの文字列がおおいものを一度に表示するのではなくて、複数のオブジェクトに分けるか、WebViewを出現させるスクリプトを仕込んで別アプリケーションで対応させるなどが現実的だ。

参考

iOSの画面をキャプチャする手段いくつか

[wp_ad_camp_1]

企業内でデバッグチームが組まれ、開発とデバッグチームが乖離している場合、バグチケットでの文章説明だけではバグの症状を伝えにくい事が多々ある。
その際は画面撮影等も有効な手段だけれども、動画が撮れるなら再現性が低いものでも確認がとりやすい。

そんな状況でiOSのキャプチャ方法はないものかとグーグル先生に聞いてみたところ、いくつか紹介されていたのでまとめておく。

元ネタはこちら

スクショとりまくる

スリープボタン+ホームボタンでスクショが取れる。
けど10秒以上押すととリセットなので注意。

キャプチャ機能のあるアプリ

Screenchomp
Explain Everything
ShowMe,
Replay Note
Doodlecast Pro
Educreations

画面をデジカメ等で撮影する

完全にネタ。

Reflectorを使う

これが一番現実的かと。
Reflectorというアプリをキャプチャする側にインストールすることで無線で描画内容を取得できるようです。
Win/Mac両対応。

キャプチャした後

WinならBandicam
MacならQuickTimesで表示されている内容を保存可能。

参考

[Unity][XML][C#]テキストデータを外部ファイル化するサンプル

[wp_ad_camp_1]

Unityのプロジェクトで日本語をコード内に記述してる事案があって、これを解消した時の構造をメモ。

gist::ogkslownin

TxtLib.cs

staticで定義したテキストデータをKeyValue形式で保持したライブラリを複数所持するクラス。
プロパティは次に説明するXMLPlistContainerクラスで定義される。

使い方はライブラリの種類と取得したい文字列と対になっているkeyを渡すことで文字列データを取得する。

XMLPlistContainer.cs

クラス生成時にファイルを読み込む。
Editor上でのみ、ファイルのタイムスタンプを参照して使用時に読み直しをする。
文字列を取得する際にはインデクサを用意して、key文字列を渡すことで得られる仕組み。

fruit_default.xml

ここのファイルにkeyと対になる文字列を定義しておく。
ファイルは同名にして各国分用意する。

サンプルではアプリケーションサーバを各国で分ける前提での設計なのだけれど、各国のファイルを平行して保持したいのであれば、XMLのファイル名を国別に用意し、XMLPlistCOntainer内での読み込み時の”_default_”を、引数として受けた国名文字列と差し替える記述をすれば対応可能になる。
C#で学ぶ偏微分方程式の数値解法

[Uniyt]ShootAndDrop

先日作ってみたものを公開します。

今回作るにあたっての目標は以下の通り。

  1. スクリプトをC#で書く。
  2. 完了したらWebプレイヤー向けとして公開する。
  3. 2の理由によりマウスオペレーション前提。
  4. 記号的な物体のみで作成する。
  5. モデルはメタセコイアを使う。

でした。
メタセコイアはMac上でMikuinstaller経由で動作してます。
FBXプラグインを入れたのでUnityでも直ぐ読み込めます。

ただ、こういったものを作りまくってノウハウやデータの蓄積は大事だなと。
そして公開するという一つの区切りは、通過儀礼的な役割として非常に重要なメンタルエネルギー源になりますね。

影おちない非プロなので見栄え良くするにはシェーダいじるしか無い様で、勉強する事が常に山積みです。

—-

三宅陽一郎氏がAIに関する記事を書いたとか。楽しみにしています。

【Unity】2Dまわり描画方法とマップやレーダーっぽい表示

やりかた

  1. 2D表示用のカメラを用意(以下2Dカメラと呼ぶ)
  2. 2Dカメラの設定
    • Inspector内、Clear Flagsを”Don’t Clear”か”Depth Only”に。
    • Inspector内、Culling Mask を描画したいレイヤーのみ選択した状態に。
      • 例では2Dのロックオン用演出と、プレイヤーのパラメータまわりを選択中。
      • レイヤーを未だ作ってなければプルダウンの最下にあるAdd Layersで追加を行う。
    • Inspector内、Depthは値が少ない順に描画を行うのでメインカメラよりも多い数字に。
      • 背景のみを描画したい時などは-1等にして背景画像を設置する。
      • 手前側ほど後から描画するから順番としては後になる。
    • Inspector内、Transform,Camera,GUILayer以外のコンポーネントを削除

マップ、レーダー表示っぽいもの

概要

真上からパース無しで撮影した映像を手前に描画する。さらに描画させる座標を変える。マップ用に手順は作り直すやり方にしてるので前回の手順を無視してかまわない。

手順

  1. マップ表示用にカメラを追加する。
  2. PerspectiveをOrthographicにして近距離と遠距離での表示に違いを無くす。
  3. 描画順(Depth)は4とか適当な数値に。2D情報よりも手前にするか奥にするかで順番の変更をする。
  4. レーダーに表示したいGameObjectの子にSphereを追加し、そのGameObjectの居るLayerを2D_Radar(無ければAdd Layerで作成)に指定。
  5. 先ほど追加したカメラの Culling Mask を”2D_Radar”のみにチェックが入った状態にする。
  6. プレイヤーキャラとして作成しCharacterControllerコンポーネントを付けたGameObjectの子として扱うとキャラが旋回すると同時にマップも旋回してくれる。
ここまで済んだら画面は以下の様になってるはず。
Unity 2d Screen Shot 0024-03-29 at 17.00.45
赤い箱の子として赤Sphereを持たせている。
Radar表示として丸が描画されている。
プレイヤー用カメラが右を向いたらレーダ上のオブジェクト(●で表示されてるもの)が左へ移動。
Unity 2d Screen Shot 0024-03-29 at 17.00.33
同様に反対側を向くとレーダは右に旋回する。
このままでは画面中のオブジェクトとレーダー上のオブジェクトを混同するので表示位置を明確に切り分ける。
Normalized View Port Rectを変更して表示させたい位置とサイズの変更を行う。
Unity 2d Screen Shot 0024-03-29 at 17.58.50-1
View Port Rectを変更した画面。画面の右上に真上から俯瞰したカメラの画像を配置した状態。

参考

カメラを複数用意した際の設定等を参考に。
http://unity.gameenginejp.com/2010/12/2d-guitexture.html

Normalized View Port Rectの存在を知らせてくれた。
http://ws.cis.sojo-u.ac.jp/~izumi/Unity_Documentation_jp/Documentation/Manual/Cameras.html

digital CINEMATOGRAPHY&DIRECTING 日本語版 ―3D CGクリエータのための映画撮影術と監督術
Unity入門 ~高機能ゲームエンジンによるマルチプラットフォーム開発~
CUBE キューブ(買っ得THE1800) [DVD]
SHADER GURU with Direct3D10/11(シェーダーを完全にマスターできる本)

あとがき?

検索するときのワードは気をつけようと思う。
専門家に聞く事で知り得なかった固有名詞を知る事が出来た。