Unityの設定をあれこれいじっていたら突然
[VRDevice] Initialization of device oculus failed.
こんなエラーが吐き出されて、実機でビルドすると落ちてしまう現象にはまったので備忘録。
Player Setting... > Android > OtherSettings > Virtual Reality Support
チェックを外したら直った!
いつも間にかチェックを入れてしまっていたのだろうか、、、
備忘日記
ゲームアプリ開発をしてます。 libGDXネタやゲーム開発で困った事などをまとめて、 次回ゲーム作りに役立てたい。
2016年9月17日土曜日
2016年8月14日日曜日
いまさらポケモンGO
いまさらながらポケモンGOについて。
社会現象になってた?ポケモンGOだけど、何がそんなに凄いのか、ゲーム作りのヒントになるかと思いダウンロードして、ちょいとハマってみた。
●職場は東京のど真ん中である千代田区はこんな感じ
●23区外れた自宅付近はこんな感じ
●お盆で帰省した田舎はこんな感じ
<感想>
都内ではコンビニ以上にポケストップやらジムがありそれなりに楽しめた。
マクドナルドもジムになっている為か、仕事でたまに立ち寄る恵比寿のマクドナルドもほぼ満席、、、
一方、自宅付近ではときどきポケストップで桜が舞っているが、基本閑古鳥が鳴いてる、、、
ただし、図書館がジムになっているところでは、エアコンが聞いた中でジムバトルが出来る為か、ジムレベル8にも成長していたw
図書館恐るべし!
GoogleMapと連動しているシステムは面白いけど、エリアによってバラつきが出来てしまうので、
あくまで移動距離のみにスポットを当てたらまた違ったゲームが作れそう。
社会現象になってた?ポケモンGOだけど、何がそんなに凄いのか、ゲーム作りのヒントになるかと思いダウンロードして、ちょいとハマってみた。
●職場は東京のど真ん中である千代田区はこんな感じ
●23区外れた自宅付近はこんな感じ
●お盆で帰省した田舎はこんな感じ
<感想>
都内ではコンビニ以上にポケストップやらジムがありそれなりに楽しめた。
マクドナルドもジムになっている為か、仕事でたまに立ち寄る恵比寿のマクドナルドもほぼ満席、、、
一方、自宅付近ではときどきポケストップで桜が舞っているが、基本閑古鳥が鳴いてる、、、
ただし、図書館がジムになっているところでは、エアコンが聞いた中でジムバトルが出来る為か、ジムレベル8にも成長していたw
図書館恐るべし!
GoogleMapと連動しているシステムは面白いけど、エリアによってバラつきが出来てしまうので、
あくまで移動距離のみにスポットを当てたらまた違ったゲームが作れそう。
2016年7月17日日曜日
Unity学習Part2~Script編~
Unity学習を初めてそろそろ1ヶ月。
感想として、
とにかく楽でおもしろい!
libGDXに比べて、ゲーム作りに必要な便利グッツがなんでも用意されている。
こんなに裕福な家庭でぬるま湯に浸かってていいのか、と思うぐらい。
しかも、ゲーム作りがゲーム感覚で作れてしまうのがまたいい。
ガリガリコード書いて自分でロジック作り上げるのも楽しいけど、
Unity触ってしまうともうもとには戻れない気がする、、、
さて、せっかく勉強しているのでスクリプトの部分で勉強になったこともまとめておく。
<スクリプト編>
①キーの入力取得
・vector.x = Input.GetAxis("Horizontal") 左右カーソルキー(-1~1)
・vector.y = Input.GetAxis("Vertical") 上下カーソルキー(-1~1)
・Input.GetKey("z") zキー
・Input.GetButtonDown("Fire1") 画面タップやマウスのクリックを検知
※Fire1やHorizontalなどはInputManagerに事前設定されている入力名称
Editメニュー → Project Settings → Input → Input Manager
②加速度センサー入力取得
・vector.x = Input.acceleration.x
③エディターと実機で処理を分ける
・if(Application.isEditor) {
エディター処理
} else {
実機処理
}
④接触検知
・OnTirggerEnter コライダ-にオブジェクトが入った
・OnTriggerExit コライダ-からオブジェクトが外れた
・OnTriggerStay オブジェクト同士が接触している間、毎フレーム呼ばれる
⑤オブジェクトへ力を加える
・AddForce(direction * r.mass * 20.0f)
※directionは方向ベクトル
⑥ゲームがスタートしてからの秒数をfloat値で取得
・Time.time
⑦オブジェクトの位置に加算
・transform.Translate(100, 0, 0)
x方向に100加算
注:transform.position.x = 100 のように直接値を変更できない
仮の変数にコピーする方法
Vector3 pos = transform.position;
pos.y = 100;
transform.position = pos;
⑧Debugクラス
・Debug.Log関数 関数に渡した文字列とその場所のスタックトレースをConsoleビューで確認できる
・Debug.Break関数 呼び出されたタイミングでUnityプレビューを一時停止する
⑨プレファブからオブジェクトを動的に生成
・GameObject obj = (GameObject)Instantiate(プレファブ,位置,向き);
⑩Transformコンポーネントのforwardパラメータ
・Transform.forward そのオブジェクトが向いている方向を取得
⑪RigidBody.AddTorque
・回転する力を加える
RigidBody.AddTorque(new Vector3(0, 10, 0))
y軸に10の力、すなわち水平に回転
⑫ランダム値取得
・Random.Range(0, 10) 0~10のランダム値取得
⑬クリックもしくはタップした位置を取得
・Input.mousePosition
⑭親オブジェクトの設定
・obj.transform.parent = parentobj.transform
⑮オブジェクト削除
・Destroy(obj)
※ゲームオブジェクトだけでなくオブジェクトにアタッチされたコンポーネントに対しても有効
⑯疑似マルチスレッドのコルーチン
・あたかも並列処理しているかのように動作させることが出来る。
疑似マルチスレッドのようなもの。
・コルーチンを開始させる関数
StartCoroutine(コルーチン型)
・コルーチンを定義
IEnumerator コルーチン () {
yield return new WaitForSeconds(1.0f); ←
処理内容
}
※WaitForSeconds(1.0f) 引数で指定した秒数が経過するまでその場でフレームをスキップ
⑰LateUpdate関数
・すべてのUpdate関数の処理が終わった後に処理される
⑱線形補間関数でスムージング
・Vector3.Lerp(現在のポジション,目標のポジション,一定の割合で距離を縮める)
⑲オブジェクトの表示非表示
・obj.SetActive(false) 非表示になる
⑳シーンの切り替え
・using UnityEngine.SceneManagementを追加
・SceneManager.LoadScene("sceneName");
※Unity5.3でApplication.LoadLevel("sceneName")は非推奨になったらしい
・File → Build Settings → Scene In Buildリストへシーンファイルを追加しておく
追加したいシーンを編集画面に表示した状態でBuild Settingsを開きAdd Currentボタンを押す
※一番上に設定したシーンが起動時の最初のシーンとなるのでTitleシーンを一番最初に追加
㉑enableフラグ
・enabled = false;
そのコンポーネントの機能を停止(Updateを止める)する
※Inspectorビュー上のコンポーネント名の左側のチェックボックスと紐づいている
㉒Invoke関数で時間差処理
・指定秒数後に指定メソッドを呼び出す
Invoke("method", 2.0f);
㉓簡易的なデータ保存
・PlayerPrefs.GetInt(”HighScore”) HighScoreラベルの値をInt型で読込
・PlayerPrefs.SetInt(”HighScore”) HighScoreラベルの値をInt型で保存
㉔SendMessageでみんなに知らせる
・同オブジェクトに追加されているコンポーネントにイベントを通知する
SendMessage(”イベント名”, オプション指定);
※オプションにSendMessageOptions.DontRequireReceiverを指定することでメッセージを送った先にメソッドがなくてもエラーを出力しない
㉕Awake関数で一番乗り
・オブジェクトが生成された瞬間に呼ばれる為、コンポーネントの取得をすべてのオブジェクトのStart関数より早く行える
※Start関数はオブジェクトが生成後、初めてのフレーム前で呼ばれる為、厳密にはロスが生じる
※Awake関数内で他オブジェクトを操作するコードを書くとNull参照が起こる可能性があるので注意
㉖Main Cameraを参照する
・Main Cameraオブジェクトには、デフォルトでMain Cameraタグが設定されている為、以下コードで参照が出来る
Camera.main.メソッド
㉗複数のAudioSourceを扱う
・エフェクトなどを鳴らす場合はAudioSourceコンポーネントを追加してAudio Clipパラメータへデータをセットするのだが、AudioSourceコンポーネントには一つのAudioClipしか設定できない為、複数のエフェクトを扱う場合は複数のAudioSourceコンポーネントを追加することになる。
複数のAudioSourceコンポーネントをScriptで扱うには以下のようにする
//メンバ変数
AudioSource jumpSound;
AudioSource breakSound;
AudioSource[] audioSources;
void Start ()
{
//配列としてオーディオソース取得
audioSources = GetComponents<AudioSource>();
//※GetComponentではなく後ろにsを付ける
jumpSound = audioSources[0];
breakSound = audioSources[1];
//※AudioSourceを追加した順番に配列に格納される
}
//ジャンプボタンが押されたらジャンプ処理実行
void jump ()
{
//サウンド再生
jumpSound.Play();
}
//何かに衝突したら死亡処理
void OnCollisionEnter2D (Collision2D collision)
{
//サウンド再生
breakSound.Play();
}
㉘最大値と最小値をさくっと管理
・value = Mathf.Clamp(value, min, max);
たったこの一文で指定範囲を超えたら最大値、最小値で補正してくれる優れもの!
㉙円で指定した半径の中だけで移動させる
・ pkayer : キャラクター
center : 円の中心
radius : 半径
Vector3 dist = player.position - center.transform.position;
dist = Vector3.ClampMagnitude(dist, radius);
player.transform.position = center.transform.position + dist;
ClampMagnitudeでベクトル間距離が指定した最大値以上にならないように管理
<あとがき>
Unity&C#初心者なもので、一冊読み終わるころには項目数が結構伸びてしまった、、、
思ったよりも便利な関数がたくさんあり、さすがC#、いやUnityのおかげかな。
感想として、
とにかく楽でおもしろい!
libGDXに比べて、ゲーム作りに必要な便利グッツがなんでも用意されている。
こんなに裕福な家庭でぬるま湯に浸かってていいのか、と思うぐらい。
しかも、ゲーム作りがゲーム感覚で作れてしまうのがまたいい。
ガリガリコード書いて自分でロジック作り上げるのも楽しいけど、
Unity触ってしまうともうもとには戻れない気がする、、、
さて、せっかく勉強しているのでスクリプトの部分で勉強になったこともまとめておく。
<スクリプト編>
①キーの入力取得
・vector.x = Input.GetAxis("Horizontal") 左右カーソルキー(-1~1)
・vector.y = Input.GetAxis("Vertical") 上下カーソルキー(-1~1)
・Input.GetKey("z") zキー
・Input.GetButtonDown("Fire1") 画面タップやマウスのクリックを検知
※Fire1やHorizontalなどはInputManagerに事前設定されている入力名称
Editメニュー → Project Settings → Input → Input Manager
②加速度センサー入力取得
・vector.x = Input.acceleration.x
③エディターと実機で処理を分ける
・if(Application.isEditor) {
エディター処理
} else {
実機処理
}
④接触検知
・OnTirggerEnter コライダ-にオブジェクトが入った
・OnTriggerExit コライダ-からオブジェクトが外れた
・OnTriggerStay オブジェクト同士が接触している間、毎フレーム呼ばれる
⑤オブジェクトへ力を加える
・AddForce(direction * r.mass * 20.0f)
※directionは方向ベクトル
⑥ゲームがスタートしてからの秒数をfloat値で取得
・Time.time
⑦オブジェクトの位置に加算
・transform.Translate(100, 0, 0)
x方向に100加算
注:transform.position.x = 100 のように直接値を変更できない
仮の変数にコピーする方法
Vector3 pos = transform.position;
pos.y = 100;
transform.position = pos;
⑧Debugクラス
・Debug.Log関数 関数に渡した文字列とその場所のスタックトレースをConsoleビューで確認できる
・Debug.Break関数 呼び出されたタイミングでUnityプレビューを一時停止する
⑨プレファブからオブジェクトを動的に生成
・GameObject obj = (GameObject)Instantiate(プレファブ,位置,向き);
⑩Transformコンポーネントのforwardパラメータ
・Transform.forward そのオブジェクトが向いている方向を取得
⑪RigidBody.AddTorque
・回転する力を加える
RigidBody.AddTorque(new Vector3(0, 10, 0))
y軸に10の力、すなわち水平に回転
⑫ランダム値取得
・Random.Range(0, 10) 0~10のランダム値取得
⑬クリックもしくはタップした位置を取得
・Input.mousePosition
⑭親オブジェクトの設定
・obj.transform.parent = parentobj.transform
⑮オブジェクト削除
・Destroy(obj)
※ゲームオブジェクトだけでなくオブジェクトにアタッチされたコンポーネントに対しても有効
⑯疑似マルチスレッドのコルーチン
・あたかも並列処理しているかのように動作させることが出来る。
疑似マルチスレッドのようなもの。
・コルーチンを開始させる関数
StartCoroutine(コルーチン型)
・コルーチンを定義
IEnumerator コルーチン () {
yield return new WaitForSeconds(1.0f); ←
処理内容
}
※WaitForSeconds(1.0f) 引数で指定した秒数が経過するまでその場でフレームをスキップ
⑰LateUpdate関数
・すべてのUpdate関数の処理が終わった後に処理される
⑱線形補間関数でスムージング
・Vector3.Lerp(現在のポジション,目標のポジション,一定の割合で距離を縮める)
⑲オブジェクトの表示非表示
・obj.SetActive(false) 非表示になる
⑳シーンの切り替え
・using UnityEngine.SceneManagementを追加
・SceneManager.LoadScene("sceneName");
※Unity5.3でApplication.LoadLevel("sceneName")は非推奨になったらしい
・File → Build Settings → Scene In Buildリストへシーンファイルを追加しておく
追加したいシーンを編集画面に表示した状態でBuild Settingsを開きAdd Currentボタンを押す
※一番上に設定したシーンが起動時の最初のシーンとなるのでTitleシーンを一番最初に追加
㉑enableフラグ
・enabled = false;
そのコンポーネントの機能を停止(Updateを止める)する
※Inspectorビュー上のコンポーネント名の左側のチェックボックスと紐づいている
㉒Invoke関数で時間差処理
・指定秒数後に指定メソッドを呼び出す
Invoke("method", 2.0f);
㉓簡易的なデータ保存
・PlayerPrefs.GetInt(”HighScore”) HighScoreラベルの値をInt型で読込
・PlayerPrefs.SetInt(”HighScore”) HighScoreラベルの値をInt型で保存
㉔SendMessageでみんなに知らせる
・同オブジェクトに追加されているコンポーネントにイベントを通知する
SendMessage(”イベント名”, オプション指定);
※オプションにSendMessageOptions.DontRequireReceiverを指定することでメッセージを送った先にメソッドがなくてもエラーを出力しない
㉕Awake関数で一番乗り
・オブジェクトが生成された瞬間に呼ばれる為、コンポーネントの取得をすべてのオブジェクトのStart関数より早く行える
※Start関数はオブジェクトが生成後、初めてのフレーム前で呼ばれる為、厳密にはロスが生じる
※Awake関数内で他オブジェクトを操作するコードを書くとNull参照が起こる可能性があるので注意
㉖Main Cameraを参照する
・Main Cameraオブジェクトには、デフォルトでMain Cameraタグが設定されている為、以下コードで参照が出来る
Camera.main.メソッド
㉗複数のAudioSourceを扱う
・エフェクトなどを鳴らす場合はAudioSourceコンポーネントを追加してAudio Clipパラメータへデータをセットするのだが、AudioSourceコンポーネントには一つのAudioClipしか設定できない為、複数のエフェクトを扱う場合は複数のAudioSourceコンポーネントを追加することになる。
複数のAudioSourceコンポーネントをScriptで扱うには以下のようにする
//メンバ変数
AudioSource jumpSound;
AudioSource breakSound;
AudioSource[] audioSources;
void Start ()
{
//配列としてオーディオソース取得
audioSources = GetComponents<AudioSource>();
//※GetComponentではなく後ろにsを付ける
jumpSound = audioSources[0];
breakSound = audioSources[1];
//※AudioSourceを追加した順番に配列に格納される
}
//ジャンプボタンが押されたらジャンプ処理実行
void jump ()
{
//サウンド再生
jumpSound.Play();
}
//何かに衝突したら死亡処理
void OnCollisionEnter2D (Collision2D collision)
{
//サウンド再生
breakSound.Play();
}
㉘最大値と最小値をさくっと管理
・value = Mathf.Clamp(value, min, max);
たったこの一文で指定範囲を超えたら最大値、最小値で補正してくれる優れもの!
㉙円で指定した半径の中だけで移動させる
・ pkayer : キャラクター
center : 円の中心
radius : 半径
Vector3 dist = player.position - center.transform.position;
dist = Vector3.ClampMagnitude(dist, radius);
player.transform.position = center.transform.position + dist;
ClampMagnitudeでベクトル間距離が指定した最大値以上にならないように管理
<あとがき>
Unity&C#初心者なもので、一冊読み終わるころには項目数が結構伸びてしまった、、、
思ったよりも便利な関数がたくさんあり、さすがC#、いやUnityのおかげかな。
2016年7月10日日曜日
Unity開発:XCodeでビルド出来ない
サンプルアプリも出来上がったのでiOS用にビルドして、
ブンブンうるさいMacminiへデータ移行
これでついにiOS用にアプリを動かせる~
と期待を込めてXCodeで読み込もうとすると
MapFileParser.sh: Permission deniedなるエラーログ吐き出し。。。
いろいろググってみるとここが参考になった
http://forum.unity3d.com/threads/mapfileparser-sh-permission-denied-not-set-as-executable-in-unity-4-6-8p1.352136/
どうやら、MapFileParser.sh ファイルに実行可能権限がないことが問題らしい。
ターミナルを使って対象ファイルに実行権限を付ければいいのだが、
Macでターミナルってどこにあるの?
そもそもコマンド忘れてる、、、
っでここ参考にしながらターミナル起動
http://techacademy.jp/magazine/5155
アプリケーションフォルダ > ユーティリティフォルダ > ターミナル.app
っでプロジェクトファイルはデスクトップに置いてあるので以下コマンドでフォルダ移動
cd Desktop/[プロジェクトファイル名]
っで、ファイルに付いている権限を確認してみる
ls -l
問題のMapFileParser.shファイルの権限は以下の通りだった
-rw-r--r--
やはり実行権限を表す x がなかったので実行権限を以下コマンドで追加してやる
chmod +x MapFileParser.sh
コマンド実行後、再度権限を確認してみると、
-rwxr-xr-x
うん、ちゃんと実行権限が追加された。
改めてビルドしてみると、ちゃんと実機で動いた!!
感動です。
今回は慣れないコマンドまで使っただけあって、達成感が半端ねぇだで。
2016年7月3日日曜日
Unity学習Part1~オブジェクト編~
Unityも無料化されて手を出しやすくなったので手を出してみた。
さっそくAmazonさんと相談した結果
Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発
吉谷 幹人
この本でスタートダッシュ!
せっかくなので、勉強しつつ覚えた事をまとめてみようかと。
<オブジェクト編>
①アセットのインポート
Assetsメニュー → Import Package → Custom Pacage
インポートする素材にチェックを入れて右下のImportボタンをクリック
②オブジェクト
・Cube
Hierarche → Create → 3D Object → Cube
※オブジェクト名変更はF2押しながら選択
※オブジェクトの複製はCtrl + D
③コライダ―のみ範囲を変更する場合
オブジェクト選択 → Inspector ビュー → Box Colliderコンポーネント → Edit Colliderボタンをクリック
Sceneビュー中のコライダ―範囲(緑色の枠)をドラッグして編集
④マテリアル作成
Project → Create → Material
⑤マテリアルにテクスチャ適用
Material選択 → Inspectorビュー → Albedoへテクスチャをドラッグ&ドロップ
※直接色を指定する場合はAlbedoをクリックして色を指定する
⑥オブジェクトへマテリアルを適用
オブジェクト選択 → Inspectorビュー → Mesh Renderer → MaterialsのElement 0 へマテリアルをドラッグ&ドロップ
⑦マテリアルの質感
マテリアルを選択 → Inspectorビュー
・Metallicパラメーター どれだけ金属らしいか、低いと土や石っぽくなる
・Smmothnessパラメーター 表面のなめらかさ
⑧周囲の映り込みを反映した鏡のような素材
Hierarche → Create → Light → Reflection Probe
⑨各コンポーネント
オブジェクトに対してコンポーネントを追加することで機能を上乗せできる
・Transformコンポーネント
位置、大きさを扱う
オブジェクトに対してデフォルトで設定されているコンポーネント
・Mesh Filterコンポーネント
3Dの形を制御する機能
・Mesh Filterコンポーネント
見た目をカメラに描画する機能
・Rigidbodyコンポーネント
オブジェクトに物理挙動をさせる(重力など)
オブジェクト選択 → Componentメニュー → Physics → Rigidbody
・Massパラメータ 物体の重さ(動きにくくなる)
・Dragパラメータ 空気抵抗(大きくすると翅のような遅い落下速度)
・Angular Dragパラメータ 回転に対する空気抵抗(回転が止まりやすくなる)
・Is Kinematicパラメータ 物理エンジンによって動かなくなる(Scriptで制御可能)
・Constraintsパラメータ 物理的な制約(指定した方向には動かなくなる)
⑩ある一点から物体を照らす光源
Hierarchyビュー → Create → Light → Point Light
※Render Mode
そのライトが重要かどうかの設定
重要でない場合は簡略化され負荷を下げる
⑪透明のオブジェクト
・空のオブジェクト作成
Hierarche → Create → Create Empty
・空のオブジェクト選択 → Componentメニュー → Physics → Box Collider
⑫Rigidbodyのスリープ
外部から力をくわえられない限り物理的な挙動はしなくなりCPU節約の為スリープモードになる
スリープになることが都合が悪い場合は、スリープモードを解除する
オブジェクト選択 → Editメニュー → Project Settings → Physics → Sleep Thresholdを0にする
⑬Physics Material
物質的な材質を表現してゴムのように跳ねるボールなどを作成できる
Projectビュー → Create → Phisic Material
Bouncinessパラメータ 反発係数
適用したいオブジェクト選択 → Sphere Colliderコンポーネント → Materialパラメータへドラッグ&ドロップ
⑭タグの設定
Edit → Project Settings → Tags And Layers → Inspectorビュー → Tagsトグルから+ボタンで追加
タグを設定したいオブジェクト選択 → Inspectorビュー → Tagをドロップダウンリストから選択
<Sceneビュー操作編>
・シーンギズモ
右上に表示されているやつで各軸にカメラの向きを合わせられる。
・投影モード
シーンギズモの下部にラベルで表示されている
○Perspectiveモード シーンの奥行きなども考慮したパースがかかる状態
○Isometricモード パースがかからない状態
・ライティングの設定
Hierarche → Directional Light
Intensityパラメータで明るさ調整
Show Typeで影の有無
・環境光の調整
Windowメニュー → Lighting → Inspectorビュー → Ambient Intensity
<その他設定編>
・エディターの変更
Preferences → External tools → External Script Editorから変更
※デフォルトではMonoDevelopエディタ
・実機検証の為の設定
Editメニュー → Project Settings → Player → Inspector → ビルドするプラットフォームのアイコンタブ選択
・Default Orientation 端末の向き設定
・Other Settings プロジェクトを一意に識別する為のパッケージ名
※Macでビルドする際に重要になる
さっそくAmazonさんと相談した結果
Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発
吉谷 幹人
この本でスタートダッシュ!
せっかくなので、勉強しつつ覚えた事をまとめてみようかと。
<オブジェクト編>
①アセットのインポート
Assetsメニュー → Import Package → Custom Pacage
インポートする素材にチェックを入れて右下のImportボタンをクリック
②オブジェクト
・Cube
Hierarche → Create → 3D Object → Cube
※オブジェクト名変更はF2押しながら選択
※オブジェクトの複製はCtrl + D
③コライダ―のみ範囲を変更する場合
オブジェクト選択 → Inspector ビュー → Box Colliderコンポーネント → Edit Colliderボタンをクリック
Sceneビュー中のコライダ―範囲(緑色の枠)をドラッグして編集
④マテリアル作成
Project → Create → Material
⑤マテリアルにテクスチャ適用
Material選択 → Inspectorビュー → Albedoへテクスチャをドラッグ&ドロップ
※直接色を指定する場合はAlbedoをクリックして色を指定する
⑥オブジェクトへマテリアルを適用
オブジェクト選択 → Inspectorビュー → Mesh Renderer → MaterialsのElement 0 へマテリアルをドラッグ&ドロップ
⑦マテリアルの質感
マテリアルを選択 → Inspectorビュー
・Metallicパラメーター どれだけ金属らしいか、低いと土や石っぽくなる
・Smmothnessパラメーター 表面のなめらかさ
⑧周囲の映り込みを反映した鏡のような素材
Hierarche → Create → Light → Reflection Probe
⑨各コンポーネント
オブジェクトに対してコンポーネントを追加することで機能を上乗せできる
・Transformコンポーネント
位置、大きさを扱う
オブジェクトに対してデフォルトで設定されているコンポーネント
・Mesh Filterコンポーネント
3Dの形を制御する機能
・Mesh Filterコンポーネント
見た目をカメラに描画する機能
・Rigidbodyコンポーネント
オブジェクトに物理挙動をさせる(重力など)
オブジェクト選択 → Componentメニュー → Physics → Rigidbody
・Massパラメータ 物体の重さ(動きにくくなる)
・Dragパラメータ 空気抵抗(大きくすると翅のような遅い落下速度)
・Angular Dragパラメータ 回転に対する空気抵抗(回転が止まりやすくなる)
・Is Kinematicパラメータ 物理エンジンによって動かなくなる(Scriptで制御可能)
・Constraintsパラメータ 物理的な制約(指定した方向には動かなくなる)
⑩ある一点から物体を照らす光源
Hierarchyビュー → Create → Light → Point Light
※Render Mode
そのライトが重要かどうかの設定
重要でない場合は簡略化され負荷を下げる
⑪透明のオブジェクト
・空のオブジェクト作成
Hierarche → Create → Create Empty
・空のオブジェクト選択 → Componentメニュー → Physics → Box Collider
⑫Rigidbodyのスリープ
外部から力をくわえられない限り物理的な挙動はしなくなりCPU節約の為スリープモードになる
スリープになることが都合が悪い場合は、スリープモードを解除する
オブジェクト選択 → Editメニュー → Project Settings → Physics → Sleep Thresholdを0にする
⑬Physics Material
物質的な材質を表現してゴムのように跳ねるボールなどを作成できる
Projectビュー → Create → Phisic Material
Bouncinessパラメータ 反発係数
適用したいオブジェクト選択 → Sphere Colliderコンポーネント → Materialパラメータへドラッグ&ドロップ
⑭タグの設定
Edit → Project Settings → Tags And Layers → Inspectorビュー → Tagsトグルから+ボタンで追加
タグを設定したいオブジェクト選択 → Inspectorビュー → Tagをドロップダウンリストから選択
<Sceneビュー操作編>
・シーンギズモ
右上に表示されているやつで各軸にカメラの向きを合わせられる。
・投影モード
シーンギズモの下部にラベルで表示されている
○Perspectiveモード シーンの奥行きなども考慮したパースがかかる状態
○Isometricモード パースがかからない状態
・ライティングの設定
Hierarche → Directional Light
Intensityパラメータで明るさ調整
Show Typeで影の有無
・環境光の調整
Windowメニュー → Lighting → Inspectorビュー → Ambient Intensity
<その他設定編>
・エディターの変更
Preferences → External tools → External Script Editorから変更
※デフォルトではMonoDevelopエディタ
・実機検証の為の設定
Editメニュー → Project Settings → Player → Inspector → ビルドするプラットフォームのアイコンタブ選択
・Default Orientation 端末の向き設定
・Other Settings プロジェクトを一意に識別する為のパッケージ名
※Macでビルドする際に重要になる
2016年7月1日金曜日
Google Analyticswを使ってみる
さて、アプリをGooglePlayへ無事送り出すことが出来て、
GooglePlayDeveloperConsoleでダウンロード数や訪問者数とかは確認出来るし、
AdMobの管理画面で広告の表示回数とクリック数がチェックできるから楽しいんだけど、
やっぱりもっと詳しい情報知りたくなるもので、、
ってことで、Google Analyticsを組み込んでみようとチャレンジ!
https://developers.google.com/analytics/devguides/collection/android/v4/
ここの説明通りいろいろ手を加えてみた!
(正直もうGradleには触れたくなかったが)
① build.gradle(Project:プロジェクト名)にちょこちょこっとコード追加
・classpath 'com.google.gms:google-services:1.5.0-beta2'
② build.gradle(Module:android)にもちょこちょこ追加
・apply plugin: 'com.google.gms.google-services'
・compile 'com.google.android.gms:play-services-analytics:8.4.0'
③ダウンロードした
google-services.json
ファイルをプロジェクトフォルダのandroidフォルダ直下へぶち込み
いざビルドしてみると、こんなエラー
エラーログ:
Error:Gradle: Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzpq;
Error:Gradle: Execution failed for task ':android:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' finished with non-zero exit value 2
しかも
build.gradle(Module:android)の
の
compile 'com.google.android.gms:play-services-base:9.0.1'
部分に波線が、、、っでこんなメッセージが、
All com.google.android.gms libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 9.0.1, 8.4.0. Examples include com.google.android.gms:play-services-base:9.0.1 and com.google.android.gms:play-services-analytics:8.4.0
いろいろググってみたもののいまいち解決につながるヒントなく、、、
とりあえず、Google翻訳様に通訳してもらうと、
すべてのcom.google.android.gmsライブラリは(混合バージョンは、実行時のクラッシュを引き起こす可能性が)まったく同じバージョンの仕様を使用する必要があります。見つかったバージョン9.0.1、8.4.0。プレイサービスベース:9.0.1とcom.google.android.gms:例としてはcom.google.android.gmsを含むプレイ-サービス-分析を:8.4.0
要するに、、、
「9.0.1と8.4.0のバージョンが違うだら~」
っで、
GooglePlayDeveloperConsoleでダウンロード数や訪問者数とかは確認出来るし、
AdMobの管理画面で広告の表示回数とクリック数がチェックできるから楽しいんだけど、
やっぱりもっと詳しい情報知りたくなるもので、、
ってことで、Google Analyticsを組み込んでみようとチャレンジ!
https://developers.google.com/analytics/devguides/collection/android/v4/
ここの説明通りいろいろ手を加えてみた!
(正直もうGradleには触れたくなかったが)
① build.gradle(Project:プロジェクト名)にちょこちょこっとコード追加
・classpath 'com.google.gms:google-services:1.5.0-beta2'
② build.gradle(Module:android)にもちょこちょこ追加
・apply plugin: 'com.google.gms.google-services'
・compile 'com.google.android.gms:play-services-analytics:8.4.0'
③ダウンロードした
google-services.json
ファイルをプロジェクトフォルダのandroidフォルダ直下へぶち込み
いざビルドしてみると、こんなエラー
エラーログ:
Error:Gradle: Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzpq;
Error:Gradle: Execution failed for task ':android:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' finished with non-zero exit value 2
しかも
build.gradle(Module:android)の
compile 'com.google.android.gms:play-services-base:9.0.1'compile 'com.google.android.gms:play-services-ads:9.0.1'compile 'com.google.android.gms:play-services-auth:9.0.1'compile 'com.google.android.gms:play-services-gcm:9.0.1'compile 'com.google.android.gms:play-services-analytics:9.0.1'
の
compile 'com.google.android.gms:play-services-base:9.0.1'
部分に波線が、、、っでこんなメッセージが、
All com.google.android.gms libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 9.0.1, 8.4.0. Examples include com.google.android.gms:play-services-base:9.0.1 and com.google.android.gms:play-services-analytics:8.4.0
いろいろググってみたもののいまいち解決につながるヒントなく、、、
とりあえず、Google翻訳様に通訳してもらうと、
すべてのcom.google.android.gmsライブラリは(混合バージョンは、実行時のクラッシュを引き起こす可能性が)まったく同じバージョンの仕様を使用する必要があります。見つかったバージョン9.0.1、8.4.0。プレイサービスベース:9.0.1とcom.google.android.gms:例としてはcom.google.android.gmsを含むプレイ-サービス-分析を:8.4.0
要するに、、、
「9.0.1と8.4.0のバージョンが違うだら~」
っで、
compile 'com.google.android.gms:play-services-analytics:8.4.0'
の部分を
compile 'com.google.android.gms:play-services-analytics:9.0.1'
に書き換えたらビルド通った!!
あと、
apply plugin: 'com.google.gms.google-services'
これも削除しないとダメっぽい。
公式の説明通りにやればいいってものじゃないのか。。
トリック多すぎ
さてさて、あとはAnalyticsを組み込んだapkでリリースして、
無事訪問者の履歴が取得できれば問題ないのだが、、、
公式通りやってないのが一つ不安材料として残る。
2016年6月26日日曜日
AndroidGameリリースへ
初のandroidゲームが完成した。
その名も「AMAMORI」
ちょうど一年前にlibGDXを勉強がてらサンプルゲーム作りから始まって、ようやくリリースにこぎつけた!
長い長い道のり、、、
備忘録に載せるべきネタがたくさんあったにもかかわらず、一度データが吹っ飛んだおかげでネタも吹っ飛んだ。
よって、備忘録ではなくただの思い出を箇条書きにしてみようと思う。
1.『GDX Texture Packer』 を使ってテクスチャアトラスを半自動化させ作業効率UP!
2.フリーフォントを探しまくって、ゲームっぽいBitMapFont導入!
3.『Piskel』でドットキャラ作りまくり!
4.『Pixi Tracker』でSoundEffect作りまくり!
5.Google、EclipseでAndroid開発サポート終了!
に伴いAndroidStudioへお引越し
ここからビルドエラーやらなんやらで2週間足止め、、、
(ここんとこの備忘録たくさんあったのになぁ)
7.そしてリリース
登録:
投稿 (Atom)