お金がありません。

お久しぶりです。みりんです。

タイトルの通りお金がありません。

休職していたのでその時の分がかなり効いているのは確かなのですが、それにしてもお金がありません…

今年度から住民税で1万以上持っていかれるようになったため、元々の手取りが目減りしたのがかなり大きいです…

なんだかんだで毎月お金が掛かるイベントがあったり、趣味関連でお金を使ったりしてしまっていて、毎月少しずつ貯めていたお金が減っている状況です。

よくよく思い返してみると無駄な出費がかなり多く、数万レベルで節約できそうなので、節約をしようと思います。

マネーフォワードというアプリでお金の管理をしてて、以下のことに気がつきました。

  1. 銀行からのキャッシュの引き出しが多い(3~4万)
  2. 趣味娯楽関連の出費が多い(2万~3万)
  3. 食費で無駄遣いしすぎている(3万程度)

1に関しては、財布に1万~2万円入っていると安心するのと、スイカにチャージする際に現金が必要になるので、財布からなくなったら1~2万円足すというルーチンができてしまっています。

彼女が僕の地元の大学に通っているのもあり、定期的に電車で地元に帰っているので、電車代で7千円程度かかるのです。

それ自体はいいのですが、月に2回ほど帰ると毎回その度にお金を財布に入れる構図が出来上がっているので、引き出しが多くなっているようです。

2は単純に欲望に負けてしまっているだけですね。

ソシャゲなどをやっているわけではないのですが、MTGというカードゲームが好きでやっていて、オンライン版でパックを買うために課金したりしています。

また、気になる漫画を見つけたりすると、数巻(2~3冊)程度衝動的に買ったり、ちょっといいイヤホン買ってみたり….

衝動的な無駄遣いが多いみたいです。

最後に3ですが、これは自炊の頻度が減ったことが原因だと思ってます。

去年は割と自炊をしていたのですが、最近は仕事も忙しかったりして、自分の時間がもっと欲しいという気持ちが強くなってきました。

そういった気持ちからなるべく家事に時間をかけたくないと思うようになって、コンビニでお弁当を買ってきたり、UberEatsを呼ぶことが多くなってしまいました。

特にUberEatsはデリバリーしてくれるのもあって自分の時間がほとんど圧迫されずにご飯が食べれるので、結構利用してしまっています。

ただ、UberEatsは配送料がかかったり、少し割高だったりするのでその分出費も大きくなってしまいます。

《対策》

じゃあどうしたらいいのかなのですが、下記のように対策してみようと思います。

  1. キャッシュの引き出しはそのとき必要な分だけ引き落とす。
  2. 趣味に使う金額に上限を設定し、上限を超えた場合は次の月にその分使える枠を減らす
  3. 自炊をする。時短のために休日におかずなどを作り溜めて、平日は調理しない。もしくは社食を利用する。

正直1に関しては帰るたびに引き落とすことになるのは変わらず、彼女と遊ぶためのお金も必要なので、今までとあまり変わらないかもしれません。

ただ、2,3に関してはきっちり守れば数万レベルで節約できるのではないかと思っています。

趣味に関しては最近ゲームもしなくなってきているので、衝動的に漫画などを買ったりしなければ守れそうです。

誘惑なくなればUnityなどの開発も進むので一石二鳥かもしれません。

自炊に関しては休日に1週間分作りためしておけば、あとはちんするだけなので時間も節約できて良いと思っています。週末の予定といえば彼女と会うか家で何かしているかくらいしかないので、一週間分のおかずを作る時間はたっぷりあります。1つ問題があるとすれば、週末彼女に会いに行ってしまうと自炊ができなくなってしまいますが、そういった場合はなるべく社食を利用したりして節約しようと思います。

しばらくは節制して、貯金しつつスキルアップを目指そうと思います。

それでは今日はこの辺で。

1株ずつ買ってみて思ったこと。

どうも、みりんです。

昨日、1万円以内で1株ずつ2つの銘柄(UUUMとカプコン)を買った話をしました。

一日たってみて感じたことは……

株価が気になる!!!

やっぱり、買ってみると自分の株がいくらなのか気になりますね。

でも、これって結構いいことなのでは?と思いました。

というのも、いつもスマホを開いてやることと言ったら、ツイッター。

正直、何の生産性もありませんw

もしかしたら、たまには有用な情報が流れてくるかもですが、そんな情報を流してくれている、アカウントをフォローしているわけもなく….

ですが、今日は開いてやることは株価の確認。

株価を確認してもいい方向に転ぶわけではありませんが、少なくともチャートを見たり、日経平均や為替を見たり、いろんな情報を手に入れている感じがしました。

チャートを見て経験値を蓄積していかないと、正確な取引とかってできないんじゃないかぁーと素人ながらに思ったりしているので、いい傾向だと思っています。

