DeployGateのインストール後,インストール画面が現れなかった場合は,以下のように対応してみてください
- 掲示板に書いてあるアドレスにもう一度アクセスし,インストールをタップします
- アプリケーションを選択画面が表示されますので,DeployGateを選択します
- アプリのインストール画面となりますので,インストールをタップしてください
- お疲れ様でした
iOS版は下記をご覧ください
DeployGateアプリのインストール後で止まってしまった方は下記をご覧ください
注)画面の見え方はAndroidの機種や販売時期などで異なることがあります
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にする
ちょっとめんどい
デバッグ環境ではどこかに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を取らせることで根治できるはず
2点間の距離を取得する場合,通常では
obja
objb
//変数系
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 (); } }
実行画面例
衝突判定系をまとめておきます
ここでは扱いやすいTrigger系のみにしておきます.Collider系はちょっと面倒なので,,,
動的に変更できる
時間がないのでスクリプト全文
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(人工知能)を利用したゲームを制作する
この場合のAIとは流行のDeep Learning(深層学習)ではなく,最短距離を検索する経路探索アルゴリズムである
UnityではNavigation SystemでA*というアルゴリズムを利用してこれを実現している
https://docs.unity3d.com/jp/current/Manual/nav-InnerWorkings.html
NPC(Non Player Character)を動かす一つの方法として,こうしたアルゴリズムが利用されている
追いかけるスピードを変化させることで,例えばゾンビが,撃たれたきっかけでスピードを落としたり,距離で判定しギリギリで追いつかないといった設定もできる
これらを利用して可能なのが
・鬼ごっこ
・障害物競走
・だるまさんがころんだVR(需要あるのか?)
などではないか.
3)ゲームを企画する
これまでのテクニックを用いて,AIを用いたゲームを企画し,実際に制作せよ.地形(Terrain)またはPlane上でプレイし,制限時間を設けること.
なんらかの勝ち,負けを判定し,結果を変えること
スクリプトはEdukit内の物を使ってかまわない(改造してもかまわない)
機能ではなく世界観やその世界が持つ独自のルールに注力すること
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の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);//加算用のテンポラリ変数 }