*

UnityのAppleTV対応つまづいたメモ

公開日: : 最終更新日:2016/01/04 AppStore, iOS, Unity勉強中

音が鳴らない

Unity tvos AudioClipとかでググっても情報なし。
散々いろいろやった末にBuild&settingsのPlayer Settings…で、「Prepare iOS for Recording」のチェックを外したら鳴った。
Build_Settings_と_opening_unity_-_FPSTV_-_Apple_TV__Personal___OpenGL_4_1_
iOS版で、EveryPlayを導入したときにチェックが入っていたやつみたいで、EveryPlay対応してないんやろーと思って消したけどこの設定は残ったままだった。融通効かないUnityちゃん…。

uGUIをSiri Remoteに対応させる

http://forum.unity3d.com/threads/official-unity-for-apple-tv-open-beta.371324/
ここの情報にいろいろと助けられた。
[Edit]-[Project Settings]-[Input]で右側に出てくるinspectorの中で、Submitという項目があって、Positive Buttonがreturnキーになっているやつを見つける。
これの「Alt Positive Button」ってつやつを「joystick button 14」に変えるとSiri Remoteのタッチパッドを押し込んだときに反応するらしい。まずはそれを設定。
opening_unity_-_FPSTV_-_Apple_TV__Personal___OpenGL_4_1_

uGuiのCanvasだけど、「Canvas Scaler」の「Reference Resolution」を640×1136で作っていた、縦画面。
これを960×540にしてみてそれぞれのUIの配置をいぢってみた。
「Game」の画面のアスペクトは16:9にして、こんな感じに配置。
platform_unity_-_FPSTV_-_Apple_TV__Personal___OpenGL_4_1_

そんで、ゲームオーバーになったら[リトライ][Rate(App Storeに飛べないので結局無くす予定)][Game Center(Leader Board)]とボタンを
gameOverRetry.gameObject.SetActive(true);
gameOverRate.gameObject.SetActive(true);
gameOverRanking.gameObject.SetActive(true);
みたいに表示しているのだけど、Siri Remoteではじめからどれかボタンが選択されている状態にするため、
gameOverRetry.GetComponent().Select();
というのを追加。ButtonがImageなので、選ばれていてもまったく変わらないし、しゃーないのでこうする。
platform_unity_-_FPSTV_-_Apple_TV__Personal___OpenGL_4_1_ 2
ButtonのUIを選んで、inspectorの「Button(Script)」のTransitionを「Color Tint」のまま、選ばれているときの「Highlighted Color」を”FF8080FF”にした。Rを全開で、GとBを半分ずつ。こうすると選ばれているやつが赤っぽくなる。汚らしいけど。時間があればTransitionを「Sprite Swap」なんかにして選ばれてる時用のボタン画像とかにすり替えたりしたい。Animationもあるのだけど、Button自体にAnimatorを付けていたらWarningが出まくって、ButtonにImageぶら下げて、そこにAnimator付けてた。
Unity5からか、
Parameter ‘Normal’ does not exist.
Parameter ‘Pressed’ does not exist.
Parameter ‘Highlighted’ does not exist.

みたいに怒られるやつの対策。
http://forum.unity3d.com/threads/weird-button-warning.298673/

で、それぞれのボタンのTint ColorのHighlightedを設定。これでどれが選ばれてるか強調表示される。

もうひとつ、「Navigation」を「Explicit」にして、Select On Left/Select On Rightで移動する先のボタンをそれぞれ隣接するButtonオブジェクトを流し込む。
これでSiri Remoteを左右にスワイプするとボタンの移動ができるようになった。Automaticもあったけど、ほかにもいろいろUIが同居してたのでいちいち設定することにした。そしたらうまくいった。
なんかでもSiri Remoteでスワイプしたあと、右端とかで指を止めると延々と右が押しっぱなしになるのがなんかすごくイヤンなんだけど、Inputの項目とかで抑制できるのかしらんわからん。

