Windows Phone/Windows 10 Mobile に関するゲームパッド考察

ゲームパッドを使用することができるのか?

さて、「Windows Phone/Windows 10 MobileでGamePadは使用できるのか?」ですが、結論から先に言っておきます、条件付きで可能、ふつうは無理です。

WindowsPhone8/8.1用として実は「MOGA Game On Anywhere(以下 MOGA)」が出したコントローラーがBTを利用した(おそらく)シリアル通信的な方法で、使用できるようにしていました。
ただこれは専用SDKが提供されない限り使用できないという形で、更新をしていない状況から今後使用できることはないだろうと思います。

次に目を付けたのは「Windows8.1 UpDate2(以下 WP8.1UP2)」から解禁された「Bluetooth HID Profile」の存在です。
HID(Human Interface Device)、USBにもありますが所謂入力機器の受け取りができる機能です。

さてこれを実験だと思ったのですが、残念ながら手持ちの端末には「WP8.1UP2」が降りてこないという状況でしたが、この機能は「Windows 10 Mobile(以下W10M)」でも使用可能になりました。

これはやるしかないということで、いろいろ仕込んでいたのですが、まずは先だって開催された「Microsoft MVP Asia Meet Up」イベントに参加した際にMADOSMAをW10Mにアップされた方が持ってきているよなと思い、接続を試させていただくことにしました。

結果