1万円以内でやりくりしようと思っていたのですが、正直いろんな株を買ってみたいと思うようになってきたので、早々にルールを変えてしまおうと思っています。

一回購入するのに1万円以内とか、月の購入回数は一回までとか、そういった制限を設けるのはありかもしれません。

後は無駄遣いしそうになったときに、代わりに株を買うようにしてみたりもありかも??

ちょっとルール考えてみて、いろいろ買っていこうと思います。

それでは、今日はこの辺で。

”1株”始めました

どうも、みりんです。

タイトルの通り、”1株”というものを始めてみました。

普通、株ってこの値段で買いたい!って場合は100株からしか買えないんですが、とりあえず今の値段じゃなくても欲しい!って場合は1株から買うことができます。

※前者は「指値注文」、後者は「成り行き買い」なんて言ったりします。

とりあえず、株を始めてみるにはちょうどいいと思ったので、1株から買ってみました。

あと、始めるにあたって資金が必要になるわけですが、そこまでお金を持っているわけではないので、とりあえずトータル1万円以内になるように買ってみました。

今後売買するときはトータル1万円のルールはしばらく崩さないようにしたいと思います。※自身が付いたり、本腰入れようと思ったら増やしていこうと思います。

記念すべき第一回目に買った銘柄はUUUMとカプコン。値段はそれぞれ次の通り。

  • UUUM:4915円
  • カプコン:2926円

UUUMに関しては前からほしいと思っていたので買ってみました。

去年はまだ3000円半ばくらいでしたが、今は5000前後になっているので、ある程度お金に余裕があれば、今頃かなり儲けがでていたと思うと残念でなりません….

カプコンもモンハン好きというのもあって、前からほしいと思っていました。

買う前にチャートを見てみると、e-Sportsなどゲーム関連事業に注目が集まっているらしく、数週間前からカプコンの株がすごい上がっているようでした。

さすがに大幅に上がっていたので、直前の数日の値動きは上がったり下がったりといった具合でしたが、上がる力がまだ残っていると信じて買ってみました。

とりあえず、しばらくは値動きを見てみて一喜一憂してみたいと思います。

あと、毎回買ったり売ったりするときはその理由を書いていこうと思います。

当たり前かもしれませんが、取引するときはその選択があっていたかいなかったに関わらず、売買するときの理由というのがとても大事だそうなので。

では、今日はこの辺で。

余談

実は株取引自体は全くのはじめてというわけではありません。

去年の暮れごろ、興味本位で少しやっていました。

当時は20万ほどの資金で取り引きしてみましたが、20万だと低価格な株しか買えず、そもそも大きな金額を動かすことが出来ないので、負けも小さいですが儲けも小さく、あまり楽しさを見出すことが出来ませんでした。信用買いといって、所持金の数倍までの株を買うことが出来る方法もあるのですが、最低35万はないとできません。

ビビりながら取り引きしたこともあり、数千円の負けで済みましたが、パッとしない感じになってしまったので、損を確定させるために持ち株を全部売った段階でやる気もなくなってしまい、今に至るまで手を付けずにいました。

最初に勝ちが続いていれば続けたのかもしれませんが、そんなにうまくいくわけもなく…

再開後は少しくらい勝てるといいなぁ。

久々の更新と復職の報告

お久しぶりです。みりんです。

大分更新をサボってしまいました。約4ヶ月ぶりの更新です。

タイトルにもあるように、あれから復職しました。

今はかなり調子もよく、なんの憂いなく仕事をすることができています。

復職自体は3月からで、約一ヶ月半程度の時短勤務の後、完全に復活しました。

戻った当初は先輩との関係がギクシャクしていたり、プライベートでもいろいろあり、精神的に不安定な状態が続いておりました。

ですが、今は全ての問題が解決して、日々何事もなく過ごせています。

ただ、今ではUnityに全く触れなくなってしまいました。

精神的に安定してきて、色んな事に対して興味が沸くようになり、徐々にやらなくなってしまいました。

最近ではゲームばかりやっていてこのままでいいのだろうかと思うこともあります。

ただ、その時どきで夢中になれるものがあるのはいいことなのかなとも思い、自制したりすることはしていません。

一応、少しオリジナルゲームを作っていて、現在は作成作業自体は止まってしまっているという状況です。

一からキャラクター絵を描いたりしているので、少し時間がかかるのと、プログラミング作業がないことがモチベーションの低下の原因になっています。

なので、少しずつ気が向いたら作業を進めて、いつか完成させられたらと思ってのんびり作っていこうと思います。

ところで、なぜ突然更新を再開したかといいますと、日々いろいろなゲームをやったり、いろんなことを考えたりする中で、「自分の思考を形にして残す」ことがとても重要なのではないか、と思うようになったためです。

