admin のすべての投稿

DeployGateのインストール後とまってしまった場合

DeployGateのインストール後,インストール画面が現れなかった場合は,以下のように対応してみてください

  1. 掲示板に書いてあるアドレスにもう一度アクセスし,インストールをタップします
  2. アプリケーションを選択画面が表示されますので,DeployGateを選択します
  3. アプリのインストール画面となりますので,インストールをタップしてください
  4. お疲れ様でした

 

Android版インストール方法(DeployGate使用)

Android版のインストール方法

ご参考

iOS版は下記をご覧ください

iOS(iPhone,iPad)版インストールについて

DeployGateアプリのインストール後で止まってしまった方は下記をご覧ください

DeployGateのインストールで止まってしまった場合

手順

注)画面の見え方はAndroidの機種や販売時期などで異なることがあります

  1. 掲示板に書かれているURLにアクセスすると以下のようなページが表示されます.インストールをタップします
  2. Google Play Storeの DeployGateのインストールページへ移動しますので,インストールをタップします(※DeployGateは試作中アプリのテスト配布をサポートしてくれるアプリです)
  3. アクセス許可を求められますので,同意するをタップしてください
  4. DeployGateを開きます
  5. インストールが開始されます.いくつか尋ねられますので同意するをタップしてください.会員登録などは不要です.なおインストールが開始されない場合は(こちら)をご覧ください
  6. 初めてテスト版のアプリをインストールする方は下のような画面が表示されます.表示された方は設定をタップしてください.(この画面が表示されない方もいます)
  7. 注意の画面が表示されますのでOKをタップします
  8. 設定に移動しますので,提供元不明のアプリの「GooglePlay以外のアプリのインストールを許可する」にチェックをいれます(この画面の見え方はAndroidの機種によって異なります.その場合は「提供元不明のアプリ」という設定項目を探してください)
  9. 戻るボタンをタップしてDeployGateに戻ります
  10. インストールボタンをタップします.以前のアプリがあるなどと表示された場合はOKをタップしてください
  11. ダウンロードが始まります
  12. インストールします(自動でインストールされない場合は再度インストールボタンをタップしてください)
  13. インストール後アプリを開くをタップするとアプリが開始されます
  14. お疲れ様でした

 

NCMBデータ作成日をJSTに戻す

NCMBのcreate DataはUTCなのでJSTに戻す

 

C#でもUnityだと動かない例(.NET 2.0だから?)

						DateTime dt = objdata.CreateDate.Value;//データ更新日をdtに
						TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
            DateTime jst2 = TimeZoneInfo.ConvertTimeFromUtc(dt, tzi);

 

Unityでも動く例

						DateTime dt = objdata.CreateDate.Value;//データ更新日をdtに入れる

						//UTCをJSTに
						TimeZone zone = TimeZone.CurrentTimeZone;
						TimeSpan offset = zone.GetUtcOffset(DateTime.Now);//オフセット取得して差分を出す
						DateTime jst = dt + offset;//差分を計算してJSTにする

ちょっとめんどい

メモ JSONが空問題

デバッグ環境ではどこかにPlayerPrefesが残っててエラーがおきないのだけど,初めてのユーザはそれが起こる問題

とりあえずの回避策

			//SUリストの取得?
			string mytest  = PlayerPrefs.GetString ("sulist");//PlayerPrefsに保存してるのはいかがなものかと,,
			//上のsulist(mytest)がnullならエラー出る
			if (mytest.Length > 0) {
				sudic = Json.Deserialize (mytest) as Dictionary<string, object>;

				foreach (KeyValuePair<string , object> pair in sudic) {
					Debug.Log (pair.Key + ":" + pair.Value);
					acl.SetReadAccess(pair.Value.ToString(), true);//加算用のテンポラリ変数
				}
			}

ログイン時にこのsulistを取らせることで根治できるはず

AIから追従対象までの距離を出す

2点間の距離を取得する場合,通常では

Vector3
.Distance(
Vector3

obja

,
Vector3

objb

);
などで取得するが,AIを使う場合はベクトルの計算ではなくAI(NavMesh)から距離が取れる(距離を出力してくれる)

 

//変数系

public     NavMeshAgent mynav2;//インスペクタに現れるのでNavMeshがついているゲームオブジェクトをアサインする

float enemyDistance;

//以下をUpdate(){  } の中に入れる

enemyDistance = mynav2.remainingDistance;

で取得可能.

 

スクリプトサンプル例

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class aiDistance : MonoBehaviour {
	public     NavMeshAgent mynav2;//インスペクタに現れるのでNavMeshがついているゲームオブジェクトをアサインする
	float enemyDistance;
	public Text disTex;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		enemyDistance = mynav2.remainingDistance;
		disTex.text = enemyDistance.ToString ();
	}
}

実行画面例

unity AIのターゲットを途中で変更

動的に変更できる

時間がないのでスクリプト全文

using UnityEngine;
using System.Collections;
//using UnityStandardAssets.Characters.ThirdPerson;

public class targetchange : MonoBehaviour {
	public NavMeshAgent myObj;
	public Transform goalpos1;
	public Transform goalpos2;
	public Transform dummy;//AIThirdPersonを入れる
	Transform setPos;

	void Start(){
		setPos =  dummy;
	}

	void Update(){
		
		myObj.SetDestination (setPos.position);
	}

