今年の振り返り後編 【きゃねぽよサーバーアドカレ】
きゃねぽよアドカレ19日目の記事です。
昨日の記事はこちらです。
・初めに
12月も後半になってきました
そろそろ今年の後半の記事書きますよ。
早めに書こうと思ったけどポケカに再度ハマったり色々あって
遅れてしまいました。
それではいきましょう!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
・7がtttttttっつっつつつつつつ
写真フォルダを見てみたらなんとなんと 5枚も写真がはいってました!!!
すごいですね!!
キーボードの写真とグラボを海外輸入したらこんだけ安いのかと思った時の写真
だけしか写せるものないじゃん
ほかには何かあるかなぁ・・
おっとこれを忘れてました
DDLCplusの発売日が7月1日でしたね!!!!!!!
ハジマタ pic.twitter.com/9Cqid2Q8BY
— !riS.chr🌈🕒 (@IrSValk________) 2021年6月30日
Unityで作りなおされていることでテンションが爆上がりします
メインストーリーはいつも通りのモニカがかわいい感じでしたが
サイドストーリーがサイドストーリではないボリュームで
カロリーが高すぎて死にました
サイドストーリー良すぎて泣きそう
— !riS.chr🌈🕒 (@IrSValk________) 2021年7月2日
他には 初運転もこの月でした
車で買いに行ったロッテリア めっちゃうまかったのを覚えてます
いつの間にかディスクブレーキ主流になってる
— !riS.chr🌈🕒 (@IrSValk________) 2021年7月24日
これはたぶん 自転車が欲しくなった時期だと思います
就職したら平地に引っ越したいなと思ってたので急にロードバイクの
サイトを見漁った記憶があります
・8がががつつつつつつつつついつつつ
写真はもう宛にならないのでtwitterから持ってきます
昨日お祈りメールきてめちゃくちゃ落ち込んでたけど
— !riS.chr🌈🕒 (@IrSValk________) 2021年8月17日
今日面接の連絡きて
躁鬱並にテンション上がってる
内定先から面接のお知らせが来てますね
いい感じのbotがそろそろ完成しそう
— !riS.chr🌈🕒 (@IrSValk________) 2021年8月24日
そういえばこの時bot制作してましたね
Discord.pyとAnnictを使ってアニメ検索ボットを作りました
YoutubeDlも使って 検索したアニメのopを再生することができる
優れモノでしたが、、、、、
突如として groovyやRythmがなくなりそうになったり
Discord.pyの制作者が手を離れたりとかで タイミングがめっちゃ悪かったですね
来年からスラッシュコマンドのみになるので僕が作ったbotも使えなくなっちゃったりとかで悲しいです
・Ⅸ月
マウスのパラケーブル届いた pic.twitter.com/3arU8GdTdZ
— !riS.chr🌈🕒 (@IrSValk________) 2021年9月1日
Model-Oのマウスを中古で買ったら清掃されていない断線してるマウスだったので
自分でパラケーブル購入して付けました
収縮チューブをライターで焼くときに若干導線が焦げて焦りましたが
現在まで一応問題なく使えています
軽くて6000円は最強です
内定決まってすべてのやる気がゼロ
— !riS.chr🌈🕒 (@IrSValk________) 2021年9月9日
内定ようやく決まりました
最高です
最近ちょっとブラックじゃないか不安ですけど
副反応で死んでる
— !riS.chr🌈🕒 (@IrSValk________) 2021年9月15日
らしいです
2回目は結構地獄でしたね
熱とか風邪になると音が半音下がって聞こえがちなんだけど起こらないな
— !riS.chr🌈🕒 (@IrSValk________) 2021年9月15日
これわかる人いないですかね
薬の副作用らしいですけど
そういえばこの月にGirakメンバーで
最南端まで行きましたね
空いてる店も少なくて微妙でしたけど
楽しかったんでおkです
・🔟月
夏休みも終わっていよいよ学校への登校が始まります
ついにSerumの支払いが完了して僕の物になりました!!!!!!!!!!!!!!!!!!!!これで音楽作り放題ですね!!!!!!!!
と思ったんですけど全然音楽作る暇がなくて今も作ってないです
来年からKompleteを買って再開しようかなって思ってます
最近買い物してないなと思って
新しいワイヤレスイヤホンでLifeP3を買いました
コスパ最強なので皆買ったほうがいいです
ノイキャンは微妙ですがコスパがいいのでこのくらいがちょうどいいですね
割と人が居るとこに出るとBluetoothが混線してちょくちょく止まるんで悲しいですけど・・
田舎羨ましい
しょうもない不具合で5時間溶けた
— !riS.chr🌈🕒 (@IrSValk________) 2021年11月1日
CinemachineをMainCameraの子に付けた状態でImpulseを使うと
カメラの角度がずれてしまう不具合ですね
互いに作用してカメラの表示から外れるオブジェクトが出るので使う人は注意で
・⓫月
SheerIDの学校リクエスト 通らないのなんで
— !riS.chr🌈🕒 (@IrSValk________) 2021年11月11日
AmazonMusicからSpotifyに乗り移りたかったのに
Sheeridの学割に学校が登録されていないことしか考えてなかったです
写真もめぼしいツイートもほとんどないですね
・壱弐がつwtづいうぇいううぇhふぉいうぇうfh
推しの3D配信があったり SSDを買い替えたり チルアウトを箱買いしたり
FireStickTVを買ったり cssにハマったりポケカにハマったりと
楽しくやってます
丁度この記事を書いた今日 スタートデッキが発売されて予約して購入したものが届きました
僕のデッキは31番でおそらくハズレ枠ですね
記事を書く前にコンビニとかいろいろなカード売り場を車で探しに行きましたが
どれも売り切れで売ってなかったです
みんなもポケカやろうね
最後に現在のロケリの成績です
カジュアル
レート1700行きそうなんですけど敵が強くなりすぎてボイチャ喋れないレベルなんですよね
ダブルスランク
徐々に個人技がうまくなりつつあるんでしょうね
スタンダードランク
やっぱり意思疎通が取れないと成績が安定しないですね
人口が少なすぎて味方全員野良で相手フルパみたいなことが多いです
味方が萎えて止まったりゴール前で突っ立ってトロールしてたりと
散々なのでもう一生やりたくないです
ロケリ流行れ!!!!!!!!!!!!!!!!!
・最後に
今年一年地獄でしたね
もう就活なんて一生したくないです
多分転職する
来年は公私混同して休みの日に仕事の事考えないようにしたいと思います
ばいばい!!!!!!!!!
次の記事はきゃねぽよらしいです。
僕も昔 フロンティアすこおおおおおおしだけやってました
5秒くらい・・・
1年振り返り【きゃねぽよサーバー2021年アドベントカレンダー 】
きゃねぽよアドカレ8日目の記事です。
昨日の記事はこちらです。
・初めに
久しぶりです。
完全にこのブログの存在を忘れていました。
Youtubeなどで動画投稿をしている方々というのは毎日やってるのかと思うと
頭が上がりません・・
・今年振り返るよ
まあ、一言で言えば
制作 就活
ですかね
音楽を作る機会も1回しか無かったしほとんどコーディングの作業とポートフォリオの制作、就活でした。
何とか就活には成功して今はゆっくりと制作に入っていますが
(まだ制作してるよこの人・・・)
ガチガチな企業みたいな場所の就職はほとんどうまくいかず
なぜか新卒に技術をある程度技術を求めていて中途採用しか募集していないような場所に通ってしまったので(社会不適合者)
内定ブルーな感じになってます。
まあ、関東に行きたくないって気持ちが強すぎたのが原因な気がしますけどね
1月
マジでなんも覚えていないの一言ですが
この時は確か個人で音ゲーを作ろうとしてた時期ですかね。
ポートフォリオに乗せるために必死にやりました。
この辺からUnity初心者を卒業してMonoBehaviourを継承しないクラスを使うようになりました。
そういえばこの時期にKeychron K6を買ってますね。
今も使っていますがサイズがちょうどよくてお気に入りです。
NIZと一緒に代わる代わる使っています。
この頃のロケリは不調っぽいですね。
大体複数以上の制作で忙しい時は調子が悪いのでしょうがないですね
シーズン2のアプデ後からランクの幅が変わるのでここから一気にダイヤに駆け上がります
2月
この辺マジで覚えてないです。
学校の制作はこの時には終わりかかっていて後は自分の制作だけだったので
余裕がある時だったのでロケリはやってはいましたが
ゲーム制作の面白さを知ってからはゲームやるよりコード書く方が好きになってしまったので
深夜まで自分の音ゲー制作をしてました。
3月
現在内定をもらってる企業に訪問に行ったり
ほぼ無理な企業に選考出してお祈り貰ったりとかしてました。
休みに入って自分の制作がサクサク進むようになって
頑張っています
もちろんこの時期もロケリだけは欠かせません
クソほど停滞してます。
モチベが下がりまくってました
4月
自作の音ゲーもβ版が完成したのでポートフォリオを作成します。
オンライン授業も終わって定期的に登校するようになる。
そしてついに卒業制作が始まってしまいます
5月
免許の試験がありましたが無事獲得することができました。
今年からSNSをほとんど見なくなってしまったため
ほとんどツイートすることもないし
家から出ないから写真も撮らないしで何も記録がない。
ダイヤに上がってロケリのモチベめちゃめちゃ上がった時期
ロケリめっちゃ楽しい
6月
この時期 お祈りメールばかりでメンヘラになっていました
そしてこの時期、Pythonを使ったbot作りにハマってしまいます。
C#よりもコードが簡単なので今でもお気に入りの言語です
・あとがき
今年の前半完全に虚無ですね。
後半にかけてはコロナも収まってきてGirakで集まる事多かったんで色々なことがあったと思います。
次は
ukpさんの1年の振り返り前篇です。後半にご期待ください
最強のPCケースを求めて
この記事はきゃねぽよ Advent Calendar 2020の記事です
はじめに
Unityの記事を書き終えて何とか試験も合格しやっと落ち着いてきた所で
また記事を書かなければならない時が来てしまいました
今回は自作PCの中でも特にこだわらなければならない部分
PCケースについて話していきたいと思います
僕の理想のPCケース
さて、世の中には数々のPCケースがありますが
皆さんはどんなケースがいいと思うのでしょうか
黒光りしたゲーミング仕様のPCケース
静音を重視した真っ黒のPCケース
コスパを重視したケース
オープンフレーム仕様のかっこいい奴や完全水冷用の完全に剥き出しになるケース
お前らどんだけ真っ黒いものが好きなんだ??????
なんでこんなに黒光りしてるのかってぐらいPCケース黒ばっかなんだけど
まじでどうなってるの
そんなこんなで僕の理想のPCケースはこんな感じです
- 白
- 片面ガラス
- 裏配線がしやすい
- 5インチベイが一個搭載
色なんて正直そのPCがかっこよければなんでもいいんですよ
問題は5インチベイなんです!
最近のPCは5インチベイが非搭載なんですよ!!!!!
白色で5インチベイ搭載といえばこれってのがありましたね
Thermaltake Versa H26 White
嫌いじゃないけどこれの黒持ってたんですよね
ケースも外しやすくてととっても使いやすかったです
ですが5インチベイのマウントがデカいんですよね
フロントのボタンが上とか横についていると丁度いい感じなんですけど
最終的に色々探して至った僕が思う理想のPCケースが見つかりました
Cooler Master MasterBox MB600L
これですこれ!
5インチベイが一個ついてて中身がスッキリしている感じ!!!
白色ではないですが塗装が普通の黒とは違っていて好みです
なぜ5インチベイにこだわるのか
僕がなんでこんなに5インチベイにこだわっているのか説明します
そもそもなんでこんなに5インチベイにこだわっているのかというと・・・
こういうのだったり・・・・
こういうのだったりを搭載したいからです!!
ケース外に搭載する方法も考えたのですが、机を占領するのがあまり好きではないのでケースに搭載したいと思っていました
なんかこういうのロマンありません?????
超好きなんですよねぇ
おすすめのケース(僕の偏見)
まずはコスパ重視見た目重視のケース
Cooler Master MasterBox Q300L
サイドにフロントのボタンついてるのエッチすぎません??
まじでCoolorMasterのPCケースのデザインは神
次組むなら確定でこれですね
デザイン重視のケース
Lian Li O11 DYNAMIC WHITE
フロントパネルのガラスに障害物が一切ないのが感動しました
簡易水冷向けですがPCの内部がよく見えていいケースだなと思いました
軽量ケース(某学校の人など向け)
INWINIW-ALICE-ORG
なんとこのケース、プラスチックです。
見た感じ組みやすそうで使い勝手が良さそうです
移動が多い人は使ってみてはどうでしょうか(僕は使わないですけど)
あとがき
いかがだったでしょうか
記事書きながらケースみてたら
PC組みたくなってきました
僕は今までお友達のPCを7台ほど組んできたのですが構成を決める時気づいたら2時間とか経ってたりする時があります
大体ケースで時間が潰れていくんですよね
みんな同じようなゲームがやりたいわけなので
中身自体は同じような物を付けていればそれほど問題はない感じで大体同じようなもので組んでます
僕の文章力がゴミ以下なので変なとことか多いと思いますがここまで見てくださった方ありがとうございました
次の記事はまたUnityかもしれません。ちょっと音ゲーに挑戦したいなーと思っています
その時は完成して時間に余裕ができたらまた投稿しようと思います
ありがとうございました
明日はゆりなさんです
🤔
・・・・?
キーツを救いたい【Part2】
この記事は Girak Advent Carender 14日目の記事です
はじめに
今回もUnityやっていくわけですが・・・・・
前回のスクリプト ItemのIDの型が間違っていたので修正しておきました
なんで記事書いてから間違いが見つかるんだよって感じですが
たまたま今週のやることが増えてしまいなかなか作業できず今もこの記事を書いてる暇なんてないんじゃないかってぐらいやることがあります
今日作るもの
今日作るのはこんな感じです!
- UI周り
- アイテムをドラッグアンドドロップできるようにする
- ウィンドウを開き所持アイテムを見ることができる
- アイテムの個数を表示する
今回できるのは時間的にもこれくらいだと思います。クラフトだったりだとかはもう時間的に間に合わないなーって思って諦めました
そのほかのスクリプトは時間があれば後日また書くかもしれません
UIの配置
- ①インベントリのパネル
- ②アイテム用のパネル
- ③インベントリの背景
- ④クラフト用パネル
- ⑤インベントリのアイテムの画像や個数
imageコンポーネントのColorを黒にして一番後ろの背景に使ってます
imageコンポーネントのColorを白にしてインベントリの白い背景に使っています
インベントリのスロットの背景をグループ化しています
スロットを整列するためにGridLayoutGroupを使用して整列しています
パネルのColorを白にして背景に使っています
クラフト用のスロットと+や=などのテキストを入れています
各スロットにパネルの中にアイテムのアイコンが入るRawImageと個数を表示するTextが入っています
Imageじゃない理由はSpriteじゃなくTextureで読み込んでるからです
親オブジェクトにGridLayoutGroupをアタッチして配置するのがおすすめですが
そのままにしておくとアイテムのドラッグアンドドロップのスナップが効かなくなるので
③の位置と重なったら親のGridLayoutGroupを削除し、各パネルのRectTransformの
Anchorsをcenter middleに設定してください
スクリプトを作成後に再生するとこうなります
アイテムの画像や個数はスクリプトで取得するので配置だけ行ってください
インベントリを開くスクリプト/アイテムの表示
アイテムを開く
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { /*アイテム関連フロント*/ [SerializeField] GameObject InventoryCanvas; void Update() { Inventory(); } void Inventory() { if (Input.GetKeyDown(KeyCode.Tab)) { if (InventoryCanvas.activeSelf ==false)//閉じていた場合 { Cursor.visible = true; Cursor.lockState = CursorLockMode.None; InventoryCanvas.SetActive(true); } else//開いていた場合 { Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked; InventoryCanvas.SetActive(false); } } }
とっても簡単ですね
canvasを取得してキー操作でオンオフしてるだけです
アイテムの画像の表示
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class InventoryIcon : MonoBehaviour { [SerializeField] RawImage texture; public Texture2D image; void Start() { texture.texture = image; }
手動でTextureを入れているだけです
この辺に関してはIDで指定しようと思いましたが思いつかなかったので
これでいっかってことになっています
アイテムの個数の表示
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; using UnityEngine.UI; public class Inventory : MonoBehaviour { public List<Item> inventory = new List<Item>(); [SerializeField] ItemData itemdata; public Dictionary<string, int> dic; string itemid; public Text panel0001num; /*panel2*/ public Text panel0002num; /*panel3*/ public Text panel0003num; /*panel4*/ public Text panel0004num; /*panel5*/ public Text panel0005num; /*panel6*/ public Text panel0006num; /*panel7*/ public Text panel0007num; /*panel8*/ public Text panel0008num; /*panel9*/ public Text panel0009num; /*panel10*/ public Text panel00010num; public void AddItem(string itemname) { for(int i = 0; i < itemdata.item.Count; i++) { if(itemname == itemdata.item[i].Name) { inventory.Add(itemdata.item[i]); Debug.Log(inventory[inventory.Count - 1].Name +"を獲得しました"); itemid = itemdata.item[i].ID; CountItem(itemid); } } } void CountItem(string itemid) { dic = new Dictionary<string, int>(); foreach( Item item in inventory) { //Debug.Log(item.Name); if (dic.ContainsKey(item.ID)) { dic[item.ID]++; } else { dic.Add(item.ID, 1); } } foreach(string key in dic.Keys) { Debug.Log(key + " = " + dic[key]); } updateNum(); } void updateNum() { foreach (KeyValuePair<string, int> tmp in dic) { switch (tmp.Key) { case "0001": panel0001num.text = "x" + tmp.Value; break; case "0002": panel0002num.text = "x" + tmp.Value; break; case "0003": panel0003num.text = "x" + tmp.Value; break; case "0004": panel0004num.text = "x" + tmp.Value; break; case "0005": panel0005num.text = "x" + tmp.Value; break; case "0006": panel0006num.text = "x" + tmp.Value; break; case "0007": panel0007num.text = "x" + tmp.Value; break; case "0008": panel0008num.text = "x" + tmp.Value; break; case "0009": panel0009num.text = "x" + tmp.Value; break; case "00010": panel00010num.text = "x" + tmp.Value; break; } } } }
はい、馬鹿ですね
panel○○○○numにはスロットのアイテムの個数を表示するTextを入れています
アイテムが10個固定という前提で書いているのであればこれでも問題ないのですが
さらに多くのアイテムを扱うとなるとめんどくさくなります
対策としてはアイテムの中身に個数の要素を作って個数を追加する関数を作ることでさらに扱いやすいスクリプトができると思われます
今回はこれが原因でクラフトの要素がややこしくなり作るのが困難になりました
アイテムの中身を作るときはちゃんと考えてから作りましょう;;;;;;
アイテムの個数を数える部分に関しては
スクリプト内で宣言したdictionaryをアイテムを数える関数ないでインスタンス化してインベントリ内のアイテムのIDをKeyとして順番に登録していき
IDが重複するとValueの中に数を追加するようにしています
アイテムをドラッグ&ドロップする
アイテムをマウスでドラッグアンドドロップできるようにします。
クラフトのスロットで離すとスナップするようにしてそれ以外の場所で
離すと元の位置に戻るようにしたいと思いますこれがとっても簡単に設定できるコンポーネントがあります
それがこちら
EventTrigger君です!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
このコンポーネントはアタッチされているオブジェクトがクリックされた時やドラッグされた時また他オブジェクトがドロップされた時などいろいろな条件を簡単に実装してくれるガチで便利なコンポーネントです
今回初めて使ってみました
インベントリ画面で必要なのはドラッグ&ドロップだけなので DragとEndDragのみを追加してください
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class InventoryIcon : MonoBehaviour { [SerializeField] RawImage texture; public Texture2D image; [SerializeField] GameObject initParent; Vector2 initPos; int itemquantity; // Start is called before the first frame update void Start() { texture.texture = image; initPos = transform.position; //Debug.Log(initPos); // Iteminfo(); } // Update is called once per frame void Update() { } public void OnDrag() { this.transform.position = Input.mousePosition; } public void OnEndDrag() { List<RaycastResult> results = new List<RaycastResult>(); PointerEventData pointer = new PointerEventData(EventSystem.current); pointer.position = Input.mousePosition; EventSystem.current.RaycastAll(pointer, results); foreach (var hit in results) { Debug.Log("検索中" + hit.gameObject.name); if (hit.gameObject.CompareTag("SnapUI")) { Debug.Log("SnapするUIを検出"); transform.position = hit.gameObject.transform.position; this.gameObject.transform.SetParent(hit.gameObject.transform); break; } else { this.transform.SetParent(initParent.transform); this.transform.position = initPos; } } Debug.Log("検出されませんでした"); } }
ドラッグをする時はマウスの位置にオブジェクトの位置を同期させているだけです
ドラッグを離すとマウスの位置のUIにRayCastAllをしてすべて取得します
クラフトのスロットにはSnapUIというタグがつけられているので
取得したオブジェクトのタグがSnapUIであればそのオブジェクトと親子関係に設定するというスクリプトになっています
もしもなければStart関数で取得した初期位置に戻ります
実行するとこんなかんじです
あとがき
本来は間に合うはずがいろいろな予定で一日遅れてしまった・・・
クラフトは作ってみたもののバグだらけでまともにうごかなかったのでまた今度ということで・・・・
次回はおそらくきゃねぽよサーバーのアドベントカレンダーで投稿すると思います
明日(今日)はメガホンさんです。どんな記事か楽しみにしています!
ここまで見てくれた皆さんありがとうございました。キーツが今年度Unityを触るのか楽しみにしてます
キーツを救いたい【Part1】
この記事は Girak Advent Carender 6日目の記事です
キーツ........Unityやらないか?
はじめに
さて、一年ぶりのアドベントカレンダー今回は今年から僕が始めたUnityについて
自分の勉強も兼ねて書いていこうかなと思います。
元々キーツが麻雀しててなかなかゲーム制作に手を付けないことに乗っかってこの記事を書こうと思いました、初心者が書くプログラムですのであんまり綺麗にかけてないかもしれないですが許してください。
(ちなみに名前の使用許可は取りました)
開発環境
- Unity2019.3.14f1
どんなものを作るか
キーツが言うにはこういう機能のあるゲームが作りたいらしいです
- 3人称視点のゲーム
- ワールドにアイテムがポップアップしてプレイヤーがそれを回収できる
- ウィンドウを開き所持アイテムを見ることができる
- アイテムをクラフトできる
- アイテムをクラフトすることで機械をつくることができる
- 機械をワールド上に設置できる
- 機械は何かしらのエネルギーを消費してアイテムの生成効率を上げる機能がある
マイクラじゃねえか!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
今回作る機能について
さすがに今回だけですべてを作ることは僕のスケジュール的にも不可能なので
APEXのランクとか回せてないから回したいとか言えない
今回は
- アイテム管理
- インベントリ周り
- アイテムのポップアップ
- アイテムの回収
らへんをやっていこうかなって思います
アイテムの生成
まずは動かすキャラクターと地面を用意しましょう
今回はUnityちゃんを使って動かします
実際に動かすスクリプトなどは省きますが一応参考になりそうなサイト貼っておきます
今回登録するオブジェクトを追加します
今回追加するオブジェクトの種類は上のようになっています
実際にワールド上に生成させるのは1,2,3番のアイテムです
これをプレハブ化します
プレハブ化する前にアイテムに付いているColliderコンポーネントのisTriggerにチェックを必ずつけてください
これを付け忘れると僕のスクリプトではアイテムを回収できなくなります
hierarchyからProjectのResourcesにドラッグ&ドロップで入れてください(ない場合は作成してください)
入れたらhierarchyの中にあるアイテムオブジェクトはすべて消してください
次にアイテムを生成するスクリプトを書いていきます
アイテムを生成する場所はx軸とz軸が50から-50です、y軸は0.5に固定してます
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemGenerator : MonoBehaviour { [SerializeField] ItemData ItemDataBase; //アイテムの一覧 [SerializeField] GameObject[] FieldItem = new GameObject[20]; //フィールド内のアイテムが入る変数 float x; //ワールドのx軸の変数 float y = 0.5f;// y軸 float z;//z軸 float counttime;//アイテム再生成のクールタイム // Start is called before the first frame update void Start() { GenarateObject(); counttime = 10f; } // Update is called once per frame void Update() { counttime -= Time.deltaTime;//クールタイムから1フレームにかかった時間を常に引く if(counttime <= 0.0f)//クールタイムが0になったら再生成を実行 { counttime = 10; GenarateObject(); } } void GenarateObject()//アイテムを生成する関数 { int itemnum;//アイテムの配列の番号 for (int i = 0; i < FieldItem.Length; i++) { if (FieldItem[i] == null)//フィールドのアイテムが消されてnullになっている場所にアイテムを生成する { itemnum = Random.Range(0, 3);//どのアイテムを生成するかランダムで決める x = Random.Range(-50,50);//指定した範囲内でのx軸をランダムに決める z = Random.Range(-50, 50);//z軸を決める FieldItem[i] = Instantiate(ItemDataBase.item[itemnum].Object,new Vector3(x,y,z),Quaternion.identity);//Instantiateで指定したアイテム番号のアイテムを生成する Debug.Log(ItemDataBase.item[itemnum].Name); } } } }
再生ボタンを押すとこんな感じに動作します
アイテム3が出ていないのですが導入する前の動画だったので生成されていませんが
ちゃんと動作しています
またアイテムを大量に導入する場合アイテムをランダムで選出するところをDirectoryのKeyなどで選出して
アイテムの生成はエリア分割を行いそのエリアで決められたアイテムが出現するようにするといいかもしれません
アイテム要素
まずはアイテムの要素を作っていきます
今回アイテムの要素は
- 名前
- オブジェクト
- ID
- アイテムの種類
- アイテムの説明文
- アイテムのアイコン
で構成していこうと思います
他に入れたいものがあれば任意でここに書き加えてください
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Item { /*アイテムの中身を設定する場所*/ public string Name;//アイテム名 public GameObject Object;//実際のオブジェクト public string ID;//アイテムのid public ItemType type;//アイテムの種類 public string Description;//アイテムの説明文 public Texture2D icon; //アイテムのアイコン public enum ItemType //enumでアイテムの種類を切り替えて入れれるようにしています { item, machine, } public Item(string name, GameObject itemobject, string id, ItemType itemtype, string desc)//Itemをインスタンス化し外から呼び出して使う { Name = name; Object = itemobject; ID = id; type = itemtype; Description = desc; icon = Resources.Load<Texture2D>("item" + id); //Resourcesフォルダから ファイル名 <item0000> (0000はアイテムid)を取得して代入する } }
今更ですが構造体にしてもよかったかもしれないです。(どっちでもいいと思っている)
今回の規模のゲームであればどっちでもいいとは思います
iconですがResourcesフォルダ内に名前を "item○○○○" という名前で入れておいてください(〇にはそのアイテムのIDが入ります)
public enum ItemType { item, machine, }
この部分ですがenumを使用しているのでItemType.itemと入力するとアイテムの種類がitemになります
enum今まで使ったことなかったんで勉強になりました
アイテム一覧データ
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemData : MonoBehaviour { /*実際にアイテムを保管する場所*/ public List<Item> item = new List<Item>(); // Start is called before the first frame update void Start() { item.Add(new Item("item1",Resources.Load<GameObject>("item1object"),0001,Item.ItemType.item,"このアイテムはitem2とクラフトするとitem3になります")); item.Add(new Item("item2", Resources.Load<GameObject>("item2object"), 0002, Item.ItemType.item, "このアイテムはitem1とクラフトするとitem4になります")); item.Add(new Item("item3", Resources.Load<GameObject>("item3object"), 0003, Item.ItemType.item, "このアイテムはitem4とクラフトするとmachine1になります")); item.Add(new Item("item4", Resources.Load<GameObject>("item4object"), 0004, Item.ItemType.item, "このアイテムはitem3とクラフトするとmachine1になります")); item.Add(new Item("machine1", Resources.Load<GameObject>("machine1object"), 0005, Item.ItemType.machine, "このアイテムはitem3とitem4を入手すると獲得できる機械です地面に設置できます")); }
オブジェクトはResources.LoadでResourcesフォルダ内にあるオブジェクトを持ってくることができます
もしアイテムを持っていきたいスクリプトがある場合はItemDataをインスタンス化して持ってきてください
最後に空のオブジェクトにItemManagerと名付け
ItemData.csをアタッチすれば完了です
アイテム回収
アイテムを回収するスクリプトはプレイヤーを動かすスクリプトの中に入れておきます
ここではアイテム回収に必要のない部分のコードは省きます
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { /*アイテム関連*/ [SerializeField] Inventory inventory;//インベントリのスクリプト [SerializeField] ItemData itemdata;//アイテム一覧のスクリプト private void OnTriggerEnter(Collider other)//何かに当たるたび動作する { Debug.Log("衝突"); for(int i = 0; i < itemdata.item.Count; i++)//アイテム一覧のアイテムの数だけ繰り返す { if(other.name.Contains(itemdata.item[i].Object.name))//衝突したオブジェクトの名前にアイテム一覧の配列のi番目のオブジェクトの名前が含まれていたら動作する { Debug.Log(i+"番目と一致"); inventory.AddItem(itemdata.item[i].Name);//インベントリにインスタンス化した配列の中に追加する Destroy(other.gameObject);//落ちてるアイテムを消す } } } }
まず今回はOnTriggerEnterで衝突を判定します
衝突したオブジェクトとアイテム一覧のアイテムの名前を比較して追加するのですが
なぜContainsで判定しているかというと
衝突した後拾ったオブジェクトはプレハブを生成したものとなり、Inspector上の表記が○○○(Clone)となってしまって名前をうまく取得できないため
名前が含まれているかで判定しています
インベントリ
最後はインベントリです
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Inventory : MonoBehaviour { public List<Item> inventory = new List<Item>(); [SerializeField] ItemData itemdata; public void AddItem(string itemname) { for(int i = 0; i < itemdata.item.Count; i++) { if(itemname == itemdata.item[i].Name) { inventory.Add(itemdata.item[i]); Debug.Log(inventory[inventory.Count - 1].Name +"を獲得しました"); } } } }
プレイヤーがアイテムを回収するとInventoryのAddItem関数を実行します
あとがき
僕の担当2日あるので今回はこの辺で終わります
Unityやらない人にとってはマジでどうでもいい内容だったけど普通に俺が勉強なったからよかったです
まだまだ技術不足なこともありますが頑張っていこうと思います
次(12/7)の記事はきゃねぽよ/kyaneeku⭐️⭐️くんが書いてくれます
どんな怪文書か楽しみにしてます
最後に
キーツここまでやったからにはUnityやれよ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
なんかよくわからないけどアドベントカレンダーを書く
・自己を紹介します。
ほとんど見るのはかのぽよ鯖の人だから自己紹介しなくていいかなって思ったけど
とりあえず自己紹介します
僕はあいりすといいます、ごく普通の実質高専生です。普段はゲームをやったり音楽作ったり動画編集したり画像編集したりPCの事考えたり
なんかやりたいことだけやってます。(最近こんなんでいいのか不安になったりしてる)
音楽は基本的になんでも聞きますがKawaiiFutureBassが大好きです。もうね、超好き、
エモい。ゲームはFPSから音ゲーからエロゲとかレースゲーまで一通りやってます。
(ホラゲー苦手だけどドキ分はやったことある)
動画編集はaviutlとかVEGASproとか使ってますあんまりデザイン面得意じゃないので
クソクオリティです。はい。絵も描くことがあるんですけど最近描いてないです。
MMDとかもしてます。
・じゃあ今年振り返りますか
といっても文字を見るためにスクロールするのもうみんな見飽きたでしょ。
動画でつくったほうが見やすいと思ったので適当な動画作りました
適当に作ったのでクオリティは期待しないでください。
ね?適当でしょ?
今年あったことはここに大まかに書かれていますが詳しく説明していきましょうかね
かのぽよサーバーの周りでやってたことについて詳しく掘り下げていきます
1月~4月の間のときのそら像があるサーバーは初めて僕がGCPで鯖立てしたやつです
この時期はLinuxのコマンドひたすら調べたり試行錯誤しながら鯖管理してました
(まあ管理というほどでもなかったんですけど)
そのあとPVPが作りたいと誰かが言い始めたのでコマンドブロックでタイマーとかの
勉強してました。実際に動かしたのは1・2回ですがバグり散らかして諦めました
そのあとは夏休みまでみんなちょこちょこ適当に遊んで終わりました
8月からはかのぽよの生活鯖にゲリラMODを入れるガイジサーバーに移住して
家具MODを楽しんでました
他にもいろいろあったけど大体忘れてる。
毎回通話が楽しかったことしか思い出せない、、、、
・あとがき
適当に書いたブログでしたがどうでしょうか。
この一年将来の事ずっと考えながら生活してましたが何一つ将来何したいかわからなかったですね。こんな中途半端に生きてていいのか・・・
とりあえず来年にはC++かC#ぐらいちゃんと使えるようになっていたいですね。
かのぽよサーバーの方々には一年付き合ってくれてありがとうございました
来年も変わらず遊んでくれると嬉しいです。
アドベントカレンダーを企画したかにぽよに感謝
次回は「きんかんとかにぽよのテンションは反比例する!?実験してみた!」です
ありがとうございました