【Laravel】Migrationによるカラムの更新
PHPバージョン:7.1.14
Laravelバージョン:5.7.9
Migrationでデータベースカラムを更新をする場合は、
composerで外部パッケージを導入しておかなければなりません
【Laravel】Migrationの実行とロールバック
PHPバージョン:7.1.14
Laravelバージョン:5.7.9
前回の続きです!
Migrationファイルは、作成するだけでは実行されません!
今回はMigrationの実行(migrate)を行い、
実際にデータベースにテーブルとカラムが出来ているのかを確認したいと思います!
【Laravel】Migration(マイグレーション)ファイル作成!DBテーブルとその履歴を作成します!
PHPバージョン:7.1.14
Laravelバージョン:5.7.9
本日はMigration(マイグレーション)についてです!
migration自体の意味は「移行」や「移転」などですが、
Laravel的にはデータベースの構築やバージョン管理を行う機能です!
コンソールから直接MySQLに入らなくても
テーブルを作成したりテーブルのカラム内容を変更したりできます!
また、どのタイミングでどのような変更を行ったか履歴が記録されます!
テーブルの状態を過去に巻き戻したりもできます!
【Laravel】データベース設定ファイル database.phpと.env
PHPバージョン:7.1.14
Laravelバージョン:5.7.9
今回はLaravelのデータベース設定ファイルについてです!
データベースはMySQLを使います!
こちらを参考にローカル環境(Mac)にインストールしました!
Mac へ MySQL を Homebrew でインストールする手順 - Qiita
【Laravel】プロジェクト作成/ローカルサーバー実行
PHPバージョン:7.1.14
Laravelバージョン:5.7.9
Unityの開発をしているとデータ保存などでサーバーを使いたくなります!
というわけで、PHPフレームワークLaravelを使って、
最後にUnityと連携していきます!
環境構築はこちらの、
バーチャル環境(VirtualBox+Vagrant)を導入しHomeSteadからLaravelを構築する記事を
参考にしました!
【Laravel超入門】開発環境の構築(VirtualBox + Vagrant + Homestead + Composer) - Qiita
続きを読むひよこのたまごブログ再開します!
2015年以降ほとんど更新の無かった当ブログですが、
再開しようと思います!
当時はUnity5の時代でしたが今やUnity2018…
初心に立ち返って頑張ります!
Time.timeScaleに影響されないWaitForSecondsRealtime
コルーチンと一緒に、WaitForSecondsがよく使われます!
一定時間待機した後に処理を再開するメソッドです!
しかし実はWaitForSecondsで扱われる時間は、Time.timeScaleに影響され、
Time.timeScaleを0にすると永久に再開されません!
Time.timeScaleの影響を無視した現実時間分だけ待機したい場合は、
WaitForSecondsの代わりにWaitForSecondsRealtimeを使います!
WaitForSecondsRealtime
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestScript : MonoBehaviour { // Use this for initialization void Start () { Time.timeScale = 0; StartCoroutine(WaitTime()); StartCoroutine(WaitRealTime()); } IEnumerator WaitTime() { yield return new WaitForSeconds(1f); Debug.Log("Finish WaitTime"); } IEnumerator WaitRealTime() { yield return new WaitForSecondsRealtime(1f); Debug.Log("Finish WaitRealTime"); } }
結果
WaitForSecondsはTime.timeScaleを戻さない限り永久に待機し、
WaitForSecondsRealtimeのみ現実時間が使われていることが分かります!
以上です!
DestroyとDestroyImmediateの違い
gameObjectを破壊してHierarchy上から消し去りたい時に、よくDestroyメソッドが使われます!
が、Destroyで破壊されたgameObjectは実はまだ裏側で存在しています!(オブジェクトの数を確認すると分かります)
完全に消し去りたい場合には、Destroyの代わりにDestroyImmediateを使います!
(Immediate=即座)
DestroyとDestroyImmediateの違い
using System.Linq; using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestScript : MonoBehaviour { // Use this for initialization void Start () { // 全子オブジェクトを取得 var childArray = GetComponentsInChildren<Transform>().Where(t => gameObject != t.gameObject).ToArray(); // 子オブジェクトの数を確認 Debug.Log(childArray.Length); // 先頭の子オブジェクトをDestroyImmediate DestroyImmediate(childArray[0].gameObject); // 再度子オブジェクトの数を確認 Debug.Log(GetComponentsInChildren<Transform>().Where(t => gameObject != t.gameObject).ToArray().Length); // 2番目の子オブジェクトをDestroy Destroy(childArray[1].gameObject); // 再度子オブジェクトの数を確認 Debug.Log(GetComponentsInChildren<Transform>().Where(c => gameObject != c.gameObject).ToArray().Length); } }
結果
DestroyImmediateでは子オブジェクトの数が減りましたが、
Destroyでは減りません!
ちなみに…
using System.Linq; using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestScript : MonoBehaviour { // Use this for initialization void Start () { StartCoroutine(DestroyObject()); } IEnumerator DestroyObject() { var childArray = GetComponentsInChildren<Transform>().Where(t => gameObject != t.gameObject).ToArray(); Debug.Log(childArray.Length); DestroyImmediate(childArray[0].gameObject); Debug.Log(GetComponentsInChildren<Transform>().Where(t => gameObject != t.gameObject).ToArray().Length); Destroy(childArray[1].gameObject); // 1フレーム待機 yield return null; Debug.Log(GetComponentsInChildren<Transform>().Where(c => gameObject != c.gameObject).ToArray().Length); } }
結果
コルーチンで1フレーム待ってあげると、ちゃんと減っています!
1つの処理の中で即座にDestroyしたい場合にはDestroyImmediateをお試しください!
・・・と思ったのですが、公式では非推奨としているようです・・・
Object.DestroyImmediate
知識としてストックしておくにとどめておいたほうがよさそうです!
Coroutine内で処理の時間・順番管理を行う。
特別難しいことではないのですが、
コルーチン内で時間・順番を管理しながら処理を行う方法です!
yield return でコルーチンを呼び出せば、
コルーチンが終了するまでは先に進むことはありません!
コルーチン内でコルーチンを呼び出しても処理終了まで次の処理に移りません!
Coroutine内で処理の時間・順番管理を行う。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestScript : MonoBehaviour { // Use this for initialization void Start () { StartCoroutine(Test1()); } IEnumerator Test1() { Debug.Log("1st"); yield return StartCoroutine(Test2()); yield return new WaitForSeconds(1f); Debug.Log("3rd"); } IEnumerator Test2() { yield return new WaitForSeconds(1f); Debug.Log("2nd"); } }
結果
【Unity】Unityで端末の情報(OS, 機種名, メモリサイズなど)を取得する!
今回は、現在アプリに使われている端末情報をUnity側で取得したいと思います!
例えばお問い合わせフォームをアプリ内に作る場合、
OS(iOS 10.2など)や、機種名(iPhone7Plusなど)の情報も一緒に受け取れれば、バグフィックスの役に立ちますよね!
【C#】LINQ Sum, Average, Min, Maxなど計算系解説【LINQ】
今回もLINQの記事です!
LINQ便利すぎ!
【C#】LINQ ForEach, Select, Where解説【LINQ】
今回は、C#をやっていたらぜひとも使いたいLINQについてです!
続きを読む