2022年3月
【Unity】時間割アプリ9日目
ここまでのまとめです
空のオブジェクト TimeTableCont、Imput(Prefab)、OneTimeTable(Prefab)に以下のスクリプトをそれぞれアタッチしました。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class TimeTableCont : MonoBehaviour { public TMP_Dropdown dropdown_Jigen, dropdown_Days; public GridLayoutGroup gridLayoutGroup; public GameObject Ott, OttHolder; private GameObject ImputField; private GameObject Setting; private GameObject nowSetTimeTable; public GameObject TimeTableHolder; private GameObject hoge; void Awake() { ImputField = GameObject.Find("Imput"); Setting = GameObject.Find("Setting"); nowSetTimeTable = null; } private void Start() { ImputField.SetActive(false); Setting.SetActive(false); } public void SettingActive() { Setting.SetActive(true); } public void SettingNotActive() { Setting.SetActive(false); } public void ImputFieldActive() { ImputField.SetActive(true); } public void ImputFieldNotActive() { ImputField.SetActive(false); } public GameObject GetImputField() { return ImputField; } public void setTimetable(string name) { nowSetTimeTable = GameObject.Find(name); } public GameObject getOneTimeTable() { return nowSetTimeTable; } public void ResetJikanwari() { //Debug.Log(PlayerPrefs.GetString("OneTimeTable (4)Name_Room")); PlayerPrefs.DeleteAll(); //Application.Quit(); } public void DeleteAllTimeTable(string Tagname) { GameObject[] gameObjects = GameObject.FindGameObjectsWithTag(Tagname); foreach (var g in gameObjects) { Destroy(g); Debug.Log("destroy"); } } public int GetDropDownValue_Jigen() { Debug.Log(dropdown_Jigen.value); return dropdown_Jigen.value + 1; } public int GetDropDownValue_Days() { switch (dropdown_Days.value) { case 0: return 5; case 1: return 6; default: return 7; } } public void SettingSettingTouch() { /* 時間割をとりあえず全て削除する 曜日を読み取る 時限を読み取る glgのどっちかを揃える 曜日かける時間分のコマを作る */ DeleteAllTimeTable("OneTimeTable"); //GetDropDownValue_Jigen(); gridLayoutGroup.constraintCount = GetDropDownValue_Days(); for (int i = 0; i < (GetDropDownValue_Days() * GetDropDownValue_Jigen()); i++) { hoge = Instantiate(Ott); hoge.name = hoge.name + i; hoge.transform.parent = OttHolder.transform; } SettingNotActive(); } }
Imputにつける
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class ImputCont : MonoBehaviour { private TimeTableCont TTCont; private GameObject ThisOneTimeTable,ThisOTTSub,ThisOTTRoom; public TextMeshProUGUI ImputSub,ImputRoom; private TextMeshProUGUI TTSub,TTRoom; void Start() { TTCont = GameObject.Find("TimeTableCont").GetComponent<TimeTableCont>(); } public void IfTouch() { ThisOneTimeTable= GameObject.Find(TTCont.getOneTimeTable().name); Debug.Log(ThisOneTimeTable.name); ThisOTTSub=ThisOneTimeTable.transform.Find("Name_Subject").gameObject; TTSub=ThisOTTSub.GetComponent<TextMeshProUGUI>(); ThisOTTRoom=ThisOneTimeTable.transform.Find("Field_Room").transform.Find("Name_Room").gameObject; TTRoom=ThisOTTRoom.GetComponent<TextMeshProUGUI>(); TTSub.text="講義名"; if(ImputSub!=null){ TTSub.text=ImputSub.text; //Rewrite(TTSub.text,ImputSub.text); Setdata(ThisOneTimeTable.name,ThisOTTSub.name,TTSub); } TTRoom.text="教室名"; if(ImputRoom!=null){ TTRoom.text=ImputRoom.text; Setdata(ThisOneTimeTable.name,ThisOTTRoom.name,TTRoom); } ImputRoom.text=string.Empty; ImputSub.text=string.Empty; Debug.Log(PlayerPrefs.GetString(ThisOneTimeTable.name+ThisOTTRoom.name,"教室名")); Debug.Log(ThisOneTimeTable.name+ThisOTTRoom.name); Debug.Log(PlayerPrefs.GetString(ThisOneTimeTable.name,"nanika")); PlayerPrefs.Save(); TTCont.ImputFieldNotActive(); } public void Setdata(string parentName,string childName,TextMeshProUGUI tmp){ var kye=parentName+childName; //Debug.Log(kye+"key"); var value=tmp.text; PlayerPrefs.SetString(kye,value); } public string GetData(string key,string deforuto){ return PlayerPrefs.GetString(key,deforuto); } }
OneTimeTableにつける
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class OneTimeTableCont : MonoBehaviour { private TimeTableCont timeTableCont; private ImputCont imputCont; public GameObject ImputContGM; public TextMeshProUGUI Name_Subject, Name_Room; public GameObject GMName_Subject,GMName_Room; private void Awake() { //ImputContGM=GameObject.Find("Imput"); } void Start() { timeTableCont = GameObject.Find("TimeTableCont").GetComponent<TimeTableCont>(); imputCont = ImputContGM.GetComponent<ImputCont>(); //保存されているものがあるならそれにする、ないならそれぞれのにする Name_Subject.text=imputCont.GetData(getName()+"Name_Subject",""); Name_Room.text=imputCont.GetData(getName()+"Name_Room",""); } // ボタンを押された時の処理、ダイアログを表示する public void ifTouch() { timeTableCont.ImputFieldActive(); timeTableCont.setTimetable(getName()); } private string getName() { return this.gameObject.name; } private string getSubname() { return Name_Subject.text; } private string getRoomname() { return Name_Room.text; } }
ねこもなか
【Unity】時間割アプリ1日目
AppleStoreに自分にぴったりな時間割アプリがなぁぁぁぁぁぁい!!!
ないなら自分で作りましょう。時間割アプリ1日目。今回はiPhoneX用のアプリにします。
UnityとXcodeはインストールし初期設定を終えている前提で話を進めます。
iOSアプリビルドに必要なTeam?の設定も済んでいる前提で話を進めます。
2Dで空のプロジェクトを作りプラットフォームを変更しましょう。
言い忘れましたけど、IdentificationのBundle Identifierも変更しておきます。
見た目が大事。形から入るタイプ。IconはiPhoneのAdobe Compアプリで作りました。
このかわいいステノちゃんは
さんが作成されたものを無断で改変&使用しています。すみません。よろしくお願いします。
きょうはここまで。
このシリーズ続けられる気がしないけど頑張ります。とりあえず今後の構想だけ。
- 時間割名、教室名、講師名を記録できるテキストボックス機構
- ボックスを並べる機構
- 複数の時間割を作る機構
- 時間割のスクショを共有できる機構
スタイリッシュさは置いておいて、時間割アプリっぽくなるようにできたらいいね;)
ねこもなか
【VR】謎解きホラースクールに行ってきたレポ
これが500円
2019年8月7日 仙台フォーラス8階 特設会場でやってた「謎解きホラースクール 360度1分(?)の脱出」に行ってきました。
画像添付テストも兼ねてたくさん画像を貼りました。
VRに興味があったので行くことにしました。オキュラスを使っているようでした。
360度と分の間の縦の棒はなんなのか。1なのか/なのか。「『謎』」は深まります。そしてゾンビが出るようです。がっこうぐらしみたいな設定ですね。
デバイスが「現実とVRが融合した 新感覚VRホラーアトラクション!!」としゃべっているのもジワる。
500円を渡してチケットを受け取ります。
入学許可証(¥500) 入学するのに500円かかるらしい。入学なのに入場を断られる場合があるらしい。当日限り有効と書いてあって日付がないのも不思議ですね。
催事場に仕切りがあって机と黒板が並んでいます。
なるほど、現実でも学校になっているというわけですね。オキュラスが置かれた机が並んでいます。
そして黒板
ギエ〜
説明を受けて装着します。
「座って遊んでください。むやみに立ち上がりますと他の生徒さんの迷惑になります。」(生徒という設定なんですね。ふむふむ。生徒は私一人だけでしたが型通りの説明を聞きます。)
シーン1
灰色のコンクリートの薄汚い部屋の中にテレビがあります。「画面をクリックすると始まります!」というテロップが点滅しています。
シーン2
場所が変わって教室の中。視点は教卓で、謎を解いて脱出せよと書いてあります。
教卓からは黒板と並んだ机と廊下、ロッカーや掃除用具入れが見えます。
机にPCが書いてあるのでそこを調べます。すると「えくつのめんばんさ」と書いてあります。逆から読むと「さんばんめのつくえ」簡単ですね。
三番目の机を調べると鍵を手にします。鍵を教室のドアに使います。
シーン3
突然洋館の一室に場面が変わります。コナンの扉をもっと安っぽくした感じでした。
プレイヤーはいつの間にか銃を手にしていました。そして「うー」みたいな音も。
コナンの犯人みたいな全身黒タイツの人が部屋の3方向からゆっくりやってきます。
銃で頭を打つと倒れていきますが、当たり判定が頭の上の方に設定されているようで、脳天を狙っても倒れません。少しずらして当てると倒れていきます。UIには倒した数と残り時間が02:13:23みたいに表示されています。制限時間は3分だったようです。
バシバシ倒していくとTimeUp!になったようで、またシーン1のテレビ画面に戻りました。スコアは73だそうです。ハイスコアだったようです。
感想
結構雑。学校の設定もよくわからなかったし、どうして閉じ込められて謎を解かなくてはいけなくなったのかわかりませんでした。全身タイツ黒男無限湧きと戦う理由もよくわかりませんでした。当たり判定もずれているし、全身タイツだし、ゾンビのテクスチャも用意できなかったのかな。
黒板のギエ〜は手作り感あって好きです。
3分以内にゾンビを倒し学校を脱出するのが目的なはずが、倒したゾンビの数を競うスコアゲーになっていたのも趣がありますね。
現実とVRの融合とありますが、HMD(ヘッドマウントディスプレイ)装着中はVRの世界だけしか堪能できませんで、融合している感じは特になかったです。
机と椅子と黒板が若干の現実要素。
これらを借りるのに予算を使うならアプリの方にお金をもっとかけた方がいいと思いました。
そして私としてはこういう荒削りのアプリでも一人500円吸い上げることができて羨ましいと思いました。
何事もまずは完成させることが大事
ちゃんとした記事を書き上げた自分を褒めてあげたい。 おしまい。
ねこもなか