最近、Magic the gatheringのPC版であるMTGAというゲームで遊んでいるのですが、デッキの選択やサイドボード、デッキごとの相性など…頭の中で渦巻いてる考えをout putしないと、整理が難しいと感じるようになりました。

そもそも感覚的なもので、言語化できていないものもあり、そういった自分の思考やその思考に至った根拠、過程をしっかり自分の中に落とし込んでおくと、バラバラだった思考がまとまるような気がしたためです。

あとは単純に何か発信してみたかったというのも理由のひとつかもしれません。

今後、発信する行為がかなり重要になると、個人的に考えているため、ブログでとりあえず発信し続けてる習慣を取り戻そうとおもいました。

ながなが、とりとめもなく書き綴ってしまいましたが、いろんなことをこのブログに文章として残して発信していこうと思いますので、今後ともよろしくお願いします。

内容については本当にとりとめもないことなので、ほぼ趣味になるかと思いますが、有益な情報も少しずつかけたらいいなと思います。

それでは、今日はこの辺で。

Unityの寺子屋 4日目

学習内容

アニメとSEの設定

◇アニメとSEの設定

復習
アニメはctrl+6で開くことが出来るアニメーションウィンドウから設定できる。
アニメーションウィンドウ中央のCreatから新しいアニメを作る。
2Dではアニメに使う画像などをプロパティにドラッグ&ドロップすることで、簡単に作成可能。

複数のアニメを状況に応じて切り替えたい場合はアニメーターコントローラーから設定できる。
ある条件下でのみ再生したいアニメがある場合、遷移条件を設定する必要がる。
遷移条件の設定はトランジション(アニメ間にある矢印)に対して行うが、こういった特定条件下でのみ再生したいアニメの場合にはどこから遷移させて良いのかわからない場合がある。その場合は、AnyStateからトランジションを引けばよい。
AnyStateは現在のステートは指定せず、切り替え用のトランジションが必要な場合に使用する。

DOTweenを使ったアニメ

Sequenceクラス:アニメーションの統合を行えるクラス。
Append():直前の動作に続けて設定したアニメを再生するメソッド
シーケンスクラスのインスタンスを作って、そこからAppend()を呼び出しますが、引数に追加したいアニメ(Tweenなど)を書き込むと直前の動作に続けて書き込んだアニメが再生されます。
具体的なコードなどは以下のサイトを参考にしてください。

Qiita – DOTweenをふわっとまとめてみた
https://qiita.com/kagigi/items/bdf4d42835add07b0077

ToAlpha(getter,setter,終了値、期間):DOTweenクラスの関数。第一第二引数にはラムダ式というものを使って、不透明度を取得・設定するための匿名関数を指定するとのこと。正直何言ってるのかわからなかったです….
ラムダ式というものは関数を設定するためのC#の文法とのこと。ようは関数を定義しているらしいです。
どうやって定義しているかというと、

引数 => 関数内の処理

という形で記述されていました。
一応ざっくり説明をしてくれてはいるものの、しっかりとどういうものか知っておいたほうがよさそうですね。

後はSEを追加しました。
また、本当は追加ステージの作成と、タイトル、ステージ選択画面まで作って一応完成ですが、そちらについては「UnityではじめるC#」(リンクはアマゾン)で一度学習した内容なので今回は割愛しました。
そんな感じで完成したゲームがこちら。



ついにUnityの寺子屋終了です!


内容的にかぶっているところなど、割愛した部分もありますが、 一応1カ月で3冊の入門書を終わらせることが出来ました。
ここからすぐ自作ゲームを作ることは難しいかもしれませんが、スタートラインにはたてたのではないでしょうか。
とりあえず、作りたいものにチャレンジしてみて、その過程でいろいろなスキルを身についけていきたいと思います。

そういえば、今まで、この本を含めて3冊のUnity入門書でC#も少しは勉強できてはいるものの、その内容はC#の超基本的な部分のみですので、C#のいわゆる常識的なところ(基本的な文法や使い方、用語など)はちゃんとしたC#専用の入門書、学習書を使って勉強したほうがよさそうです。
有名どころだと独習C#などがあるようだったので、本屋で内容を見てみたところ、結構難しそう+つまらなそう(モチベが上がらなさそう)でした。
おそらく、今はゲームを作りたい欲が強く、そういった部分に気持ちが向かないのだと思います。
ゲームを作っていくうちに、C#の文法などがわからなくて困る場面が出てくると思うので、その時にそういった本で勉強するのがモチベーションを維持しやすいのかなと思いました。
せっかく一カ月あった休みを使って勉強したので、このまま何も残せず終わりたくないですし、自分のこれからの人生のためにも続けていきたいと思うので、モチベーション管理はしっかりしたいと思います。

次回以降はゲーム作成中に勉強した技術や、作成中のゲームなどの制作過程を書いたり、作成するにあたり取り組んでいる本などを今までのような形式で書いていこうと思います。

