NCMBでUserのACL設定を変更する

どこにものっていなかったけど,けっきょくはフィールドを指定して書き換えるという仕様

スクリプト

		var userAcl = new NCMBACL();//user.Aclではない
		userAcl.SetWriteAccess (user.ObjectId, true);//自分のアクセス権限
		userAcl.SetReadAccess (user.ObjectId, true);//自分のアクセス権限
		foreach (string myKeys in suDicAll.Keys) {
			if(skillSender.suList.Contains (myKeys)){
				//save acl
			userAcl.SetReadAccess (suDicAll[myKeys], true);//sulistのIDをここに
			}else{
				userAcl.SetReadAccess (suDicAll[myKeys], false);//sulistのIDをここに
			}
		}
		user ["acl"] = userAcl;//userのフィールドaclにuserAclをセット
		user.SaveAsync();//それを更新する

suDicAllにこのひとには見せる見せないが入っている,,,chmodみたいなのね

インストール方法

 

  1. ご連絡したURLにアクセスします.ブラウザで開いてください.Chromeではうまくダウンロードできませんでした.
  2. ダウンロードが完了しましたら,,
  3. ファイルマネージャーをタップ
  4. アプリをタップ
  5. インストールするアプリをタップします
  6. インストール中に何か表示されましたら,どちらかの許可するをタップしてください
  7. インストールをタップします
  8. どちらでもかまいません
  9. インストールが完了したら開くをタップ
  10. 以上で完了です.

AIキャラに追いつかれるとゲームオーバー

いくつかの設定項目あります

  • AIキャラ(AiThirdPersonController)のCupsuleColliderIsTriggerONにする
  • AiThirdPersonControllerにTagを設定する(Tagの付け方ははここを参照)このTag名で当たったのがAiかどうか判定します
  • 下記のスクリプトを作成し,ThirdPersonController(自分のキャラ)にアサインする

スクリプト(AiHit.cs という名前で保存)

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;//シーン遷移をするのに必要

public class AiHit : MonoBehaviour {

	[SerializeField, HeaderAttribute ("AIキャラのタグ名")]
	public string myAiTag;

	[SerializeField, HeaderAttribute ("AIキャラに捕まったときのシーン名")]
	public string AiHitScene;

	void OnTriggerEnter(Collider hitCollider) {
		if (hitCollider.gameObject.tag == myAiTag) {
			this.gameObject.SetActive (false);//Playerを見えなくする
			Invoke("AiHitEnd", 2f);
		}
	}


	void AiHitEnd(){
		SceneManager.LoadScene (AiHitScene);//AIあたったシーン名へ
		//Destroy(this.gameObject);//Playerを消去する(使っていない)
	}
}

アサインしたら,ThirdPersonControllerのInspectorを確認し,AIキャラクタのタグ名を指定し,AIキャラに捕まったときのシーン名も指定する

ゲームを実行して確認してください.AIに追いつかれたら2秒後に指定したシーン名に遷移します

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

Android版は下記をご参考に

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

 

概要

 

  • iOS版(iPhone,iPad)のインストールについては,Android版と少しことなります.みなさんが使用している機器の固有番号(UDID:電話番号ではありません)をアプリに最初から入れておく必要があります.
  • そのため,まず最初にテストへ参加していただき,その機器の固有番号を送っていただく必要があります.機器の固有番号はDeployGateと呼ばれるアプリで送られます.

 

手順

  1. 掲示板に書かれているiPhone,iPad用のURLへアクセスします
  2. テストに参加(iOS)ボタンを押します
  3. DeployGateをインストールをタップ
  4. 設定画面に変わりますので,インストールをタップします
  5. パスコード(iPhoneのロックを解除するコード)を入力します
  6.  プロファイルのインストールをタップします
  7. インストールが終われば完了をタップします
  8. iPhoneを登録しました!と表示されると参加が完了です.次のバージョンからインストールできますのでしばらくお待ちください.インストール可能になったことをメールで知らせてほしい場合は下の通知設定をタップします
  9. メールアドレスを入力設定するをタップします
  10. 数日から1週間くらいお待ちください.インストールの準備が完了したら,ホーム画面にインストールされているDeployGateのアプリをタップして開いてください
  11. 画面の指示にしたがいアプリをインストールしてください

 

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 ();
	}
}

実行画面例