サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
narudesign.com
シーン内の特定のオブジェクトのみをライトで照らしたい。 レイヤーとLightのCulling Maskを用いることで実現可能。 サンプル 1. オブジェクトの作成 シーンに3つのキューブを追加する(左からCube1, Cube2, Cube3)。 # まだ、ライトがないのでキューブは暗いまま。 2. レイヤーの作成 いずれかのオブジェクトを選択した状態で、InspectorパネルのレイヤーからAdd Layer…を選択。 User Layer 8の右側をクリックして、Brightと入力する。これでBrightと名前が付いたレイヤーが作成される。 ライトを当てたいキューブのレイヤーを設定する。 3. レイヤーの設定 HierarchyパネルでCube2を選択し、Brightレイヤーを指定する。 Cube1とCube2はDefaultレイヤーのまま。 4. ライトの設定 シーンにDirecti
現在のステートの情報はAnimatorクラスのGetCurrentAnimationStateInfo()で取得する。 取得した値(AnimationStateInfo)には、現在のステートに関する幾つかの値が含まれている。 ただし、この値からステートの名前は直接知ることは出来ない模様。 予め比較対象のステート名からハッシュを取得しておき、nameHashプロパティの値と比較することで、どのステートに居るかを知る。 Animator _anim; int _stateCardFace, _stateJumpCard; void Awake() { this._anim = GetComponent<Animator>(); this._stateCardFace = Animator.StringToHash("Base Layer.CardFace"); this._stateJumpC
グラフエディタでキーフレームの補完をベジエにしているのにキーフレームにハンドルが表示されない。スムーズに動かすために、ベジエハンドルを操作してキーフレームを調整するには、どうすればいいか? デフォルトの状態では、位置プロパティなどには2つまたは3つの値(X, Y, Z)がある。この状態ではグラフエディタ内でベジエハンドルを操作して調整することは出来ない。ベジエハンドルで調整するためには、「次元に分割」コマンドを使って、値(X, Y, Z)をそれぞれのプロパティとして分割する必要があります。 「次元に分割」コマンドは、タイムラインパネルで任意のプロパティを選択した状態で、メニューの「アニメーション」-「次元に分割」もしくは、右クリックメニューから「次元に分割」を実行します。 現象と対策 1. キーフレームの補完をイージーイーズ(ベジエ)に設定 簡単な位置アニメーションを設定後、グラフエディタ
Unreal Engine 4(Windows)でAndroid実機でアプリを実行できるように設定をしました。 UE4をインストールすると、Android開発環境のセットアップを行うアプリ(TADP)が一緒にインストールされます(デフォルトではC:¥Program Files¥Epic Games¥4.8¥Engine¥Extras¥Androidフォルダ内)。 ドキュメントを見ると、TADPを使えばAndroid向けの開発環境がセットアップできるようです。 Android ゲームの開発のリファレンス https://docs.unrealengine.com/latest/JPN/Platforms/Android/Reference/index.html ただし、今回はUnity3d向けにAndroid環境をセットアップした後だったので、このTADPを使いませんでした。既に構築済みの環
ParticleSystem _balloon; void Awake() { this._balloon = transform.FindChild("Balloon").GetComponent<ParticleSystem>(); // this._balloon = GameObject.Find("Balloon").GetComponent<ParticleSystem>(); }
NGUIでボタンを作成した時、ボタンがクリックされた時に実行されるメソッドはInspectorパネルで設定することができる(UIButtonコンポーネントのOnClickの所にドラッグ&ドロップしてメソッドを選択)。 スクリプトからメソッドを設定するには、以下のようになる。 using UnityEngine; using System.Collections; public class GameStage : MonoBehaviour { private UIButton _button; void Awake() { _button = GameObject.Find("ButtonBirth").GetComponent<UIButton>(); EventDelegate.Add(_button.onClick, onClickButton); } public void onC
UnityのGameObjectのPlaneはポリゴン数が多く、GUIのボタンや2Dスプライトとして使うには若干オーバースペックです。 エディタを拡張してメニューからシンプルな平面(三角ポリゴン2枚で構成)を作成できるようにしてみました。 エディタの拡張用のコードはEditorフォルダに格納する必要があります。 CreateSimplePlaneフォルダ下、Editorフォルダに以下のスクリプト(CreateSimplePlane.cs)を作成します。 using UnityEngine; using UnityEditor; using System.Collections; public class CreateSimplePlane : MonoBehaviour { [MenuItem("MyTools/Create Simple Plane")] static void Crea
やりたいこと: 開発中のアプリがファイルに出力した内容を確認したい。 NSUserDefaultsで書き込んだ内容が、正しく書き込まれているかを確認したい。 方法: XcodeのOrganizerを使うと、アプリのSandbox内のデータファイルを見ることができます。 Organizerは、Xcodeのメニュー「Window」-「Organizer」で開きます。 画面上部でDevicesを選び、左側のDEVICESから覗きたいデバイスを開いてApplicationsを選択すると、右側にアプリケーションの一覧と選択されているアプリケーションのサンドボックス内のフォルダ構造やデータファイルが表示されます。 # 最初にOrganizerを起動した時には、FlashBuilderでデバッグ中のアプリが表示されませんでした。 # Organizerが表示された状態で、iPhoneを接続し直すことでア
NGUIのUITextureの画像を入れ替えるサンプル。 1. NGUIのUITextureをHierarchyへ追加する。 2. 以下のスクリプトをUITextureへ追加する。 using UnityEngine; using System.Collections; public class TestUITexture : MonoBehaviour { public Texture2D _texture1; public Texture2D _texture2; UITexture _texture; void Awake() { _texture = GetComponent<UITexture>(); } void Start() { _texture.mainTexture = _texture1; Invoke("ChangeTexture", 5); } void Chan
タイトル画面、ゲーム画面、ゲームオーバー画面を用意して、それぞれを切り替えるサンプル。 Application.LoadLevel()を使わずに、表示オブジェクトのアクティブ/非アクティブを切り替えることで実現。 サンプルの内容: ・シーンは、「タイトル画面(TITLE)」「ゲーム画面(GAME)」「終了画面(DONE)」の3つ。 ・タイトル画面でマウスクリックすると、ゲーム画面へ遷移する。 ・ゲ
Recently Posts Unity3D:NGUIのTweenAlpha.Begin終了時に実行 Unity3D:プラットフォーム切替時に実行 Unity3D:Prefabについて考えてみた(階層の深さ) Unity3D:iOS向けアプリでフレームレートが不安定 Unity3D:フレームレートの変更 Unity3D:NGUIスプライトのDepth値に注意 Unity3D:NGUIのLabelに日本語を表示する Unity3D:iTweenの動き始めのひっかかり(hiccups) Unity3D:LayerとcullingMask LScript:背景レイヤー選択の順送り/逆送り(2) Recentry Comments enchant.js:enchant.jsはじめました に materialize.jp よりUnity3D:メッシュの頂点とUVとポリゴン(2) に テラシュールウェ
「NGUI始めました」 Unityを使い始めた頃からNGUIのことは気になっていたのですが、有料Assetということで導入をためらっていました。アプリを作る上でGUI周りを実装することの大変さが、最近になって益々身にしみて分かってきたので、60%OFFのセールにあわせて購入しました。Unityへの新GUI搭載が近づいている今、購入するタイミングとしては微妙な気もしましたが・・・^^; まずは、意外と面倒な文字(漢字や平仮名を含む)表示周りについて試してみました。 1. ttfフォントを用意する Macの場合: FontBook(アプリケーション)を起動して日本語フォントを選択して、フォント名を右クリック。 ポップアップメニューから「Finderに表示」を選択します。 Finderが開き、フォントファイル(*.ttf)が選択された状態で表示されます。 一旦、ttfファイルをデスクトップにでも
GUITextureをフェードアウトしたくて、コルーチンとかを調べてましたが、UnityにはiTweenという強い味方があることを思い出しました。 iTweenを使うと、位置やスケールなどを始め、様々なパラメータを簡単にアニメーションすることができます。 例えば、オブジェクトがパッと消えてしまうよりも、若干時間をかけて徐々に消えたほうが玄人っぽく見えませんか? iTweenはUnityのAssetStoreから無料でダウンロード出来ます。 ドキュメント類はiTweenのサイトに掲載されています。 iTween : http://itween.pixelplacement.com/index.php GUITextureをフェードアウトする guiTextureをフェードアウトするには、ColorTo()を使います。 例えば、OnMouseDown()でフェードアウトを始めるには void
以前、ShoeBoxを使ったStarling向けビットマップフォントの作り方を書きましたが、最近アプリ用にフォントを作っている時に注意すべき内容がいくつか見つかリました。 改めて、ここにShoeBoxでビットマップフォントを作る方法をまとめておきます。 http://renderhjs.net/shoebox/ Adobe AIRで作られた、ゲーム開発用のツールが幾つかパッケージ化された無料のアプリです。AIRランタイムの動作条件を満たしていれば、WindowsでもMacでも使うことができます。 ビットマップフォント作成フロー PhotoShopなどで、フォントのもとになる画像を作成します。 フォント画像作成 ShoeBoxでフォントファイルに変換します。 Bitmap Fontの設定 Bitmap Fontの書き出し フォントファイル完成 作成されるファイル 本ページで使用したフォント作
画像を使ってボタンを作成するサンプル。 ボタンはGUIクラスのButtonで作成できますが、GUI Textureに画像を設定してボタンを作ってみました。 1. GUI Textureを追加 シーンにGUI Textureを追加し、名前を変更する。 ここでは、ButtonPauseとButtonSoundを作成しました。 2. Textureの設定 InspectorウィンドウでTransform
マテリアルを作成し、メッシュへ適用した状態です。メッシュ全体に画像が貼り付いています。 UVの値を変更すると、画像の任意の場所を貼り付けることができます。 ※ Unity3D:メッシュの頂点とUVとポリゴン(1) の続きです UV値を変更するために、以下のスクリプトを作成しました。 using UnityEngine; using System.Collections; public class ChangeUV : MonoBehaviour { void Start() { MeshFilter meshFilter = gameObject.GetComponent<MeshFilter>(); Vector2[] newUV = new Vector2[4]; newUV[0] = new Vector2(0.5f, 1.0f); newUV[1] = new Vector2(0.
colliderの動きを知るために、簡単なゲーム風のコンテンツを作ってみました。名づけて「無限インベーダ」(名前かぶってたらゴメンナサイ)。左右に砲台を動かしつつミサイルを発射して迫り来るインベーダをやっつけます。 完成イメージは、こんな感じです。 概仕様 ・ゲームが始まると3匹のインベーダがランダムな位置に表示される。重なりを避けるために横位置は等間隔で固定。 ・左右矢印キーで砲台を左右に動かす
試しにdelegateを使ってみたサンプル。 シーンにEmpty(GameObject)を2つ追加して、それぞれをSceneとTouchSensorに名前を変更。 SceneにはScene.cs、TouchSensorにはTouchSensor.csスクリプトを追加。 using UnityEngine; using System.Collections; public class TouchSensor : MonoBehaviour { public delegate void funcDelegate(); public funcDelegate func = null; void Update() { if(Input.touchCount > 0) { if(func != null) { func(); } } } }
fbx形式でインポートしたメッシュデータの中を見てみました。 メッシュデータは単純な正方形の厚みゼロのポリゴン。Lightwave上では4点ポリゴンでしたが、インポート後には2つの3点ポリゴン(三角)に変換されていました(図中の白色の数字は頂点番号)。 メッシュデータの中を調べるために以下のスクリプトを用意しました。 using UnityEngine; using System.Collections; public class AnalyzeMesh : MonoBehaviour { void Start() { Mesh mesh = gameObject.GetComponent<MeshFilter>().mesh; for(int i = 0; i < mesh.vertices.Length; i++) { print("vertices[" + i + "] : " +
某所で質問に上がっていたので試しに実装してみました。 ピンチ操作の2本の指の中間点を中心にして拡大縮小します。 実験的に作ったものなので、実行時の条件がかなり限定されています。 ・iPhone4S (Retina, 640×960ピクセル) ・CameraのProjectionはOrthographic その他環境では、座標の変換時のパラメータ等を調整する必要があります。このままだと、おそらく拡大縮小時の中心がズレます。 以下からパッケージをダウンロードして下さい。 test_pinch.unitypackage (14KByte) 新規プロジェクトを作成して、ダウンロードしたパッケージをインポートしてください。 ビルド設定でターゲットプラットフォームを「iOS」に切り替えて、Gameウィンドウのサイズは「iPhone 4G Tall (640×960)」を選択してください。 シーン(te
テーマにカスタムメニューを追加するには、以下の2つが必要。 1. メニュー設定を追加する 2. メニューを表示する 1. メニュー設定を追加する ダッシュボードのメニューページヘカスタムメニューの設定を追加します。 functions.phpにregister_nav_menus()を記述します。 1つのメニューを追加する functions.phpに以下のコードを追加すると1つのメニューを追加することができます。
スクリプトでオブジェクトを生成するにはInstantiate()関数を使用します。 生成するオブジェクトをプレハブとしておくことで、スクリプトも含めた状態でシーンへ追加することができます。 サンプルプロジェクトの内容: ・画面にはオブジェクトを生成するためのGenerateボタンが表示されている。 ・Generateボタンをクリックすると、ランダムな位置にCubeが追加される。 ・Cubeをクリッ
Transition内でWait For Secondsノードを使ったらエラーが表示された。 InvalidOperationException: Port ‘enter’ on ‘WaitForSecondsUnit#e1128…’ can only be triggered in a coroutine. Wait For Secondsノードはコルーチンで使用する必要があるらしい。
「フリック操作が行われたか?」は、タッチ開始からタッチ終了までの時間と距離で判断する。 インスタンス変数の宣言 @implementation TestFlick { NSTimeInterval timestampBegan_; CGPoint pointBegan_; }
コルーチンを使ったサンプル。 毎フレーム実行したい場合はUpdate()メソッド内に記述すれば良いが、フレームレートとは別の周期で何かを実行したい場合には、コルーチンの仕組みを使うと容易に実現できる。 サンプルの内容 画面にはStartとStopの2つのボタン。 Startをクリックすると、シーンに0.5秒ごとに立方体を追加し続ける(コルーチンが動き出す)。 Stopをクリックすると、立方体の追加
Mac(OS X)には標準でApacheが用意されていて、ターミナルからコマンドを入力することで開始/停止することができます。 # Windowsでは別途自分でインストールして設定する必要があったので助かりました JavaScriptで開発している時にローカルファイルでは確認できない内容は、ローカルサーバーを使って行いましょう。 sudo apachectl start Apacheの停止 sudo apachectl stop Apacheの再起動 sudo apachectl restart Automatorで登録 今回のApacheの開始/停止は使用頻度が高そうなのでAutomatorでアプリケーションとして作っておきました。 ただし、実行時にパスワード入力が伴うコマンドは「シェルスクリプトの実行」ではエラーが出て実行出来ません。「AppleScriptを実行」を使うことで、パスワ
cocos2dのプロジェクトにUIKitのコンポーネントをいくつか実装してみました。 cocos2dのテンプレートで作成される、HelloWorldLayer.mのinitメソッドに以下のコードを追加。 UIView *view = [[CCDirector sharedDirector] view]; UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(50, size.height/2 - 25, 220, 50)]; [view addSubview:slider]; UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button setTitle:@"Tap me!" forState:UIControlStateNor
実アプリを想定し、2つのシーン切り替えと合わせてUITableViewを実装してみました。 初めてUITableViewを使ってみましたが、あまりのカスタマイズの自由度の高さに驚きました。UIKit全般に言えますが、知れば知るほど良くできていることが分かってきます。 一旦、UITableViewの追加と削除、スクロールの強制停止に関してメモしておきます。 UITableViewの追加 UITableViewの追加は、シーンの切り替えが終了したタイミング(onEnterTransitionDidFinish)で行なっています。 alphaを0で追加し、0.1秒でalphaが1になるアニメーションを再生し、スムーズに画面に表示されるようにしています。 - (void) onEnterTransitionDidFinish { table = [[UITableView alloc] initW
AdMobはGoogleが提供しているモバイルアプリ向け広告です。 現在AdMobのサイトからダウンロードできる、iOS向けSDK(GoogleAdMobAdsSdkiOS-6.2.1)には必須項目として、 「XCode 4.5 or later」 と記載されていました。 AppStoreでXCodeを4.5.1へバージョンアップし、Objective-CでAdMobの実装を試してみました。 注意:AdMobを表示するためには、あらかじめAdMobでアカウントを作成し、広告の設定などを済ませておく必要があります。 1. プロジェクトの作成 XCodeを起動し、「Single View Application」を選択し、Nextボタンをクリック。 プロジェクトの必要事項を記入して、Nextボタンをクリック。 2. プロジェクトにAdMobのファイルを追加 プロジェクトにAdMobのSDKに含
このページを最初にブックマークしてみませんか?
『narudesign.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く