それでは、今日はこの辺で。


Unityの寺子屋 3日目

学習内容

  1. chap4:放置ゲームをクッキークリッカー系に変える
  2. chap5:横スクロールアクションゲームの作成
    • Rigidbody2Dのプロパティ
    • PhysicsMaterial2D
    • ゲームクリアの処理

1.chap4:放置ゲームをクッキークリッカー系に変える

OnApplicationPause関数:UnityEngineクラスの関数で、引数はbool型。アプリがバックグラウンド以降or復帰した時に呼び出される。
OnApplicationQuitというアプリが完全終了した際に呼び出される関数もあると野のこと(下記参考サイト参照)

以下参考サイト

chap4の内容はクッキークリッカー系に直すだけでした。
基本的なシステムは放置ゲームのものを流用すればできるようになっていたので、初めて出てきた関数だけメモがてら残しています。

2.chap5:横スクロールアクションの作成

chap5からは横スクロールアクションを作成していきます。
正直この章目当てで買ったくらい横スクロールアクションのゲームが作りたいと思っています。メトロイドが好きなので、メトロイドヴァニアなんかをそのうち作れたらいいなぁと思っております。

◇Rigidbody2Dのプロパティ

プロパティ説明
Body Typeその物体のタイプを、Dynamic、Kinematic、Staticから選択する。
Materialマテリアルを設定する。
Simulated物理演算と衝突判定のon/offを切り替える
Use Auto Massonにするとコライダーの形状から質量を自動的に検出する。
Mass質量のこと。(Use Auto Mass)をオフにしているときはここに密度を指定する。重い物体は動かす際にも止める際にも大きな力が必要になる。
Linear Drag移動の減衰値
Angular Drag回転動作の減衰値
Gravity Scale重力の影響度合。0にすると無重力状態を表現できる。
Collision Detectionほかのオブジェクトとの衝突検知の方法
Sleeping Modeプロセッサー負荷を抑えるためのオブジェクトのスリープ方法。
①Never Sleep、②Start Awake、③Start Asleepの三つがある。
①は常時動ける状態なので、負荷がたまりやすい。衝突すればスリープが解除されるため、たいていは初期設定の②で問題ない。
Interpolateスムージングの設定。処理の重さなどが原因で動きがぎこちなくなる時に利用する
Constraintsリジットボディーのモーション制限(移動/回転)。positionのx、yどちらかをonにすると縦or横にしか動かなくなる。rotationのzをonにすると回転しなくなる。

LinerDragとAngulerDragを調節することで粘り気のある液体のなかを動くような表現に使える。

Rigidbody2Dコンポーネントを利用してキャラクターの動作などをさせる場合には、FiedUpdate関数内で操作すると決められている。
これはFixedUpdate関数はUpdate関数と違い、固定フレームレートで動くため、動作環境依存でフレームレートが変わり、遅延してしまったり、不安定になることがないためである。

復習

velocity:Rigidbodyの速度ベクトルのこと。
enum:列挙型。列挙型で変数の宣言を行うときは「タグ名 変数名;」とする。

◇PhysicsMaterial2D

3Dグラフィクスなどでは物体の表面の質感の設定を指す。今回設定するのは物理エンジン用のPhysicsMaterial2Dでは物体が接した時の滑り具合を設定する摩擦と、衝突した時の跳ね返り度合を調整する弾性を設定できる。

復習
・Linecast関数:Physics2Dクラスのラインキャスタ機能の一種で線分上に特定のレイヤーに属するColliderが存在する(ヒットする)場合はtrueを返す。
Physics2D.Linecast(始点、終点、レイヤーマスク、トリガーも対象にするか)

ここではブロックや敵との衝突判定をおこなうために、ラインキャスター関数を用いている。キャラクタープレイヤーの足元を三角状に掘り下げるような判定領域を作っている。敵キャラがブロックにぶつかって移動方向を変える際にも、敵がブロックと衝突したかどうかを検出するために使っている。

・既習のゲーム外の判定について
OnTriggerEnter2D関数でプレイヤーがトリガーのコライダーに接したことを判別している。関数の引数は接触した相手のCollider2D型を参照する。

◇ゲームクリアの処理

ゲームクリアの処理は基本的にはゲームオーバー時と変わらない。
しかし、ゲームオーバーではプレイヤーは消していたが、今回はクリア時にプレイヤーを消さないため、ゴールのオブジェクトに触れ続けると接触判定が繰り返し発生してしまう。
そのため、クリアの演出(UIの表示など)+ ゴールオブジェクトとプレイヤーの衝突判定が消えるようにしなければいけない。

なんやかんやで、chap5時点のゲームはこちら

