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

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

【Unity】【移植】XSIからエクスポートしたFBXにオリジナルのシェーダを割当てる際のメモ

  • 予めXSIでFBXを吐出す際に、.shaderも確保しておく
  • Unity側でAsset -> Import new Asset… で.shaderファイルをインポート
  • 同様にFBXもインポート
  • 新規にマテリアルを作成。
  • マテリアルのShaderに先にインポートした.shaderファイルの名前を選択する。
  • テクスチャ指定領域に貼れる枠が出現するのでそこに任意のテクスチャをD&D。
  • インポートしたモデルをHierarchyへ出現させる。
  • Hierarchyに置いたインスタンスが階層構造になっているのであればメッシュを選択し、Inspectorに作成したマテリアルをD&Dすると適用される。

注意

  • インポートしただけのオリジナルデータにはマテリアルを適用できない。
  • 一度Hierarchyにインスタンシングさせてから、メッシュに対して割り当てを行わなければならない。
  • それをPrefabにする分には問題ない。
  • インポートしたての生ファイルは_imported_materials等のディレクトリを作ってそこでオリジナルのまま管理するのが望ましいと思われる。

 

Softimageではじめる3D - XSIではじめる3D改訂版 -
坂井 登美子 武藤 栄美子
ボーンデジタル
売り上げランキング: 318364

Unity GUIText サイズ変更をiOS等のモバイル端末向けプロジェクトで行う方法

UnityでGUITextという画面にテキストを出すだけの処理がある。

これは何かと便利でコンソール代わりに画面に文字列を表示させる等の小技として重宝する。ただ、iPhone等に表示すると小さ過ぎて読めない。

表示するフォントのサイズを変更するのだけどiOS側には反映されない。

調べてみると、フォントをインポートして個別にサイズと色を指定する必要があるそうな。

この部分をいくら変更してもサイズ変更が実機に適用されない。
Unity, font Screen Shot 0024-03-19 at 21.19.47

シーンビューや開発途中のカメラには指定サイズでは表示されている。
Unity, font Screen Shot 0024-03-19 at 21.18.43

インポートしたらProjectから選択するとインスペクタにこんな風な表示が。
Unity, font Screen Shot 0024-03-19 at 21.20.02
赤丸部分を変更することでインポートしたフォントのサイズと色を一意に指定することができる。

指定したらGUITextのインスペクタのフォントにドラッグアンドドロップ。
GUIText font size Screen Shot 0024-03-21 at 10.32.08

■参考
例のごとくアンサーズ:どうやってiOSとAndroidのテキストサイズ変えるの?
アンサーズ:iOSとAndroidのGUIStyleについて。フォント/ボタンのサイズ

Unity remote 3を今更

Unity Remote3 というアプリを試しました。

http://itunes.apple.com/jp/app/unity-remote-3/id394632904?l=en&mt=8

無線で、iOSデバイスに画面を転送しつつ、入力周りを受取るテストができます。

画面は圧縮されたものが転送されて表示されるのでガッビガビです。

それでもジェスチャーを転送してくれるので入力周りに特化したテストとして用いる分には問題無いかと思います。

 

UnityでUI上にボタンを配置してボタンからメソッドを実行させる最小構成

UI上にボタンを表示してタッチ/クリックできるようにします。

作業手順

  1. GUIスキンを用意
  2. OnGUIイベントにボタン表示と処理を書いたスクリプトを用意
  3. 実行

GUIスキン

GUIをProject上を右クリックしてGUI Skinを選択する。

Unity_Button_WhereIsGUIAsset

黒いアイコンのAssetが出現。

これを選択してInspector上で各種定義を行う。

今回はボタンをメインで扱うのでボタンの要素を触ってみる。
Unity_Button_UISkinInspector

“Hover”はマウスオーバー時の変化であり、iOSではタッチのみなので表現されない。
実際には”Active”のみ。

スクリプト

var skin:GUISkin;//グローバル変数
function OnGUI(){
GUI.skin = skin;

var sw:int = Screen.width;
var sh:int = Screen.height;
var buttonRect:Rect = Rect(0, sh*7/8, 60,30);
if(GUI.Button(buttonRect,"left"))
{
    Destroy(gameObject.FindWithTag("Player"));
}

スクリプトを書き終えたらGUIを割り当てる。スクリプ上のグローバル変数化しているSkinに対して、先に用意したGUISkinをドラッグ&ドロップで割り当てる。

Unity_Button_SetUISkinToScript

これでGUISkinで定義したボタンの色などが適用される。やらないとデフォルトの定義が割り当てられるので不要ならば”割り当てない”選択もアリ。

そして Shift + Command + N でNullオブジェクトを生成し、そのコンポーネントとしてスクリプトをドラッグ&ドロップで割り当てると完成。

ちなみにだけど、ほんとは

gameObject.FindWithTag("Player").SendMessage("Kill")

とかでメッセージ送信だけにしておくべき。が、最小構成ではなくなるので今回は凄く単純なスクリプトにしておきました。

↓結果はかの通り。文字色が赤いのはマウスオーバーのタイミングでキャプチャしたため。

Unity_Button_result

参考

http://www.uxic.net/archives/tag/unity

Unity入門 ~高機能ゲームエンジンによるマルチプラットフォーム開発~

雑記

本件とちょっと主旨ズレるけどサンプルコード載せてるサイトでちょくちょく入ってる

var sw:int = Screen.width;

というコードがあると「あ、Screenってクラスから何か取得できるんだ、へー」って事があって助かる。

前に一度、サンプルコードはどんどん載せるべき、というはてなのエントリがあったけどその通りだと思う。

Unityの衝突処理最小構成

Unity教本の内容を整理。

最初は、gameObjectがどこからやってきたのかが分からなかったので理解するためにノートをまとめていた。そしたら変な方向に…。

原文

function OnCollisionEnter (collisionInfo : Collision) {
     if (collisionInfo.gameOnbect.tag == "Box"){
          Destroy(collisionInfo.gameObject);
     }
     Destroy(gameObject);
}

日本語訳

我に触れるものあれば即座に全うす。
  もし、当たる者の持つ遊戯物体が内に秘めたる”Box”と一致するならば全うす。
    死の呪文を触れた遊戯物体に喰らわせようぞ。
  さもなくばおわる
  死の呪文をば自ら喰らおうぞ。
これにて全うした。

死の呪文(Destroy()):オブジェクトをシーン上から破棄する効果がある。

おわり

良いよねこういう方向でも。

Unity入門 ~高機能ゲームエンジンによるマルチプラットフォーム開発~