platform_unity_-_FPSTV_-_Apple_TV__Personal___OpenGL_4_1_ 3

もひとつ、http://forum.unity3d.com/threads/official-unity-for-apple-tv-open-beta.371324/に、
EventSystemの設定をしろと。「First Selected」で一番はじめに選ばれてるUIを流し込んでおく。
んだけど、どのUIもはじめ非表示にしてるんで意味なかったから、
gameOverRetry.GetComponent().Select();
をスクリプトに書いたのであった。シーン切り替えして、はじからuGUIが出てるならここの設定だけでオケ。

もうひとつ、「Standalone Input Module」の「Force input module」をチェックしろとあったのだけど、5.3.1f1にそんな設定項目ないんだなこれが。いちおう似たような「Force Module Active」をチェックしてみて、動作したけどForceしたら逆に動かなくなるようなきがするのだけどさっぱりよかんない。やんなくてもいいかもしんない。

Input系をSiri Remoteに対応する

今まではiPhoneで画面タッチされたらRaycastを飛ばして動かしたいオブジェクトにコライダーがぶつかるか見て、ぶつかったらタッチ開始にして、ドラッグとかタッチ終了を見ていた。

if(Input.GetMouseButtonDown(0)) {
Ray ray = Camera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit = new RaycastHit();
if (Physics.Raycast(ray, out hit)){
GameObject obj = hit.collider.gameObject;
if (obj == objCollider) {
OnMouseDown();
}
}
}
if(Input.GetMouseButton(0)){
OnMouseDrag();
}
if(Input.GetMouseButtonUp(0)){
OnMouseUp();
}

Siri Remoteはオブジェクトをタッチするという雰囲気ではないので、Siri Remoteのタッチパッドがタッチされたらタッチ開始、そしてドラッグ、離されたらタッチ終了というイベントを呼ぶ

こんな感じ。

foreach(Touch touch in Input.touches) {

if (touch.phase == TouchPhase.Began) {
OnMouseDown();
}

if (touch.phase == TouchPhase.Moved) {
OnMouseDrag();
}
if (touch.phase == TouchPhase.Ended) {
OnMouseUp();
}

}

それぞれのイベント内では、

float dx = Input.GetAxis ("Horizontal");
float dy = Input.GetAxis ("Vertical");

という感じで、タッチパッドのタッチ位置-1〜dx〜+1、-1〜dy〜+1を取得してやる。

ドラッグしてなんか動かしたいときは、タッチ開始でその位置を起点にして記憶して、

void OnMouseDown() {
screenPosition = Camera.main.WorldToScreenPoint(touchObj.position);
mouse.x = screenPosition.x;
mouse.y = screenPosition.y;
isClicked = true;
}

ドラッグされたら差分を動かす、動かす量はてきとーに100.0倍とかにしてみた。

void OnMouseDrag() {
if (!isClicked) {
return;
}
float dx = Input.GetAxis ("Horizontal");
float dy = Input.GetAxis ("Vertical");

Vector3 dragPos = Camera.main.ScreenToWorldPoint(
new Vector3(mouse.x+(dx*100.0f), mouse.y+(dy*100.0f), screenPosition.z));
touchObj.MovePosition(dragPos);
}

タッチ終了で、移動完了

void OnMouseUp() {
if (!isClicked) {
return;
}
isClicked = false;
}

こまごましたもの

アプリの起動中にホームボタンを押したときにホームに戻らすかをスクリプトで指定しとくみたい。
はじめのシーンのAwake()の中に
UnityEngine.Apple.TV.Remote.allowExitToHome = true;
というのをぶちこんでおいた。

GameCenterの対応で#if UNITY_IPHONEで処理してたのだけれど、これだとAppleTVは呼ばれないような…。

プラットフォーム依存コンパイル
http://docs.unity3d.com/ja/current/Manual/PlatformDependentCompilation.html
のところにUNITY_TVOSとかUNITY_APPLETVが追加されてないので、UNITY_IOSに変えたら呼ばれるんじゃないかなーと試しているところ。