念願の横スクロールアクションの基礎が勉強できました!
やっていることは今までと同じですが、敵を踏む処理や敵の移動の処理の方法などの基本を学べました。
最近では、「あのゲームのあの敵はこうやれば実装できるのかな?」とか「あの動きはどう処理してるんだろう。」といった考えや疑問がたくさん湧いてきて、それを考える時間がとても楽しいと感じています。
次はプレイヤーや敵にアニメとSEなどの音楽、追加ステージなどをつけて完成です。
画面をスクロールさせるにはマップを広くしたり、カメラにプレイヤーを追従させたりする必要があります。
その辺についても勉強できるのかな?
一応今まで自分が勉強してきたことでどうにかなりそうな気もするので、この本が終わったら挑戦してみたいです。

この本はchap7がアプリ販売についての考え方になっているので、ゲーム作成に関する内容は次のchap6が最後になります。
正直、書く内容が陳腐すぎるだろうなと思いながら書いておりますが、どうでしょうか..?
chap6の記事は少し内容も薄くなる(chap6の内容が今までやってきた本の内容が見についていればできてしまうレベルだと思われる)ので、さらに書くことがなさそうなのが心配ですw
そんな感じではありますが、最後まで頑張ろうと思います!

それではこの辺で。

復職するかもしれない話

Unityの寺子屋2日目で2月20日中にchap4+αの内容を投稿すると宣言していましたが、実家が引っ越ししたことに伴っていろいろやることがあったので、そちらを優先しておりました。
また、休職期間がそろそろ終りに近いため、会社のほうからも連絡があり、今後どうしていくべきか(復職後に適応障害の症状が出ないためにどうしたらいいか、自分が復帰するにあたり会社にお願いすることなど)を考えたり、親に相談してみたりしていました。

主治医からは2月末まで休職診断書を出していただき、体調も良くなっている実感はあるものの、会社のほうと話す機会が何度も延期なっている関係で、自分がどんな悩みがあって、このようになってしまったのかを正確に伝えられていません。
そのような状況ですが、主治医の診断が2月末まで休職から変化がないのであれば、3月1日から復職を検討する必要があると会社のほうから言われてしまい、かなり不安を抱えております。
もともと面談が1月末→2月頭→2月末と延期に延期を重ね、2月末の面談で復職前に自分の思いを伝えようとしていた矢先に、会社のほうの都合で人事の方とお話する機会を3月前半にしてほしいとの連絡をもらいました。延期すること自体は不満ではなく、休職期間が伸びた分、自分のやりたいことや、今後の人生について考える時間が増えるので、自分としてはありがたいと思っていました。
しかし、3月頭の面談の日程調整などの連絡を取っていた中で、突然の3月1日から復職という話が出てきたので、正直なところ戸惑っております。
復職の前に一度人事の方と話をし、自分の思いや悩み、復職するにあたってお願いしたいことなどを伝えてから、復職に向けて動きたいと考えていたこともあって、なんの準備もできていない不安や、「そもそも戻れるのか」といった思いが強いです。
また、そういった状況で復職の話が出てしまったからなのか、今日は休職直前にあったような激しい気分の落ち込みがあり、日中はUnityの勉強をやれるような精神状態ではありませんでした。
休職決定前後は食欲もなく、吐き気や胃の痛みに悩まされていたのですが、今日も食欲はあるものの、胃がキリキリと痛く、吐き気を感じる瞬間もあり、症状が少し戻ってしまいました。
夜になり、大分落ち着いてきたので、ブログの更新をしようと思い、この記事を書いております。

復職の話が出てすぐにそういった症状が再発してきたので、「休職という長期の休みを手放したくないのでは?」「仕事をしたくないだけでは?」とも思いました。
正直、これを読んでいる方はそう思っているだろうと思いますし、甘えてるんじゃないの?と思っているのではないかと思います。自分でも何度もそう思いました。

ですが、職場の考えと自分の考えをすり合わせることが出来れば、こういった症状に悩まされることなく、普通に仕事ができるはずだと思っているので、復職に対する気持ちはかなり前向きだと思っています。
たしかに、休職期間中に自分がやってきていることはとても楽しく、成長も実感できますし、これを仕事にできたらどんなに良いだろうとも思いますが、仕事を今すぐやめて転職しようなどという思いはありません。
復職後、どうしてもダメであれば自分の人生を見つめなおして転職するといった選択を取ろうという考えです。
また、復職に前向きな理由としては、いずれ自分のやりたいことを仕事にしようと思ったときに、即やめてもリスクが大きいです。
それであれば、趣味や副職の範囲で自分でスキルアップを図って、そのスキルである程度稼げるようになれば、転職や独立といった形を取れればと思っています。
ですから、どちらかというと復職したい気持ちのほうが強いです。

