(10)Unity3DとSwiftでiOSプログラミング~回転処理【実装編 1 】

新年おめでとうございます。
ことしもよろしくお願いします。

こんにちは。川上です。
平成30年。もう30年なんだぁ。長いようであっという間の30年ですなぁ。
30年かあ・・・。
色々あったよねぇ~。。
これからは、できるだけ、そっとしながら、そこそこパッとして、静かに安全でいればいいなぁとおもっています。_mm_

=.=.=
では、実機の回転でLandspace用(横型)とPortraie用(縦型)の表示更新をしてみます。
UnityからiOS環境のiPhone実機で実装していきます。

実機の回転Rotation処理でイベントを受けるのは、Unity側で受けることになります。
Unityでイベントを受けて、iOS側へRotation時のイベントを通信して、iOS上の表示部分を更新していきます。

Google先生さんから教示されて、Unity側で回転Rotation処理でイベントを受ける方法は、

Unity : モバイル画面の方向を固定、あるいは変化を検出

があります。
このソースを元にして、iOS側への通信処理を埋め込みます。

Unityの環境側でDeviceOpe.csを作成して、プラグイン用のコードを書いていきます。
(5)Unity3DとSwiftでiOSプログラミング~~ 電信開通‼️
で既存に作成したFileに順に実装していきます。この順序ルーチンは鉄板でしょう。
1. DeviceOpeCtrller.cs
→ 2. PluginUnityCtrller.cs
        → 3. PluginConnector.mm

毎度の取説でのピンポーンです。
『ちょこっとだけ、気づいたことや注意点などでのMy備忘録をしていますので、間違っていてもごめんなさいね。 』
~ 〜
1.DeviceOpeCtrller.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DeviceOpeCtrller : MonoBehaviour {
    // 直前のディスプレイ向き
    DeviceOrientation PrevOrientation;

    // 端末の向きを取得するメソッド
    DeviceOrientation getOrientation() {

        DeviceOrientation result = Input.deviceOrientation;

        // Unkownならピクセル数から判断
        if (result == DeviceOrientation.Unknown)
        {
            if (Screen.width < Screen.height)
            {
                result = DeviceOrientation.Portrait;
            }
            else
            {
                result = DeviceOrientation.LandscapeLeft;
            }
        }
       return result;
    }

	// Use this for initialization
	void Start () {
		ExecDeciveOrientation(); 
	}
	
	// Update is called once per frame
	void Update () {
		 ExecDeciveOrientation(); 
	}
	
	void ExecDeciveOrientation() {

		//画面の回転を検出
        DeviceOrientation currentOrientation = getOrientation();
        if (PrevOrientation != currentOrientation)
        {
 			#if UNITY_EDITOR
				Debug.Log(" ==== Update Device Orientation To JoyStick Position.");

			#elif UNITY_IOS
				// //画面の回転を検出 プラグインを初期化.
				PluginUnityCtrller.DeviceOpeToSwift();
			#endif
           PrevOrientation = currentOrientation;
        }
    }
} // EOF DeviceOpeCtrller

2.PluginUnityCtrller.cs

public class PluginUnityCtrller : MonoBehaviour {
   ・・・・・
 ・・・・・
 	// プラグイン経由 //回転イベントにSwift内Viewに入れる
	public static void DeviceOpeToSwift()
	{
		Debug.Log ("---- DeviceOpeToSwift()");
		deviceOpeToSwift_();
	}

}//EOF PluginUnityCtrller

3. PluginConnector.mm

extern "C"{
 ・・・・
 ・・・・ 
   // MARK: -⚡️----- deviceOpeToSwift_イベント
    // MARK: --プラグイン経由 回転イベントにSwift内Viewに入れる
    void deviceOpeToSwift_()
    {
        [GateInUnity updateDeciveOrientation];
    }
    
} //EOF extern "C"

次回、Unity側のプラグイン用のコードの実装後に、Xcode上の
4. GateInUnity.swift
で、回転処理を組み込みんでいきましょう。。

=・=・=
ではでは。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)