と思ったらあったわ、ドキュメント更新されてないのね、シクシク。

#if UNITY_IOS || UNITY_EDITOR || UNITY_TVOS

というわけで続く。。。


Author Profile

ま〜ち
ま〜ち
フリーランスのiPhone/iPadアプリ開発者、2児を保育園の送り迎えしながら日々ノマド創作生活をしています。
代表作 : 「コンプガチャ」(AppStore無料総合5位/無料ゲーム総合1位)、「美少女ブラ外しPutti!」(AppStore有料総合6位/エンターテインメント有料1位)、「星空時景」(AppStore有料総合3位/ライフスタイル有料1位)、「パワースポット写真集」(AppStore有料総合3位/ライフスタイル有料1位)、「ゆるゆりシェイクユー」、「ガリガリアイス」「ケントくんのiマニュアル」「パチスロアプリ全紹介」など。

関連記事

Icon1024x1024

MIKA・RIKA・TOUCH

つくりました、よろしくお願いします!! MIKA・RIKA・TOUCHカテゴリ: ゲーム現在の

記事を読む

build

Subview touchesEnded 送る to ParentView

iOS5から変わったとか。わっけっわっかっらっん。。。 旧) -(void) touches

記事を読む

build

Easy APNSとEasyAPNSPanel

Core Pushってゆーサービスを導入してみるけどバッヂの指定もできないしいろいろ融通が効かなすぎ

記事を読む

Fullscreen-1

SpriteHelperだけのスプライト表示

LevelHelperで配置してないやつはBatchNodeでCCSpriteしなきゃいけないみたい

記事を読む

Fullscreen-1

LevelHelperで配置してないLHSpriteをSpriteHelperから読み込んで配置とか

前に、SpriteHelperだけのスプライト表示 http://marchenterprise.

記事を読む

build

PHPをバージョンアップしたらMySQLに登録されるUTF-8文字列がエスケープされちゃって困った。

ニッチな話Easy APNSとEasyAPNSPanelってゆーのを使ってiOSアプリのPush通知

記事を読む

Fullscreen-1

LHSprite registerTouchBeganObserver

-(id) init { if( (self=)) { ... LHSprite

記事を読む

pr_1024x500

なんかどうもうまくいかないUnity5メモ

前回までのメモ i立ち食いそばカテゴリ: ゲーム現在の価格: 無料 やっとリリースできた

記事を読む

Fullscreen-2

【AppStore】有料アプリ売れないんだじぇ〜【総合50位くらい行っても】

なんかいろいろ申し訳ない感じで自分のTwitterとかFacebookでは極力つぶやかないで、しれっ

記事を読む

p3

GameCenterで友達のハイスコアでゲーム中にアイコン画像と名前を表示するやつ

あんまりゲームセンター流行ってないのよね。友達申請とかめったにしないでしょ? きっと同じことやるな

記事を読む

Ads

Ads

no image
UnityのAppleTV対応つまづいたメモ

音が鳴らない Unity tvos AudioClipとかでググって

ogp1200x630
Unity習作の第2弾『あみみとパズルとゾンビとドラゴンズ』がめでたくリリースとなりました

3月末に「アニメマンガゲームエンタメ親睦会」というのがFacebook

pr_1024x500
なんかどうもうまくいかないUnity5メモ

前回までのメモ i立ち食いそばカテゴリ: ゲーム現在の価格: 無

pr800x475_width_text
『i立ち食いそば』がAppStore/GooglePlayにて登場いたしました

兵士達を率いて駅そばへ駆け込め! 命を賭して通勤ラッシュに挑むF

Icon1024x1024
MIKA・RIKA・TOUCH

つくりました、よろしくお願いします!! MIKA・RIKA・TO

→もっと見る

PAGE TOP ↑