とりあえず、来週の月曜に主治医のほうから診断を受け、その結果を会社のほうに報告する予定です。今後どうなっていくのか自分でもわかりませんが、体調や自分の気持ちに正直になって、生きていけたらと思っています。
不安もありますが、復職のことは深く考えず、残りわずかな休職期間を存分に自分のために使っていこうと思います。

長々と愚痴のようなものを書いてしまい反省しております…
ただ、こういった身の上話もしようと思っていたので、今回はちょうどよかったかもしれません。
また、休職に至った経緯や理由なども書いていこうかと思います。

それでは、この辺で。

Unityの寺子屋 2日目

学習内容

  • BGMと効果音を鳴らす
  • オブジェクトにアニメーションを付ける
  • DOTweenを使った演出
  • スコアデータの保存

◇BGMと効果音を鳴らす

ゲーム中のBGMは、ゲームが起動している間、ずっとなり続けてほしいので、ゲームの間常に存在しているオブジェクトから鳴らす。(例えばゲーム中の処理をする空のオブジェクトなど)
方法としては、オブジェクトにAudio Sourceコンポーネントをアタッチし、音源をAudio Clipにドラッグ&ドロップすればよい。

ゲーム中の動作に演出としてSEを付けたい場合にはスクリプトから制御する。
具体的には…
ゲームマネージャーなどの制御オブジェクトにアタッチしているスクリプト上で
AudioSource型の変数(仮にaSource)とpublic なAudio Clipクラスの変数(仮にSE)を宣言しておく。

Start関数内で、aSourceにAudio Sourceコンポーネントを取得させておく。

ヒエラルキービューに戻り、スクリプトをアタッチしているオブジェクトのインスペクタ―ビューからpublicで宣言しているSEに鳴らしたい音源をドラッグ&ドロップし、変数に音源を渡しておく

音声を鳴らしたい処理を行っている関数内でaSource.PlayOneShot(SE);と書くと、処理を行った際に変数に渡していた音声が鳴る。

◇オブジェクトにアニメーションを付ける

アニメーションはwindow→Animation→Animation(もしくはCtrl+6)から作成することが出来る。アニメーションを付けるとAnimaterウィンドウとAnimationウィンドウの2つが現れる。
前者は複数のアニメーションを切り替える仕組み。アニメーターウィンドウでは、複数のアニメーションがボックスとして表示されている。これらボックスはステートと呼ばれている。特定のボックス間には矢印が伸びているが、これはアニメの遷移(トランジション)を表している。

後者では具体的にどんなアニメーションをオブジェクトに付けるか編集することが出来る。アニメーションウィンドウでは位置を変えたり、スケールを調整したりと様々なことが出来るが、どのようなアニメが存在するのかはここでは割愛する。
このアニメーションでは素材さえあればパラパラ漫画のようなアニメを付けることも可能である。
また、スクリプトからアニメーションを制御することもできるため、特定の処理を行う場面でのみアニメーションさせることも可能である。

GetCurrentAnimatorStateInfo関数:レイヤー数(アニメーターウィンドウ内のレイヤー?)を引数にとり、現在のアニメーションステートを返す関数。返り値のステートはAnimatorStateInfo型。
引数のレイヤー数は0だとBaseLayerを参照するのだと思う。が、あっているのかな…?
有識者の方がいましたら、コメントお願いします。

上記関数が持つfullPathHashは現在のステート(レイヤー名.ステート名)をIDに変換してくれるプロパティ。IDはint型の数ケタの数字で、この値を条件文内で比較することでスクリプト上からアニメーションの遷移を制御できる。
AnimetorクラスのStringToHashは引数に渡したstring型の値をint型のIDに変換する関数で、fullPathHashで取得したステートのIDとStringToHashでIDに変換したアニメーションステートを比較して、目的のステートと一致しているのか判断する際に使われる。

使用例は以下参考サイトを参照。

Pop技術ログ – 【Unity】アニメーターによる状態遷移とソース側での制御【技術】
http://blog.livedoor.jp/f_paul/archives/27309591.html

Amnesia~あむねじあ~ – Animator.StringToHash  文字列からパラメーター ID を生成。
http://bestrafung.blog.fc2.com/blog-entry-22.html

◇DOTWEENを使った演出

オブジェクトを曲線を描いて動かしたり、ジャンプさせたりと少し特殊な動かし方をしたい場合に便利なDOTweenというAssetを導入しました。
今回は取得したアイテムが曲線を描いて動く演出を付けるために以下のようなスクリプトを書きました。

各種関数などの簡単な説明は上記のスクリプトにコメントとして残してあります。
DOTweenの関数はDOTweenの公式ドキュメントや、DOTweenについてまとめている方がいらっしゃるので、そちらを見ていただけたらと思います。
自分もいろいろ調べてみて、使い方などその都度書いていこうと思います。

以下参考サイト。

GitHub – anzfactory/HowTo DOTween.md
https://gist.github.com/anzfactory/da73149ba91626ba796d598578b163cc

