うーん、なんかいきなりVisual Studio 2019(Mac)にて47個のエラー吐きやがった。コンパイルエラーなんだそうだが、いまいち 原因がわからない。
Ultimate Mobile Proというアセットを使ってるんだけど、こいつがなんか邪魔しよるっぽい。
Visual Studio 2019(Mac)を再起動したら治った。なんなんだ。
なんか悔しい。
マテリアルアイコン
https://material.io/resources/icons/?style=baseline
このアイコンはいい。だいたい、事足りる。
ボタンやら画像などをオブジェクトを自由な場所に移動させたいときがある。ドラッグのことね。
1)インスペクターにEventTriggerを追加
2)EventTriggerにDragを追加
ここまでやったら、あとは(2)で追加したEventTriggerのDragにコードに書いたイベントをアタッチすればよい。
ドラッグしたら呼ばれるイベントを作ると言う事ね。以下、そのイベント内の解説。
まず以下のように親のオブジェクト情報を取得しておこう。親のオブジェクト(OyaPanel)内に自分自身のオブジェクトがいるていで。
//親オブジェクト取得
OyaPanel = transform.parent.gameObject;
//親オブジェクトから矩形トランスフォームを取得
OyaPanelRect = OyaPanel.GetComponent<RectTransform>();
タッチ位置の取得したいとき。
Input.mousePosition
でとれるっぽい。だもんで以下のようにすれば TapPosにタッチしたとこの座標がはいる。
//タッチ位置を親のオブジェクトのルールに基づいて座標をきめる
Vector2 TapPos = OyaPanel.transform.InverseTransformPoint(Input.mousePosition);
あとは取得したTapPosにX座標とY座標はいってるから、それをつかって自分自身オブジェクトを移動させる。
//計算で親オブジェクトにあった座標を求める、親のサイズを2で割ったものを加える
Vector2 ScreenPosition = new Vector2(
(TapPos.x + (OyaPanelRect.sizeDelta.x * 0.5f)),
(TapPos.y + (OyaPanelRect.sizeDelta.y * 0.5f))
);
//自分自身の移動
transform.position = ScreenPosition;
ちなみに、親のRectTransform状態でなんか計算が変わる?今回は「親のサイズを2で割ったものを加える」的なことをしてる。じゃないと変な位置に吹っ飛んでしまう。
勘だけど親オブジェクトのRectTransformの設定によっては「親のサイズを2で割ったものを加える」的なことをしなくてよいかもね。
この辺は、よくわからんかった。
単純に座標いれるだけで解決したらわかりやすくていいのにさぁ。なんかタッチ座標はワールド座標だかららしいよ、よくわからんけども。
ボタンを長押しすることで処理を変える、というのはよくあると思う。いろいろ探していたら以下のようなものを作ってらっしゃる方がいたので利用させていただいた。
UGuiLongPress
https://gist.github.com/WestHillApps/03e1d7a85856621c478b
以下のUnityEventが宣言されているのでこれに
public UnityEvent onLongPress = new UnityEvent();
長押しした場合のイベントをアタッチする。ちなみに単タップのイベントも用意してある。
public UnityEvent onClick = new UnityEvent();
あと長押しする時間帯、単タップとの差時間とかを設定する項目?があるが、自分はlongPressed=0.6に設定。差時間はdeff=3。
この設定は作ってるアプリによっていろいろ違うだろうから、自分で実験するしかないだろう。
SimpleSQLにおいてDBは「*.bytes」というファイルがDBのデータらしい。なんというか、このファイルにいろんなテーブルデータが入ってるみたい。
このDBデータ(以下、test.bytesと呼ぶ)test.bytesは、最初は「DB Browser for SQLite」ソフトを使って作ることになる。適当にテーブル作ってtest.bytesファイルを出力、それをUnity上で使用することになる。
ただ、Unity上に置いたtest.bytesファイルが常に更新されていくわけではないので注意。アプリ内でテーブルに対してデータのinsertやupdateなんかをしたとしても、Unity上のtest.bytesファイルは新しくならん。これを読むのは最初の最初だけのようだ。
じゃあ、更新しまくられている最新のファイルはどこにあるのかというと、自分のMacだと以下の場所にあった。
場所はここ(たぶんユーザーごと、それぞれで変わるべ)
Macintosh HD ▸ ユーザ ▸ <なんか自分の名前> ▸ ライブラリ ▸ Application Support ▸ DefaultCompany ▸ <なんかアプリの名前> ▸ test.bytes
ここにおいてある「test.bytes」ファイルを「DB Browser for SQLite」とかのDB管理ソフトで読み込むと最新のテーブル情報が見れます。これを更新表示しつつ、アプリを作っていくといろいろ便利でよか。
ちなみにアプリキャッシュクリアとかすると、ここのファイル消える。そんでまたゼロから新たに始めるため、Unity上においた「test.bytes」を読込する。こわーい。クリアこわーい。
つまり、ユーザーがアプリキャッシュクリアしたら消えるというわけよ。
無料のアセットとかあるけどさぁ、いろいろやったけどさぁ。SimpleSQLいちばん。
4000円出して、SimpleSQL買っとけ。便利だし安定してるし4000円以上の価値ある。
1から組むとかやめとけ、時間もったいねぇ。SQLマニアというのなら止めん。
SimpleSQL
https://assetstore.unity.com/packages/tools/integration/simplesql-38
UnityでSQLを利用したい。ちょっと大きめのプログラムになるとデータを管理するSQLをすぐ導入したほうがいい。
最初はめんどくさいけど、やっぱりSQL入れた方がいい。SQLiteのことね。サーバーで動作する奴じゃなくて、アプリ内のみで動くスタンドアロン的なSQLね。SQLiteね。その管理DB用のPGはいろいろ使って見たんだけど以下が一番良かった。
DB Browser for SQLite
https://sqlitebrowser.org/
シンプルだし使いやすかった。