大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

(22)Unity3DとSwiftでiOSプログラミング~ シーンを作ろう【実装編5】

株式会社クローバーフィールドの経営理念
著者:川上洋
公開日:2018/02/15
最終更新日:2018/06/21
カテゴリー:技術情報

こんにちは、川上です。

iOS(Swift)からUnity(C#)に送信されるには、
  // unity側にSceneに送信する.
  UnitySendMessage(“StageScnes”, “OnCallFromMenu”, retstr)
でした。

これを、Unityに受信するのは、“StageScnes”に組み込みしたStartScene.csに実装しました、

	// Menu Choose Update --> OnCallFromMenu()
	public void OnCallFromMenu(string sceneStr) {
		Debug.LogFormat ("--> OnCallFromMenu(ceneStr = {0})", sceneStr);
		SceneManager.LoadScene (sceneStr); 	//シーン遷移
		
	}

このOnCallFromMenu()関数で受信しました。

ここで、
 SceneManager.LoadScene (sceneStr); //シーン遷移
が、次のシーンに遷移しています。

前回までの処理の概要でした。

ここから、「次のシーンに遷移」した時の処理が、以降の続きとなります。

全シーン共通で組み込んでいたSendUnityCtrller.cs内に
public class SendUnityCtrller : MonoBehaviour
で、次のシーンが表示始めた時に、void Start ()関数が動作します。

void Start ()の処理です。

	void Start () {
		sceneName = SceneManager.GetActiveScene ().name;
		if  (sceneName == "StartScene") {
			//遅延表示
			Invoke("TestSendToiOS", 3.0f);//Menu表示用
		}
		else {
			InitNaviButton();	//Scene用のSwift作成Buttonの表示
		}
	}

   InitNaviButton(); //Scene用のSwift作成Buttonの表示
は、シーン表示内に、1つのButtonを作成しました。
このButtonは、iOS側のメニューに戻るための処理となっています。

InitNaviButton();は、アレの同じでプラグイン処理で、iOSに送信してSwiftでButtonを作成して表示しています。

//SendUnityCtrller.cs
	void InitNaviButton() {
		// Unityエディタ上なら何もしない
		#if UNITY_EDITOR
			Debug.Log("NOT IOS. DO NOTHING.");
		#elif UNITY_IOS
			// プラグインを初期化.
			PluginUnityCtrller.InitNaviButton(); //Scene用のSwift作成Buttonの表示
		#endif
			
	}

//PluginUnityCtrller.cs
public class PluginUnityCtrller : MonoBehaviour {
・・・
	[DllImport("__Internal")]
	private static extern void initNaviButton_();
・・・
	// プラグイン経由 //Scene用のSwift作成Buttonの表示
	public static void InitNaviButton()
	{
		Debug.Log ("---- DeviceOpeToSwift()");
		initNaviButton_();
	}
・・・
} 

//PluginConnector.mm
#import <Foundation/Foundation.h>
#import "unityswift-Swift.h"    // Required
extern "C"{
・・・
    // MARK: -⚡----- initNaviButton_イベント
    // MARK: --プラグイン経由 Scene用のSwift作成Buttonの表示
    void initNaviButton_()
    {
        [GateInUnity initNaviButton];
    }
・・・  
} 

これでプラグイン処理で、Unityからその後、Swift側のGateInUnity.swiftで initNaviButton( )を受信できました。

この次回で、「Unity3DとSwiftでiOSプログラミング~ シーンを作ろう」が 第1部(?)の終わりとなるでしょう。(のはず。。)

=・=・=
ではでは。。

    上に戻る