◇スコアデータの保存

PlayerPrefs:データを保存する仕組み。各OSの特定の場所にデータを保存してくれる。読み書きはキーと呼ばれる値を識別するための名前と値となる数値や文字列をセットにする。
理解のためのに参考にしたサイトは以下を参照

Qitta – Unityで簡単なセーブとロードの方法
https://qiita.com/tilyakuda/items/e3ccfbf507acfb16404f

PlayerPrefsではint、float、stringの3つの型しか使えない。例えば時刻を保存したい時などはDateTime型の値になるので、このままでは保存できない。
しかし、変数名.ToBinary.ToStringとすると、ToBinaryで変数に格納された値を64bitのバイナリ値に直し、その後ToStringでバイナリ値を文字列に変換することで、型の違う値を保存することが出来る。
ちなみにSetIntの扱う整数は32bitの値なのでバイナリ値のままでは保存が出来ない。

少し完成まで時間がかかりましたが、作ったゲームはこちら。

放置ゲーム完成版

やっぱりひとつ前の本よりも内容は難しくなっていて、完成させるのが大変でした。
ただ、調べればすぐ理解できたり、あーあれかってわかるときもあるので、自分の成長を実感しております。
また、やっていることは同じようなことの繰り返しなので復習になっていいですね。

本当は19日に投稿するつもりだったのですが、忘れていたので今日になってしまいました。

今日はchap4+αの内容も投稿しようと思います。

それでは、この辺で。


Unityの寺子屋1日目

学習内容

  • chap2:放置ゲームの作成
  • chap2内でわからなかったところ(UIImageとScript)

UIImage

・インスペクタ―内のRaycastTarget:オフにするとオフにされたイメージはタッチ判定の対象外となる。

Script

・(~)Instantiate(-):インスタンティエイト関数は引数(-)に渡したオブジェクトのクローン(インスタンス)を生成する。関数の前の()内(~)にGameObjectなどの型を入れると、指定した型にキャスト型変換して、指定した型の変数を代入する。

・SetParent関数:セットペアレント関数は親のオブジェクトを設定する関数。
 変数に対してこの関数の処理を行うと、引数に渡したオブジェクトの子として変数が設定される。

EventTriggerについて – Qiita

https://qiita.com/takesuke/items/e3b314aa7fd9111bc17f

代表例はボタンコンポーネントについてるOnClick。
詳細は上記リンクQiitaに記載されているので、参考にしてください!

イベントトリガーコンポーネントを目的のオブジェクト(本内ではプレハブ)にアタッチして、関数を読みだすのですが…ここで問題発生。

イベントトリガーコンポーネントを アタッチした後、関数を読みだすために”使いたい関数(メソッド)の書かれたスクリプトをアタッチしたオブジェクト”をNoneの部分にドラッグ&ドロップし、NoFunctionから目的の関数を呼び出すのですが、オブジェクトの部分にスクリプトを直接当ててしまっていたので、関数が全然呼び出されませんでしたw

そこそこ時間を無駄にしてしまいました…
調べてみるとあまりそういったミスをしている方はいなかったのですが、初心者や初学者、勉強したての方はミスってしまうのではないかと思い、残しておこうと思いました。

・DateTime.UtcNow Property:コンピューター上の現在の日時を世界協定時刻 (UTC) で表した DateTime オブジェクトを取得する。
時刻の差を記録するためにDateTime型同士の引き算をすると、その結果はTimeSpan型になるため、~秒間隔でなにかをする際には、TimeSpan型で時刻差を扱うようにしたほうが良い。

・FromSeconds():指定した秒数を表す TimeSpan を返します。秒数は、ミリ秒単位の精度で指定する。つまり、引数にいれたdouble型の数字をミリ秒単位の精度で秒数に直して返す関数。

・SetSiblingIndex(): ヒエラルキービュー内などのゲームオブジェクトの順番を指定した順番に直すような関数?。この本では、レベルアップの演出で表示する雲のオブジェクトを、2つのオブジェクトの間に表示させるために使用していた。
詳細は下記を参照。

Kanのメモ帳 – Hierarchy内の順序をプログラムで変える

・enum型:連続する定数(列挙体)を定義するための型。曜日や月など特定の値しかとりえないものに対して使われる。
詳細は以下を参照。

++C++;//未確認飛行C – 列挙型

https://ufcpp.net/study/csharp/st_enum.html

なんとかchap2の内容を一通り終えることが出来ました。
今まで2つの本を通して、ゲームってこんな感じでできるんだ!という思いと、意外と理解できるし、もう少し勉強すればサックっと一つくらいゲーム作れるかも!とか思っていました。
こんな調子だったのでこの寺子屋をはじめる前も、サクッと終わらせてゲーム一個作ってみよ!なんてことを考えていましたが、考えが甘かったみたいです….