BT機器があるということは認識するもののペアリングは却下されるという状況でした。
もちろんイベントの隙間を利用した短時間での確認のため、これだけで出来ないということは確定できないですが、正直どうしようと思いました(汗

次の一手

wp_ss_20150411_0003
あきらめるわけにもいかないので、1320にInsider Programでアップデートをかけて実験という形にしました。

wp_ss_20151211_0003
こちらでも認識(SS取れなかったですがキーボードHID認識のようです)はしました。

wp_ss_20151211_0004
そして、ペアリングも完了!

なら使うぞ!

UWP向けにAPIが追加されているのですが、その中に「Windows.Gaming.Input」というそのものずばりなAPIがあります。
で、APIを確認している限りではMobileに対する縛りはないようなので、「これは使える!」と実験開始

いきなりモバイルというわけにもいかないのでまずはDesktopUWPで実験、、、困ったことにWindows上では認識しているもののUWPのAPI上では存在しないというのが返ってきました。
とりあえずAPIの確認のためDevice転送でチェックしたところAPIはそのまま通りました。
機能宣言は「AllJoin」「Bluetooth」にはチェックを入れたものの、HIDに関する項目ないなこれ(汗
API条件に宣言しなければいけないようなことは記載されていないので、API自体はチェックなしでもエラーなく動きます。

さて、「Windows.Gaming.Input」ですが、内部的には「XInput」ではなかろうかと思います。
となるとMoga2では認識しないですよねこれ、、、
手持ちにXInput対応機器がないので、自分には検証しきれませんでした。

というわけで最初に書いた通りなのですが、「条件付きで可能 / ふつうは無理」が今のところの結論です。
もちろんもっと深く探っていけば可能になるんではと思ってはいます。
もう少しさっくり対応できるようになっていると「A端末とかi端末で出来るのに、WP出来ないから~」とは言われなくて済むかなーと

まあ、解放できない理由は、セキュリティーとか考えるとわからないでもないので………

というわけで、「ゲームコントローラー周りの対応状況をぼそっと公開してくれないかなー>MS様」等と書くためだけのネタ記事でした。

「Windows 10 Mobile」は良い端末ですし、まだまだこれからさらに良くなっていくことでしょう。

おまけ

さて、これだけで何なのでちょっとおまけを

WP_20151212_10_16_39_Pro
こんなのを入手したわけですよ。
ええ、ご想像の通りです…………「1320はUSB OTG非対応
何をつなごうが全く認識しません(;´Д`)

Windows Phone / Windows 10 Mobile Advent Calendar 2015」に参加しています。

裏ではいろいろ仕込んでるんですが、公開レベルに持っていけなくてこんな記事になりましたが、ほかの方の記事には良いものがあるので、是非一読を!

※追記(2015/12/12/21:30)

DirectInputじゃダメなの?

もちろんこうなれば「DirectInput」をラップ実装してというのは頭の片隅にあったのですが、XInputをストアアプリ荷を調べていた際に「XInput and DirectInput」というMicrosoftの公式ページを見つけましてそこに

Note Use of legacy DirectInput is not recommended, and DirectInput is not available for Windows Store apps.

レガシーでストアアプリには対応していないと書かれていました。

MADOSMAのWindows 10 Mobile版発売日決定!

マウスコンピュータがすでにリリースしていたWindowsPhone 8.1(以下WP8.1)スマホの「MADOSMA」はOSアップデートによるWindows 10 Mobile(以下W10M)への対応は表明されていました。

今回、W10MへのアップデートスケジュールとW10M搭載版の発売日などが発表されました。

マウス、「MADOSMA」のWindows 10 Mobile搭載版を12月4日発売~既存モデルのアップグレードサービスも開始

そして、秋葉原にあるマウスコンピュータのダイレクトショップ店頭ではすでに既存MADOSMAユーザー向けにW10Mへのアップデートサービスを開始しているそうです!

端末を預けて30分ほどでアップデートが完了するようですが、端末は初期化されるのでバックアップは利用者が行っておく必要があるそうです。

アップデートの形ですが、日本最速でのW10M提供ということになりますね!

WindowsPhone8.1アプリをリリースしました

Ama買取サービス非公式バーコード検索アプリ

Amazon買取サービス非公式バーコード検索アプリ

バーコードデータを手入力では面倒なので、バーコード読み取りを利用して検索できるようにしたアプリ
検索を実行するとWebブラウザが起動して買い取りURLを開きますが、ブラウザの設定を「モバイル用サイト」ではなく「デスクトップ用サイト」に変更する必要があります。

このアプリはAmazon社とは一切関係がない検索お助けツールアプリです。
Amazon Japanの検索にのみ対応しています。

wp_ss_20150712_0002

wp_ss_20150712_0003

MADOSMAもリリースされたことだし、何かアプリをと思い構想2日、WindowsPhone 8.1 SilverLight & C#で制作実質2日でした。

※追記 2015/07/16
 MADOSMAとLumia930で正常に動作しない可能性があるようです。
 カメラがデバッグに使用したLumia1320とは違いがあるようで、フォーカスと配置に対する処理に差があるようでMADOSMAを手に入れないと何が違うのかが判別できない状態です。
 使用できるように変更を考えてみます。

MWCでWindowsPhone日本発売の光明が増えました

Mobile World Congress(MWC) 2015でfreetelと京セラの端末が公開

マウスコンピュータに続いて国内メーカーから発表がありました。

freetelブランドの端末はMWC前にプレスリリースが行われました。
最新 Windows Phone OS 搭載スマートフォン、 2015 年夏までに国内発売予定のお知らせ
なんと夏までに出すという表明です。
freetelは日本向けのSIMフリー端末販売会社なので、日本向け端末が確定したことになります。

京セラはプロトタイプとして高耐久端末にWindowsPhone8.1を搭載したようです。
engadgetさんのレポート記事がありました。
京セラがWindows Phone 8.1スマホをMWC出展。『Windows Phoneは高耐久と親和性が高い』
元々のAndroid端末にWP8.1を搭載しましたという段階のようで、端末のボタンがAndroidのままですね

AcerからWindows10 for Phones対応確約端末が発表(日本発売未定)

PC watchさんにAcer社がWP8.1端末が出すとの記事が出ました。
Acer、79ユーロでWindows 10へのアップグレードを保証したスマホ
端末としては欧州向けローエンドですが、Acer社は日本向けにAndroid端末をブックオフ経由で発売していることを考えると、もしかして選択肢が増えるということかなと思いたいところです。

Microsoftからは新端末(日本発売未定)

MWCではMicrosoftからLumia640/640XLが発表されました。
端末としてはミドルレンジの端末になるようです。
追加の特徴としては「Office 365サブスクリプション1年分」と「OneDrive 1GB 1年分」が標準でサポートされ散ることでしょうか。

開発者に向けて

それぞれの端末はWindowsPhone8.1ではありますが、Windows 10 for Phonesが視野に入っているようで、時期が来ればOS更新が降ってくることになると思います。
Windows 10 からはさらにデスク/ノートOSとモバイルOSの融合が進みます。
A社やG社のOSに比べても使用率の大きなWindowsというデスク/ノート向けOSと連携するには非常に心強い環境が整ってきます。

もちろんデスク/ノート向けがそのまま動くということはないですが、いわゆるWindowsストアアプリであれば、ユニバーサルアプリとして、モバイルにもゲームコンソールにも展開可能になり強い連携を生み出すことができる基盤が、クラウド(Azure)も含んでOneSolution/OneStoaが実現してきます。

VisualStudioによるストアアプリ、マルチデバイス開発はC/C++/C#/HTML5(JavaScript)/F#等で可能になってきていますし、UnityやUnreal Engineなどによるマルチデバイス開発もできます。

開発の親和性も非常に高い環境ですので、ぜひ開発者の皆さんには飛び込んできてほしいと思います。

Lumia 535 is not a NOKIA Brand

Lumia 535 は Microsoft Lumia 535 として、ついに NOKIA のブランド名が消えて、Microsoft ブランドとして発表されました。

Microsoft Lumia 535 Single SIM
Microsoft Lumia 535 Dual SIM

搭載OSは「Windows Phone 8.1 with Lumia Denim」
Windows Phone 8.1 Update 1 の拡張ということらしいのですが、Cortanaの対応言語が増えたことなどのようです。

対応するバンドは「GSM network: 850 MHz, 900 MHz, 1800 MHz, 1900 MHz」「WCDMA network: Band 1 (2100 MHz), Band 8 (900 MHz)」
GSMは所謂2G、WCDMAは3Gです。
低価格端末なためかLTEは無しの模様

SIMサイズは「Micro SIM 」

メインカメラは「5.0MP」
フロントもあり

CPUは1.2GHzのクアッドコア(Snapdragon™ 200)
画面解像度は「qHD (960 x 540)」

Homeボタンなどはスクリーンキーになっている模様、出し入れできるタイプかなこれは?

価格は「110ユーロ~」で日本円で1万6千円くらいとかなり低価格、新興国向けとしては人気の Dual SIM 端末も出るので、これでさらに広がってくれればと、、、

さて、期待としては日本なわけですが、Cortanaの対応言語に日本語はなく、MAPの改善というのもなさそうなので、すぐさまこれがというのは考えにくいと思います。

さすがにムービーなどからは技適の有無は確認できていませんが、まあ、あれですよね、、、
価格としても魅力的で、十分競争力はあると思いますが、春は遠いなー

Unityでuniversal Appのメモ

Unityスクリプト上でBackKeyは「KeyCode.Escape」になる。
でもあんまり行儀のいいコードでは無いような気がする

#if UNITY_WINRT
        if (Input.GetKey(KeyCode.Escape))
        {
            Application.Quit();
        }
#endif

※これは間違い
Main.csにBackキーをとるためのコードをMainPage関数に追加したものの、発生しない模様

		public MainPage(SplashScreen splashScreen)
		{
            …
#if UNITY_WP_8_1

            Windows.Phone.UI.Input.HardwareButtons.BackPressed += (sender, e) =>
		    {
                Frame frame = Window.Current.Content as Frame;
                if (frame == null)
                {
                    return;
                }

                if (frame.CanGoBack)
                {
                    frame.GoBack();
                    e.Handled = true;
                }
		    };

#endif
		}

傾き検出
 全部テスト
 いくつか機能しない、実機では「Input.gyro.enabled」をtrueにしていても「False」と表示される

	void Start () {
        Input.gyro.enabled = true;
        Input.gyro.updateInterval = 0.01F;
	}
	
	// Update is called once per frame
	void Update ()
	{
        var gyroText = "enabled : " + Input.gyro.enabled.ToString() + Environment.NewLine;
        gyroText += "attitude : " + Input.gyro.attitude.ToString() + Environment.NewLine;
        gyroText += "gravity : " + Input.gyro.gravity.ToString() + Environment.NewLine;
        gyroText += "rotationRate : " + Input.gyro.rotationRate.ToString() + Environment.NewLine;
        gyroText += "rotationRateUnbiased : " + Input.gyro.rotationRateUnbiased.ToString() + Environment.NewLine;
        gyroText += "updateInterval : " + Input.gyro.updateInterval.ToString() + Environment.NewLine;
        gyroText += "userAcceleration : " + Input.gyro.userAcceleration.ToString() + Environment.NewLine;

        guiText.text = gyroText;
	}

GyroTest

Unity-chanの表示がおかしいですが、これはWindowsPhone8.1(実機)がカスタムシェーダーに対応していないためです。
マテリアルを改良または取り去れば、きちんと表示されるはずです

Unity3dでuniversal App Projectを吐き出す際のメモ

※再度試したところ、プロジェクトファイルを書き換えなくてもコンパイラが通りました。
 自分の環境のせいで何かしらおかしなことが起こっていたのかもしれないですが、なぜ通らない現象が起きたのか、何が原因なのかよくわかりません。


吐き出して其の儘だとVisualStudio2013Up3でコンパイルが通りません。

参照の中にリンク不明のエラーが二つでます。

Unity3d Ver4.5.4p2
VisualStudio2013 UpDate3
VisualStudio Tools Unity 1.9.1
上記環境で現象が起きています。

・.Windows.csproj
・.WindowsPhone.csproj
上記二つのプロジェクトファイルの一部を書き換えます。
エラーを起こしているファイルは「Assembly-CSharp.dll」「Assembly-CSharp-firstpass.dll」の二つです。

	<Reference Include="$(UnityProjectDir)\bin\Store 8.1\$(PlatformName)\$(ConfigurationName)\Assembly-CSharp-firstpass.dll" >
		<HintPath>.\$(UnityProjectDir)\bin\Store 8.1\$(PlatformName)\$(ConfigurationName)\Assembly-CSharp-firstpass.dll</HintPath>
	</Reference>
	<Reference Include="$(UnityProjectDir)\bin\Store 8.1\$(PlatformName)\$(ConfigurationName)\Assembly-CSharp.dll" >
		<HintPath>.\$(UnityProjectDir)\bin\Store 8.1\$(PlatformName)\$(ConfigurationName)\Assembly-CSharp.dll</HintPath>
	</Reference>

このように書かれており、一見問題なく通ると思われるのですが、なぜか「$(PlatformName)」がコンパイラで指定している「ARM」「x86」ではなく「AnyCPU」となってしまうために起こるエラーです。
(「Store 8.1」の部分はWP8.1用では「Phone 8.1」となっています)

    <Reference Include="Assembly-CSharp">
      <HintPath>bin\$(PlatformName)\$(ConfigurationName)\Assembly-CSharp.dll</HintPath>
    </Reference>
    <Reference Include="Assembly-CSharp-firstpass">
      <HintPath>bin\$(PlatformName)\$(ConfigurationName)\Assembly-CSharp-firstpass.dll</HintPath>
    </Reference>

そこで上記のように書き換えます。
さらに、VisualStudio2013Up3の「デバッグ」>「オプションと設定」>「全般」の中の「起動時にユーザーコードが見つからない時警告(マネージのみ)」についているチェックを外します。

debugoption
これが自分の環境のせいなのか、VS側の問題なのか、Unityの書き出しの問題なのか不明です。
もう少し調べてみたいところですが、そんなことよりアプリ作るために作業を進めたいと思います。

※追記
Unity-chanというUnity公式キャラクターがあります。
オフィシャルページからUnity用のAssetファイルをダウンロードすることができます。

このキャラクターを使ったアプリを作成しようとテストしていたのですが、ストアアプリ向けに吐き出そうとするとエラーが発生します。

困ったことにエラーのログが文字化けして詳しいエラー内容がわかりませんが、エラーコードから「Script/AutoBlink.cs」に書かれている「using System.Security.Policy;」はassemblyがないというエラー。
これはコメントアウトすれば解決するので、それほど問題はないと思います。
(もしくは#ifで囲ってしまうほうがいいかもしれません)

もう一つは下記画像なのですが

BycphOiIYAEf1nW.jpg large

「Script/SpringManager.cs」にある「UpdateParameter」関数内

			var prop = springBones [0].GetType ().GetField (fieldName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);

GetType しているGetField の内容が不正ということだと思うのですが、取りあえずこれも「#if」で囲って使用されないようにすることで、吐き出すことができました。

とりあえず出だしのところで躓くというへっぽこな開発スタートでしたが、まずはどうすればいいかを早いところ洗い出しておきたいです。

WindowsPhone8/8.1 Game Pad/Controller

WindowsPhone8/8.1(以降WP8/8.1)にはGame Pad/Controllerが有りませんでした。
これはモバイル向けGame Pad/Controllerとの接続で良く使用されるBluetoothですが、WP8/8.1にはBluetoothは搭載されているものの、対応profileとして「HID」が無いため外部入力機器が使用できませんでした。

ところが、最近検索していて見つけたのですが、Bensussen Deutsch & Associates, Inc(以下 BDA)社の「MOGA Game On Anywhere(以下 MOGA)」シリーズの一部が対応しているとの記事を見つけました。

MOGAにはiPhone用とAndroid用のゲームコントローラーがあるのですが、Android用でWP8/8.1に使用できる機能が付き、WP8用SDK(WinPRT)が公開されています。

MOGA Pro SDK – WindowsPhone8

自分は下記のコントローラーを購入して、SDKにあったサンプルでコントローラーが動作することを確認しました。


此方はUSB充電伝可能なリチウム電池内蔵型です。


価格は安いものの、単三電池二本が必要になる、リチウム電池やUSBコネクタはありません。

というわけで、WP8(WinPRT)用とはなっているものの、WP8.1WinRTベースで使用できるようにできないかと、色々試してみました。

“WindowsPhone8/8.1 Game Pad/Controller” の続きを読む

WinRTで画面遷移の履歴スタックを削除する

WindowsRuntime(WinRT)アプリで画面遷移を行っている際に、一気にTOPページに戻したいけど、戻した後に戻ってこられては困るという時があります。

そこで下記のコードを「OnNavigatedTo/NavigationHelper_LoadState」に書いておきます。

Frame.BackStack.Clear();

このAPIで履歴スタックを一括で消せます。

また、あるページに到達した時点で、直前のページには戻したくなく、入力などを行ってるページまで戻したい場合などに、戻す件数を把握してBackKeyが押された際の制御を行うのもアプリの構成としてはありだと思います。

下記のように「Frame.BackStack.RemoveAt」を利用して指定したスタックを削除することもできるので、使い分けるといいでしょう。

            // 画面遷移の履歴スタック数を取得する
            int stackCount = Frame.BackStackDepth;
            for (int i = 0; i < stackCount; i++)
            {
                // 指定した位置のBackコレクションを削除
                Frame.BackStack.RemoveAt(0);
            }

WindowsRuntime8.1/WindowsPhoneSilverLight8.1での日本語フォントが中華フォントになることの回避方法

さて、以前からWindowsPhoneアプリの開発で日本語フォントが中華フォントに置き換えられることがあり、これを回避する方法のコードがテンプレートにも取り込まれていたのですが、WindowsPhone8.1から消えていました。

現在私は「universal Apps」を優先的に行っているので、環境としては「WindowsRuntime 8.1」での開発となっています。

そこで、これまで通り下記コードを書いていたのですが、これが返す値がアプリに設定された言語を返すようになっています。
「en」のみで作成している場合、以前は実行環境の「ja」が返ってきたのですが、「en」が返ってくるようになっています。

                rootFrame = new Frame();

                rootFrame.Language = System.Globalization.CultureInfo.CurrentUICulture.Name;

Twitter上で話題が出た際にBluewaterSoftの山本氏が、その原因となった変更と新しく使用するとよいAPI「GlobalizationPreferences」を見つけていただけました。
そのAPIを利用するのが下記のコードです。
“WindowsRuntime8.1/WindowsPhoneSilverLight8.1での日本語フォントが中華フォントになることの回避方法” の続きを読む