	//スピードを0.5に変える
	public void chngSpeed(){
		myObj.speed = 0.5f;
	}


	//ターゲットをgoalpos1にする
	public void target1(){
		setPos = goalpos1;

	}

	//ターゲットをgoalpos2にする
	public void target2(){
		setPos = goalpos2;
	}
}

参考動画(ボタンで切り替えています)

AI機能を用いたゲームの制作(1)

今回はAI(人工知能)を利用したゲームを制作する
この場合のAIとは流行のDeep Learning(深層学習)ではなく,最短距離を検索する経路探索アルゴリズムである
UnityではNavigation SystemでA*というアルゴリズムを利用してこれを実現している
https://docs.unity3d.com/jp/current/Manual/nav-InnerWorkings.html

1)Navigationの使い方

  1. File>New Scene で新規シーンを作成
  2. GameObject>3D Object>Plane で平面を作成
  3. InspectorでScaleを全て10倍にする
  4. Project内の StandardAssets>Characters>Prefabs から,(A)ThirdPersonControllerと(B)AIThirdPersonControllerをPlane上に配置する
  5. (B)AIThirdPersonCharacotrを選択し,InspectorにあるAI Character Control内Targetに,ヒエラルキーの(A)ThirdPersonCharacotrをアサインする
  6. メニューバー>Window>Navigationを選択
  7. 設置したPlaneを選択し(下図1),Navigationの設定からObjectを選択(下図2)し,Navigation Staticにチェックをれ(下図3),Navigation AreaからWalkableを選択(下図4)
  8. 右下のBakeをクリック(上図の5)し,歩行可能エリアを焼き付ける
  9. ゲームを再生してみる
  10. やたら速く追いかけられる
  11. そこで(B)AIThirdPersonControllerのInspectorにあるNav Mesh AgentSpeed(初期値は1)を変える.これで追いかけられるスピードを変更することができる

NPC(Non Player Character)を動かす一つの方法として,こうしたアルゴリズムが利用されている

 

2)歩行不可エリアの設定

  1. 次に,障害物を設置し,歩行不可エリアを設定する
  2. StandardAssets内ProtoType内のPrefabを適当に配置する(Projectに無い場合は,Assets>ImportPackages>Prototypingで読み込む)
  3. Prefabs内のモデルをPlane上に配置する.自由な位置に置いてかまわない
  4. 置いたPrefabを選択し,Navigation Staticにチェックを入れ,Navigation AreaからNot Walkableを選択
  5. 右下のBakeをクリックし,歩行不可能エリアを焼き付ける
  6. ゲームを再生する

追いかけるスピードを変化させることで,例えばゾンビが,撃たれたきっかけでスピードを落としたり,距離で判定しギリギリで追いつかないといった設定もできる

これらを利用して可能なのが

・鬼ごっこ

・障害物競走

・だるまさんがころんだVR(需要あるのか?)

などではないか.

3)ゲームを企画する

これまでのテクニックを用いて,AIを用いたゲームを企画し,実際に制作せよ.地形(Terrain)またはPlane上でプレイし,制限時間を設けること.

なんらかの勝ち,負けを判定し,結果を変えること

スクリプトはEdukit内の物を使ってかまわない(改造してもかまわない)

機能ではなく世界観やその世界が持つ独自のルールに注力すること

NCMB パスワードリセット

UnityでのNCMBパスワードリセットの方法(全文)

時間ないので全文転載

using UnityEngine;
using System.Collections;
using NCMB;
using UnityEngine.UI;//use unity gui
using UnityEngine.SceneManagement;

public class PassReset : MonoBehaviour {

	public Text emailfield;
	public Text statustxt;
	string meado;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}



	public void doResetvoid(){
		meado = emailfield.text;
		//NCMBUser user = new NCMBUser();
		NCMBUser.RequestPasswordResetAsync(meado,(NCMBException e) => {    
			if (e != null) {
				UnityEngine.Debug.Log ("ログインに失敗: " + e.ErrorMessage);
				statustxt.text = "リセットに失敗しました\nメールアドレスを確認してください";
			} else {
				statustxt.text = "パスワードリセットに成功しました\nメールを受信しパスワードを再設定してください";

				Invoke("toTop", 3f);
			}
		});

	}


	//scne change
	public void toTop(){
		SceneManager.LoadScene ("top");
	}

}

メールに仮パスワードとリセットページへのリンクが届くのでWEBでリセットするらしい

NCMBのユーザIDをplayerPrefsに入れて呼び出す

NCMBのuser.objectIdを取得して,他のところで使います

//JSON読み込み
				foreach (NCMBUser users in userList) {
					suDicAll.Add(users.UserName.ToString(), users.ObjectId.ToString());//Dictionaryに入れる

				//ここでJSON化し,PlayerPrefesに入れる
					myjson = Json.Serialize(suDicAll);

				}//foreachここまで
PlayerPrefs.SetString("sulist", myjson);


//JSON読み出し
using MiniJSON;//use miniJSONが必要です

			string mytest  = PlayerPrefs.GetString ("sulist");
			var sudic = Json.Deserialize(mytest) as Dictionary<string, object>;


			foreach (KeyValuePair<string , object> pair in sudic) {
				Debug.Log (pair.Key + ":" + pair.Value);
				acl.SetReadAccess(pair.Value.ToString(), true);//加算用のテンポラリ変数
			}