というのも今までやっていた2冊に比べると内容は格段にレベルアップしております。やっていることは「UnityではじめるC#」の延長なのですが、スクリプトも複雑になってきて、スクリプト一つ一つでやっていることを理解することはできても、自分でこれを作れるのか?という不安が出てきました。

ただ、サンプルとして用意されているゲームのジャンルがとても素晴らしい(汎用性が高い)ので、実際に自作ゲームを作る際にかなり参考になる(流用できるところがかなり多い)だろうと感じています。
あと、そもそも最初の一つ目に作ったゲームなんて、たいていの人がクソゲーしか作れないだろうと思いますし、自分が抜群にできるやつとも思っていないので、最初はほぼスクリプトやシステムが丸パクリみたいなものでも、いいと思うようにしました。
ただ、この数週間でずぶの素人から、ここまで良くこれたものだとも思いますので、そこは褒めてあげて、さらにレベルアップしていきたいと思います。
寺子屋は時間がかかりそうなので少しずつでも進めていこうと思います。
あんまり根を詰めても精神的に良くないですし。

それでは、寺子屋の1日目はこれで終了です。
次はchap3に取り組んでいきます。

あ、あと参考にしたリンクなどを載せるようにしてみました。
同じようなところでつまずいた方が奇跡的にこのブログにたどり着いたとき、参考になればと思いますw
もし、なにかこうしたほうがいいよみたいなアドバイスなどありましたら、コメントを下さるとありがたいです。

それでは、ありがとうございました。
では、この辺で。

UnityではじめるC#4日目

学習内容

  • 物理パズルの作成
  • PlayerPrefsの使い方

◇物理パズルの作成

やったこととしては、ゲームの要素となるボール、壁3種類(移動可能な壁、移動歩かな壁、ゲーム外検出壁)、ゴールをゲームオブジェクトとしてシーン上に配置して、Rigidbody2Dやコライダーなどのコンポーネントをアタッチ。
ゲームのリセット機能を付けたり、ボールやシーン上に配置する壁はPrefab化しておいて、新しいステージなどを作成する際やリセット時にオブジェクトを配置できるようにしたりしました。
また、ステージ選択画面を作ったりと、今までやってきたこと(Unity5の教科書も含めて)を総動員してゲームを形にしていきました。
なので、内容としては今までやってきたことの復習といった感じだったので、細かいことは割愛します。

◇PlayerPrefsの使い方

復習的な内容だったと話したばかりですが、どこまでクリアしたのかを記録できる機能をつけるために、PlayerPrefsの使い方を新しく学習したので、内容をまとめておこうと思います。

ステージセレクト時にいきなり先のステージに進むことが無いよう、クリアしたステージを確認し、直前のステージがクリアされていれば選択できるような機能を実装しました。ただ、そのためにはクリアしたステージの情報を記録する仕組みが必要です。
通常の変数はプログラムを終了すると情報が消えてしまうので、ファイルのように終了後も残すためには別の方法を使う必要がありますが、そのため仕組みとしてPlayerPrefsがUnityでは用意されています。
これを使うと、各OSの特定の場所にデータを保存してくれます。
使い方としてはPlayerPrefsクラスの関数を使って書き込みと読み出しを行うことが出来ます。
読み書きにはキーと呼ばれる値に識別するための名前と値となる数値や文字列をセットにします。具体的には以下のようにします。

PlayerPrefsクラスのメソッドには値を設定するSet○○○と、値を取得するGet○○○があって、それぞれfloat型用とint型用、string型用の三種類が用意されています。そのほかキーと値を削除するDeleteAll、DeleteKeyなどもあります。Set○○○で書き込んだ値はアプリの終了時にファイルに保存されますが、クラッシュすることもあるので、PlayerPrefsに用意されているSave関数を使えば確実に保存できます。
これらを使って、ゲームのクリア時にデータをセーブし、先のステージが解放されるような機能を実装しました。
ただ、いろいろ実験してみて理解を深めようとしてみたのですが、いまいち使い方が理解できていないので、もう少しリファレンス読んでみたり、ほかの技術ブログをのぞいてみたりしたいと思います。

・memo

Invoke関数:第一引数に指定した名前の関数を第2引数で指定した時間後に呼び出す関数。

そんなこんなで、完成したゲームがこちら。

これでUnityではじめるC#終了です!
3日程度で終了できましたが、学ぶことが多く、密度の濃い3日でした!
「脱出ゲーム」と「物理パズル」という2大定番ゲームの作り方を勉強できたのもかなり大きいです。
次はUnityの寺子屋を勉強しようと思います。
その傍らで、今月中を目標に自作アプリを作ってリリースしたいと思っているので、どんなアプリにするのか企画もしていきたいと思います。
それでは今日はこの辺で。