tag:crieit.net,2005:https://crieit.net/tags/Unity%E3%81%A7%E3%82%B2%E3%83%BC%E3%83%A0%E4%BD%9C%E3%82%8B/feed
「Unityでゲーム作る」の記事 - Crieit
Crieitでタグ「Unityでゲーム作る」に投稿された最近の記事
2023-03-26T13:57:23+09:00
https://crieit.net/tags/Unity%E3%81%A7%E3%82%B2%E3%83%BC%E3%83%A0%E4%BD%9C%E3%82%8B/feed
tag:crieit.net,2005:PublicArticle/18375
2023-01-23T21:44:38+09:00
2023-03-26T13:57:23+09:00
https://crieit.net/posts/Unity-63ce81365440c
【実況ブログ】 Unity でスピードを作ろうぜ(^~^)?
<h1 id="📅2023-01-23 mon 21:00"><a href="#%F0%9F%93%852023-01-23+mon+21%3A00">📅2023-01-23 mon 21:00</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 Unity で スピードのモックアップを作ろうぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 お父ん、モックアップしか作らないから つまんな……」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 企画書と 設計書のフェーズは すっ飛ばすんでしょ。<br />
プログラミングしかやらないから」</p>
<p><a href="https://crieit.now.sh/upload_images/2e5408d4040b15d1191be9e3001e0c4063ce7a550abcd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2e5408d4040b15d1191be9e3001e0c4063ce7a550abcd.png?mw=700" alt="202301_unity_23-2113--unity-hub-1.png" /></a><br />
<a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Unity Hub でプロジェクトを作る所から始まるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5ef24fe15e444437b71bc798bbce0e9363ce7b19c09d6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ef24fe15e444437b71bc798bbce0e9363ce7b19c09d6.png?mw=700" alt="202301_unity_23-2116--new-project-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 プロジェクト名は <code>Speed</code> でいいだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/c933f8126230c479ba0c5ebec0d0b76963ce7c129e87f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c933f8126230c479ba0c5ebec0d0b76963ce7c129e87f.png?mw=700" alt="202301_unity_23-2122--files.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ファイルが最初から、いくつか 入ってるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/cea0e9603e5e6dc94ea4cf623b6f791863ce7ca99fb8b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cea0e9603e5e6dc94ea4cf623b6f791863ce7ca99fb8b.png?mw=700" alt="202301_unity_23-2124--unity-editor.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Unity Editor が出てくるが、自分が使いやすいように セットアップしておいたぜ。<br />
ほんとは ディスプレイいっぱい でかく広げて作業しているが、<br />
上の画像は ブログにアップするために ウィンドウを小さくしているぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 その ディスプレイいっぱいに広げたウィンドウの画像も 1回 見せてくれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/1f248217c15688279b47b2f0900fdbc563ce7d460c0a3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1f248217c15688279b47b2f0900fdbc563ce7d460c0a3.png?mw=700" alt="202301_unity_23-2127--maximized-window.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/11c709172df2a247cb41d4142c7e681d63ce7e10aa081.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/11c709172df2a247cb41d4142c7e681d63ce7e10aa081.png?mw=700" alt="202301_unity_23-2129--images-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 トランプ・ゲーム作るんだから トランプの画像がいるだろ。<br />
Project ウィンドウの <code>Assets</code> フォルダーの下に <code>Images</code> フォルダーを作って、<br />
右クリックして <code>Show in Explorer</code> をクリックしろだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/c821fad3a403091a255dbe30d7aba20c63ce7f9d886d0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c821fad3a403091a255dbe30d7aba20c63ce7f9d886d0.png?mw=700" alt="202301_unity_23-2137--playing-cards.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 前に神経衰弱を作った時に 描いたものを フォルダーへぶち込むぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/53d649d27d91edfcb15f92cd081316d063ce804487a82.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/53d649d27d91edfcb15f92cd081316d063ce804487a82.png?mw=700" alt="202301_unity_23-2139--assets-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Unity Editor からも見えるな」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 しかし また 1枚1枚 プレーンを置いて 画像をプレーンにドラッグ&ドロップ していくのかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 それは きついな……。どないしよ……」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 前に作った <code>Concentration</code> (コンセントレーション;トランプの神経衰弱ゲーム) を <code>Inport Package</code> (インポート・パッケージ)したらいいんじゃないの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 やってみるか……」</p>
<p>📅2023-01-23 mon 21:44</p>
<p><a href="https://crieit.now.sh/upload_images/db1ee23de0677a42495a93b2e8d77e9763ce81d24a808.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/db1ee23de0677a42495a93b2e8d77e9763ce81d24a808.png?mw=700" alt="202301_unity_23-2145--import-package-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 前に <code>Import Package</code> したら 中身をぶちまけられたり、ぐちゃぐちゃに壊されたりしたから 嫌なんだが<br />
まだ プロジェクトを作ったばかりだし 被害もないだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/af42b45138bea9d29fa1e1742959d73663ce8352c6e58.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/af42b45138bea9d29fa1e1742959d73663ce8352c6e58.png?mw=700" alt="202301_unity_23-2152--file-chooser-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 開くぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/0827bb871523102e75db38dd2c47592663ce83a8b77a3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0827bb871523102e75db38dd2c47592663ce83a8b77a3.png?mw=700" alt="202301_unity_23-2154--import-unity-package.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 コンフリクトは注意してくれるのか」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 あっ、 カードの <strong>ゲーム・オブジェクト</strong> が入ってないぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <code>Concentration</code> プロジェクトの方で カードのゲーム・オブジェクトを プレファブにして Assets に入れておけばいいんじゃないの?」<br />
<a href="https://crieit.now.sh/upload_images/bda04b6bb9979645b606a1ebc107f03c63ce851936456.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bda04b6bb9979645b606a1ebc107f03c63ce851936456.png?mw=700" alt="202301_unity_23-2200--concentration-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Hierarchy ウィンドウにあるだけでは Assets ではないから、 Assets に入れないといけないのか。<br />
下準備が けっこう居るな。<br />
元のプロジェクトを壊さずに ゲーム・オブジェクトを プレファブに差し替えられるかな?」</p>
<p><a href="https://crieit.now.sh/upload_images/054a299baf1e6823b0710a64d70df3a163ce861db3d61.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/054a299baf1e6823b0710a64d70df3a163ce861db3d61.png?mw=700" alt="202301_unity_23-2204--prefabs-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Hierarchy ウィンドウから Project ウィンドウへ ドラッグ&ドロップで コピーすることは でけるみたいだけど」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ Hierarchy ウィンドウにある方の <code>Hearts 1</code> フォルダーを消して、<br />
Project ウィンドウにある方の <code>Hearts 1</code> プレファブを Hierarchy ウィンドウに戻してみろだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/b1b07a72012e1a71ae5ba928f66443b363ce87221cba4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b1b07a72012e1a71ae5ba928f66443b363ce87221cba4.png?mw=700" alt="202301_unity_23-2208--back-to-the-hierarchy-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 何ごともなく 無事 でけたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 ふーん できるんだ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ 残り53枚のカードを プレファブに変換しろだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 つら…… ぢごくだ……」</p>
<p>📅2023-01-23 mon 22:11</p>
<p><a href="https://crieit.now.sh/upload_images/7f23762fb1609ad1875880f9700511a563ce882216fd3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7f23762fb1609ad1875880f9700511a563ce882216fd3.png?mw=700" alt="202301_unity_23-2212--highlight-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうやって選択して 一度に持っていけないかな……」</p>
<p><a href="https://crieit.now.sh/upload_images/925b95fa67eb4991a0d4a6152d57060763ce888477949.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/925b95fa67eb4991a0d4a6152d57060763ce888477949.png?mw=700" alt="202301_unity_23-2215--prefabs-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 おっ、いけたようだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 Hierarchy ウィンドウの方の 元のゲーム・オブジェクトも 水色のアイコンに変わってるわよ。<br />
もう プレファブになってんじゃない?」</p>
<p><a href="https://crieit.now.sh/upload_images/beb3bfd6a5c8b27ba2ea1d7abc49add763ce89a6caf05.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beb3bfd6a5c8b27ba2ea1d7abc49add763ce89a6caf05.png?mw=700" alt="202301_unity_23-2219--export-package-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 なんでもいいや…… <code>Export Package</code> しよ」</p>
<p><a href="https://crieit.now.sh/upload_images/1740b8b65ec09e248ee3a881bf0ae68563ce8a6d239bf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1740b8b65ec09e248ee3a881bf0ae68563ce8a6d239bf.png?mw=700" alt="202301_unity_23-2223--import-package-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Speed</code> プロジェクトの方で <code>Import Package</code> しよ」</p>
<p><a href="https://crieit.now.sh/upload_images/701cfef5bcb46b2dc95fc01b7e3fa8b063ce8b53738fc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/701cfef5bcb46b2dc95fc01b7e3fa8b063ce8b53738fc.png?mw=700" alt="202301_unity_23-2226--not-found-image-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 プレファブだけ持ってきてもだけで 画像も持ってこないと リンク切れを起こすか<br />
当たり前と言えば 当たり前だが」</p>
<p><a href="https://crieit.now.sh/upload_images/ab0d257fdc6e998609920acef218c19b63ce8c2896079.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ab0d257fdc6e998609920acef218c19b63ce8c2896079.png?mw=700" alt="202301_unity_23-2230--images-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 画像を持ってきたら 復元した」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 スクリプトのアタッチが切れているようだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/09512b60f16781c4daa6b08b7dc20e9b63ce8cfb8ac07.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/09512b60f16781c4daa6b08b7dc20e9b63ce8cfb8ac07.png?mw=700" alt="202301_unity_23-2233--scripts-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 スクリプトを持ってきたら 復元したぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 トランプ・カードだけを インポート・パッケージしやすいような<br />
トランプ・カードだけのプロジェクトを 作っておくべきなんじゃない?」」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 下ごしらえか。 トランプ・ゲームをよく作るようなら 作っておいた方が良さそうだな」</p>
<p>📅2023-01-23 mon 22:36</p>
<p><a href="https://crieit.now.sh/upload_images/df1169b57a32c731f1b9ff59fd6781d063ce932219cc2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/df1169b57a32c731f1b9ff59fd6781d063ce932219cc2.png?mw=700" alt="202301_unity_23-2300--backward.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 なんか知らんけど 裏側 剥がれてるから 貼り直しだ ひ~」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 検品って 大事ね~」</p>
<p><a href="https://crieit.now.sh/upload_images/6af7ebb1504cec28e39fa2f54cabdb4663ce95b50010b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6af7ebb1504cec28e39fa2f54cabdb4663ce95b50010b.png?mw=700" alt="202301_unity_23-2310--overrides-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Unity Learn のビギナーコースで学んだところによると、 <code>Prefab</code> を <code>Hierarchy</code> でまた いじったら、 <code>Inspector</code> ウィンドウの <code>Overrides</code> ドロップダウンリストから<br />
<code>Apply All</code> ボタンを選んで 押せば プレファブの設定を上書きしてくれるんだったと思う、多分」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ 全部のカードの <code>Apply All</code> ボタンを押すのが終わったら、<br />
Hierarchy ウィンドウのカードを全部消して、<br />
Project ウィンドウにあるカードを Hierarchy ウィンドウへ ドラッグ&ドロップしろだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 でけた。 今度は オモテも ウラも 画像が貼り付いてるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 カードができたんだったら、 並べて、<br />
スピードをやってるみたいな 画面を作りなさいよ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 画作り(えづくり)か」</p>
<p><a href="https://crieit.now.sh/upload_images/93ce062d324302068b8bbaaef3f6d12063ce98c0b3aed.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/93ce062d324302068b8bbaaef3f6d12063ce98c0b3aed.png?mw=700" alt="202301_unity_23-2323--picture-making-rotation-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 例えば 赤色のスートのカードだけ 180°回転させるとか Unity Editor を使って操作する。<br />
こういう道具の使い方の基本操作が すばやいことが 開発屋の <strong>基本のき</strong> だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 解説はいいから 早よ 画を作れだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/1f7ec43cbc69b6b830e6301ac4867b0f63ce9dcc3eb46.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1f7ec43cbc69b6b830e6301ac4867b0f63ce9dcc3eb46.png?mw=700" alt="202301_unity_23-2345--failed-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 あっ! カードを裏返そうとしたら オモテ面と ウラ面の両方が ウラの方向いて<br />
ワケが分からなくなった!」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 やり直せ!」</p>
<p><a href="https://crieit.now.sh/upload_images/eeff03117a61300f478adb928e70365463ce9e9d8eeb5.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/eeff03117a61300f478adb928e70365463ce9e9d8eeb5.png?mw=700" alt="202301_unity_23-2349--redo-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 不思議な話だが プロジェクトにある カードを全部消して、<br />
エクスポートした自分自身の中身を 再び 自分に入れ直すぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/fe3ccc0013db269150d9fed0f8209ee963cea1cf6de55.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fe3ccc0013db269150d9fed0f8209ee963cea1cf6de55.png?mw=700" alt="202301_unity_24-0003--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 オモテ面、ウラ面の2枚で1つのカードを ひっくり返す うまい操作が よく分からん。 疲れた。<br />
今日は ここまでだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 おつ」</p>
<p>📅2023-01-24 tue 00:05 end</p>
<h1 id="📅2023-01-24 tue 20:20 start"><a href="#%F0%9F%93%852023-01-24+tue+20%3A20+start">📅2023-01-24 tue 20:20 start</a></h1>
<p><a href="https://crieit.now.sh/upload_images/0cac9dd11f72aee33b71ed29369ba99363cfbfb764369.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0cac9dd11f72aee33b71ed29369ba99363cfbfb764369.png?mw=700" alt="202301_unity_24-2021--turn-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Speades 3</code> ゲーム・オブジェクトを選択して <code>Rotation Z</code> を <code>180</code> にすれば<br />
オモテ面、ウラ面を1つのまとまりとして 裏返してくれるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 1個 1個 ゲーム・オブジェクトを選んで テキストボックスに <code>180</code> を入れていけだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/d3624ebdc33c41681d3fe986e0f1208863cfc343289d7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d3624ebdc33c41681d3fe986e0f1208863cfc343289d7.png?mw=700" alt="202301_unity_24-2037--turn-and-pop-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 この カードを1枚ずつ選んで 裏返して 少し持ち上げる たこ焼き みたいな作業をやるの<br />
嫌なんだが」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 もっと スピーディーにやる方法 あるんじゃないの?」</p>
<p><a href="https://crieit.now.sh/upload_images/19e06e34c524de3978c86d0a713d958b63cfc6c640d41.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/19e06e34c524de3978c86d0a713d958b63cfc6c640d41.png?mw=700" alt="202301_unity_24-2053--move-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 あったとしても 知りようがないぜ。<br />
ここを プログラミング化できたら 30分は 縮まる!」</p>
<p><a href="https://crieit.now.sh/upload_images/fa1aa590e1b9848430bd58d4d7cbb6c263cfc756734e2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fa1aa590e1b9848430bd58d4d7cbb6c263cfc756734e2.png?mw=700" alt="202301_unity_24-2055--turn-and-pop-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 反対側にもあって まだ15枚もある!」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 30分 がんばれよ」</p>
<p><a href="https://crieit.now.sh/upload_images/f1336529d2a4b05eff678cd21e22f55963cfcac813012.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f1336529d2a4b05eff678cd21e22f55963cfcac813012.png?mw=700" alt="202301_unity_24-2110--picture-making-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 見た目は こんなんで いいかあ」</p>
<p>📅2023-01-24 tue 21:13</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 手札って 最大で 何枚になるの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 パイルを全部 手札に混ぜれば 20枚だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 20枚の手札があるケースも 画作り してくれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/371ccf8233305415b3c09656cc3a8de963cfcd3b80ea6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/371ccf8233305415b3c09656cc3a8de963cfcd3b80ea6.png?mw=700" alt="202301_unity_24-2119--line-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 カードの端を ちょっと被せつつ並べれば 20枚は 収まるかな?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 WebGL でビルドして 出力結果で 確かめなさいよ」</p>
<p><a href="https://crieit.now.sh/upload_images/13b016c7d8a0c5288d90ba320bcc9b8063cfcf9124c1e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/13b016c7d8a0c5288d90ba320bcc9b8063cfcf9124c1e.png?mw=700" alt="202301_unity_24-2130--output.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 端が切れてるなあ。 カメラの角度が付いてるからかな?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 メインカメラの位置を きっちり 決めてくれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/007394f89996bba92895414dc9d7a3d263cfd5932b0dd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/007394f89996bba92895414dc9d7a3d263cfd5932b0dd.png?mw=700" alt="202301_unity_24-2155--main-camera-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 真上というのも 味気ないんで ちょっと傾けつつ 整数にまとめたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/8086af4d99c885dcc426b550c41a60c263cfd5c87158d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8086af4d99c885dcc426b550c41a60c263cfd5c87158d.png?mw=700" alt="202301_unity_24-2154--output.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 画作り は こんなもんでいいだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 相手の手札を 前後ひっくり返す意味ってある?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 ダイヤの6と、ダイヤの9は 見分けが付かないよな」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 将棋の駒だって 後手は ひっくり返ってるだろ 例はある 気にするなだぜ」</p>
<p>📅2023-01-24 tue 22:01</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 ゲーム開始時に セット されるプログラムを組みましょうよ」</p>
<p><a href="https://crieit.now.sh/upload_images/a1d0a6f349b6dada94d3ab69b1f3146163cfd9bc9d5f9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a1d0a6f349b6dada94d3ab69b1f3146163cfd9bc9d5f9.png?mw=700" alt="202301_unity_24-2203--coordinate-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ゲームを作るときは 座標をメモって置くのが コツだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 xとzの正負が逆じゃないか? カメラが裏向いてんじゃないか?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 あれまっ! ほんとだぜ……」</p>
<p><a href="https://crieit.now.sh/upload_images/2fe82bb51e287fe4d9888bbf4745caf963cfdac046b15.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2fe82bb51e287fe4d9888bbf4745caf963cfdac046b15.png?mw=700" alt="202301_unity_24-2217--flip-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 グローバル座標にして Y軸を回転軸にして 180°回転したぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/acb6aecebe1b2b23e40643c296fe379663cfdcea086fb.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/acb6aecebe1b2b23e40643c296fe379663cfdcea086fb.png?mw=700" alt="202301_unity_24-2219--coordinate-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 座標の目安は これでいいだろ」</p>
<p>📅2023-01-24 tue 22:28</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 手札は 1枚~20枚 を 位置調整することになるだろ。<br />
予め 計算式を まとめてくれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 カード1枚の横幅は だいたい 10 のようだぜ。それを元に計算してみるか」</p>
<p><a href="https://crieit.now.sh/upload_images/c2caeed0546c30ccaa9baddd2b32391763cfe15805c97.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c2caeed0546c30ccaa9baddd2b32391763cfe15805c97.png?mw=700" alt="202301_unity_24-2240--coordinate-calc.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 横幅が無限にあるのなら、 <code>(カードの枚数 - 1) * -5</code> の位置から <code>+10</code> 間隔でカードを並べるだけでいいが……」</p>
<p><a href="https://crieit.now.sh/upload_images/2263ec6f1360cad978e8ed49000cdde863cfe26322c50.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2263ec6f1360cad978e8ed49000cdde863cfe26322c50.png?mw=700" alt="202301_unity_24-2248--coordinate-calc-b.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 左端が <code>x=-62</code> 、右端が <code>x=62</code> と決まってて、カードは20枚あるのだった」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 62 - (-62) = 124 なので、<br />
横幅 124 の中に 20 枚のカードがあるので、<br />
言い換えると<br />
横幅 124 の中に 19 箇所のカードの隙間があるので、<br />
1つの間隔は 124 / 19 = 6.526... んー すっきりしないなあ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 123.5 なら 19 で割り切れたのにね」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 割り切ろうとするなだぜ」</p>
<pre><code>左端のカードの位置 + (左から何枚目 - 1) * ((右端のカードの位置 - 左端のカードの位置) / (カードの枚数 - 1))
Example:
-62 + (左から何枚目 - 1) * (124/19)
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 上式で x 座標はイケるだろう」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ 座標の設計は 終わりだぜ」</p>
<p>📅2023-01-24 tue 23:02</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 カードを配るのって どうやってプログラミングすんの?」</p>
<p><a href="https://crieit.now.sh/upload_images/6ac00d690a09a483727fa87e0b0a60d363cfe9e77d8b4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6ac00d690a09a483727fa87e0b0a60d363cfe9e77d8b4.png?mw=700" alt="202301_unity_24-2313--arrangement.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 かき集めて シャッフルして 配るだけだぜ」</p>
<p>📅2023-01-24 tue 23:25</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 ちょっと やってみてくれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e9833a5ce75ba96cc1a5ba4db319a03563cfeaea3d791.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e9833a5ce75ba96cc1a5ba4db319a03563cfeaea3d791.png?mw=700" alt="202301_unity_24-2326--game-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ゲーム・マネージャーを作る手順は 前にやったから 途中は省略するぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/05aca195987ba013e745a15ad42989fd63cfeeff5f131.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/05aca195987ba013e745a15ad42989fd63cfeeff5f131.png?mw=700" alt="202301_unity_24-2344--script-1.png" /></a></p>
<p>GameManager.cs:</p>
<pre><code class="cs">using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
/// <summary>
/// トランプ・カード
/// </summary>
List<GameObject> goPlayingCards = new();
// Start is called before the first frame update
void Start()
{
for (int i = 1; i < 14; i++)
{
goPlayingCards.Add(GameObject.Find($"Clubs {i}"));
goPlayingCards.Add(GameObject.Find($"Diamonds {i}"));
goPlayingCards.Add(GameObject.Find($"Hearts {i}"));
goPlayingCards.Add(GameObject.Find($"Spades {i}"));
}
float posY = 0.0f;
float posYStep = -0.2f;
float posZ = 42.0f;
float posZStep = -((42.0f - (-28)) / goPlayingCards.Count);
for (int i = 0; i < goPlayingCards.Count; i++)
{
var card = goPlayingCards[i];
float x = -62.0f + i * (124 / (goPlayingCards.Count - 1));
card.transform.position = new Vector3(x, posY, posZ);
card.transform.rotation = Quaternion.Euler(0, 180, 0);
posY += posYStep;
posZ += posZStep;
}
}
// Update is called once per frame
void Update()
{
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 まず、カードをかき集めて ざらっと 机に並べるコードを書いてみよう」</p>
<p><a href="https://crieit.now.sh/upload_images/190fa7577a114692299e0a231a22af7663cfef49df78b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/190fa7577a114692299e0a231a22af7663cfef49df78b.png?mw=700" alt="202301_unity_24-2346--game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 カードが被ってしまって 数字が なんにも見えないが、<br />
まあ、かき集めるのは でけたな」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 続きはまた今度だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 おつ」</p>
<p>📅2023-01-24 tue 23:47</p>
<h1 id="📅2023-01-25 mon 19:05"><a href="#%F0%9F%93%852023-01-25+mon+19%3A05">📅2023-01-25 mon 19:05</a></h1>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 数字が見えるようにしなさいよ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 用事のため あとで」</p>
<p>📅2023-01-25 mon 19:14</p>
<h1 id="📅2023-01-27 fri 20:00"><a href="#%F0%9F%93%852023-01-27+fri+20%3A00">📅2023-01-27 fri 20:00</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 Excel でチューリング・マシン作ってたら時間が飛んだぜ。<br />
戻ってきたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 数字が見えるようにしなさいよ」</p>
<p><a href="https://crieit.now.sh/upload_images/af2d241379fb270da3bc15dac29af24d63d3af5f7bc96.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/af2d241379fb270da3bc15dac29af24d63d3af5f7bc96.png?mw=700" alt="202301_unity_25-1908--screen-size.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 画面の座標は こんな感じか」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 あっ、しまった!」</p>
<p><a href="https://crieit.now.sh/upload_images/be5e085e43f13919daeee79cf0c2d31863d3c355f27da.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/be5e085e43f13919daeee79cf0c2d31863d3c355f27da.png?mw=700" alt="202301_unity_27-2127--game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 うっかり ゲームの配置にしてしまった!」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 カードのテクスチャーや枚数を検品しないと 不良品が混じってるかもしれないのに……」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 じゃあ 先に進みましょう。<br />
積みあがってる手札を 裏返しなさいよ」</p>
<p>📅2023-01-27 fri 21:31</p>
<p><a href="https://crieit.now.sh/upload_images/5dc3bd03f4e8a1f7b49cfb3764d6577663d3c77972faa.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5dc3bd03f4e8a1f7b49cfb3764d6577663d3c77972faa.png?mw=700" alt="202301_unity_27-2144--y-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 あれっ! まだ 時計回りに180°回転してないのに ひっくり返ってるぜ!」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ 180°回転して 戻せだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/d91b4b0160e1db1087f4e8b1342e437e63d3c8fc03705.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d91b4b0160e1db1087f4e8b1342e437e63d3c8fc03705.png?mw=700" alt="202301_unity_27-2151--game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 なんか積んでる手札の底が1枚ずれてるな。<br />
まあいいや 進んでる間に 原因が見つかるだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 じゃあ 先に進みましょう。<br />
場にオープンしているカードを1枚選んで ルールを気にせず 中央の台札に 積みましょう!」</p>
<p>📅2023-01-27 fri 21:53</p>
<p><a href="https://crieit.now.sh/upload_images/8d51e143aaaafae7ca33180c1e3583ff63d3cac4c6dcf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8d51e143aaaafae7ca33180c1e3583ff63d3cac4c6dcf.png?mw=700" alt="202301_unity_27-2159--board.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 その前に カードが 空飛んでるのが気になるぜ 地面を置こう」</p>
<p><a href="https://crieit.now.sh/upload_images/55a861eb9ae4abffca209f3a8b0e6d5a63d3cc36b6e5e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/55a861eb9ae4abffca209f3a8b0e6d5a63d3cc36b6e5e.png?mw=700" alt="202301_unity_27-2205--board-on-game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 位置は こんなもんでいいだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 UI はどうすんだぜ? どのカードを選んでるとか」</p>
<p><a href="https://crieit.now.sh/upload_images/83cc18e04fb697b888b1ae37df6ac00f63d3cf4513870.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/83cc18e04fb697b888b1ae37df6ac00f63d3cf4513870.png?mw=700" alt="202301_unity_27-2218--lift.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 カードを持ち上げてみると……、<br />
カメラアングルと 光源の関係なのか 手前と奥のプレイヤーで 持ち上げた高さが違って見えるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 カメラの位置を調整したらどうだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/1e3dac9675abc60577c116577b127bb663d3d18b1e80f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1e3dac9675abc60577c116577b127bb663d3d18b1e80f.png?mw=700" alt="202301_unity_27-2227--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こつこつ 画作り……」</p>
<p><a href="https://crieit.now.sh/upload_images/35af9c23609d01ab298b5f1c2e1d03a763d3d257522a4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/35af9c23609d01ab298b5f1c2e1d03a763d3d257522a4.png?mw=700" alt="202301_unity_27-2231--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 回転も付けた方が カードゲームっぽいかな?」</p>
<pre><code class="csharp"> /// <summary>
/// カードを持ち上げる
/// </summary>
/// <param name="card"></param>
private void SetFocus(GameObject card)
{
var liftY = 5.0f; // 持ち上げる(パースペクティブがかかっていて、持ち上げすぎると北へ移動したように見える)
var rotateY = -5; // -5°傾ける
var rotateZ = -5; // -5°傾ける
card.transform.position = new Vector3(card.transform.position.x, card.transform.position.y + liftY, card.transform.position.z);
card.transform.rotation = Quaternion.Euler(card.transform.rotation.eulerAngles.x, card.transform.rotation.eulerAngles.y + rotateY, card.transform.eulerAngles.z + rotateZ);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 付けた変化を 関数にしておくぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 行列にした方がよくないかだぜ? 逆関数 作るの めんどくさいだろ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 そういう最適化は 問題点が出尽くして 完成したあとに やりたかったら やればいいんで」</p>
<p><a href="https://crieit.now.sh/upload_images/f018484a5edbaebb5e34b0275e76499863d3d3dab9f5b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f018484a5edbaebb5e34b0275e76499863d3d3dab9f5b.png?mw=700" alt="202301_unity_27-2238--focus.png" /></a></p>
<pre><code class="csharp"> /// <summary>
/// 持ち上げたカードを場に戻す
/// </summary>
/// <param name="card"></param>
private void ResetFocus(GameObject card)
{
var liftY = 5.0f; // 持ち上げる(パースペクティブがかかっていて、持ち上げすぎると北へ移動したように見える)
var rotateY = -5; // -5°傾ける
var rotateZ = -5; // -5°傾ける
// 逆をする
liftY = -liftY;
rotateY = -rotateY;
rotateZ = -rotateZ;
card.transform.position = new Vector3(card.transform.position.x, card.transform.position.y + liftY, card.transform.position.z);
card.transform.rotation = Quaternion.Euler(card.transform.rotation.eulerAngles.x, card.transform.rotation.eulerAngles.y + rotateY, card.transform.eulerAngles.z + rotateZ);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 逆関数をあてれば 持ち上げたカードは場に戻り、<br />
また別のカードを持ち上げれば カードを選んでいる雰囲気が出るな」</p>
<p>📅2023-01-27 fri 22:40</p>
<pre><code class="csharp"> // 1プレイヤーの1枚目のカードにフォーカスを当てる
{
if (0 < goPlayersHandCards[0].Count)
{
var goCard = goPlayersHandCards[0][0];
SetFocus(goCard);
}
}
// 1プレイヤーの1枚目のカードのフォーカスを外す
{
if (0 < goPlayersHandCards[0].Count)
{
var goCard = goPlayersHandCards[0][0];
ResetFocus(goCard);
}
}
// 1プレイヤーの1枚目のカードにフォーカスを当てる
{
if (1 < goPlayersHandCards[0].Count)
{
var goCard = goPlayersHandCards[0][1];
SetFocus(goCard);
}
}
// 2プレイヤーの1枚目のカードにフォーカスを当てる
{
if (0 < goPlayersHandCards[1].Count)
{
var goCard = goPlayersHandCards[1][0];
SetFocus(goCard);
}
}
// 2プレイヤーの1枚目のカードのフォーカスを外す
{
if (0 < goPlayersHandCards[1].Count)
{
var goCard = goPlayersHandCards[1][0];
ResetFocus(goCard);
}
}
// 2プレイヤーの2枚目のカードにフォーカスを当てる
{
if (1 < goPlayersHandCards[1].Count)
{
var goCard = goPlayersHandCards[1][1];
SetFocus(goCard);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 画作り をしている間は ベタ書きするぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ただ、コードが長くなって 読みにくいよな」</p>
<p><a href="https://crieit.now.sh/upload_images/ab85f934b127e2720e3c423e946c63b763d4df272d661.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ab85f934b127e2720e3c423e946c63b763d4df272d661.png?mw=700" alt="202301_unity_28-1735--lazy-args-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/eef6c69316169a684db175c6e47e90e763d3d8f2747ae.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/eef6c69316169a684db175c6e47e90e763d3d8f2747ae.png?mw=700" alt="202301_unity_27-2259--policy-1.png" /></a></p>
<p><code>Assets.Scripts.LazyArgs.cs</code>:</p>
<pre><code class="csharp">namespace Assets.Scripts
{
/// <summary>
/// コーディングのテクニックのための仕込み
/// </summary>
internal class LazyArgs
{
public delegate void SetValue<T>(T value);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 そこで コードを短く書けるための 仕込み をするぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/df19793cde25f278c9794b36d3e94c1f63d4dfe87fe58.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/df19793cde25f278c9794b36d3e94c1f63d4dfe87fe58.png?mw=700" alt="202301_unity_28-1740--get-card-1.png" /></a></p>
<p><code>Assets.Scripts.GameManager.cs</code>:</p>
<pre><code class="csharp"> /// <summary>
/// カードを取得
/// </summary>
/// <param name="player">何番目のプレイヤー</param>
/// <param name="cardIndex">何枚目のカード</param>
/// <param name="setCard">カードをセットする関数</param>
private void GetCard(int player, int cardIndex, LazyArgs.SetValue<GameObject> setCard)
{
if (cardIndex < goPlayersHandCards[player].Count)
{
var goCard = goPlayersHandCards[player][cardIndex];
setCard(goCard);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 カードを取得するという ありきたりな関数を書き」</p>
<p><a href="https://crieit.now.sh/upload_images/fbecb05256d088eec47bc8b8926a59f363d3da74d6bed.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fbecb05256d088eec47bc8b8926a59f363d3da74d6bed.png?mw=700" alt="202301_unity_27-2305--lambda-1.png" /></a></p>
<pre><code class="csharp"> // 1プレイヤーの1枚目のカードにフォーカスを当てる
GetCard(0, 0, (goCard) => SetFocus(goCard));
// 1プレイヤーの1枚目のカードのフォーカスを外す
GetCard(0, 0, (goCard) => ResetFocus(goCard));
// 1プレイヤーの2枚目のカードにフォーカスを当てる
GetCard(0, 1, (goCard) => SetFocus(goCard));
// 2プレイヤーの1枚目のカードにフォーカスを当てる
GetCard(1, 0, (goCard) => SetFocus(goCard));
// 2プレイヤーの1枚目のカードのフォーカスを外す
GetCard(1, 0, (goCard) => ResetFocus(goCard));
// 2プレイヤーの2枚目のカードにフォーカスを当てる
GetCard(1, 1, (goCard) => SetFocus(goCard));
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 長ったらしかったコードを ワンライナー(1行)で書けるようにしたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 1プレイヤーが <code>0</code> で、 1枚目が <code>0</code> って分かりづらくない?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 序数と基数の違いだぜ 別のものなのだから仕方ない 慣れろだぜ」</p>
<p>📅2023-01-27 fri 23:09</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 台札に1枚乗せなさいよ」</p>
<pre><code class="csharp"> // 右の台札を積み上げる
{
float x = rightCenterStackX;
float y = minY;
float z = rightCenterStackZ;
foreach (var goCard in goCenterStacksCards[0])
{
SetPosRot(goCard, x, y, z);
y += 0.2f;
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 このコードだと 使い回しづらいので、使い回しやすい形にするかだぜ」</p>
<pre><code class="csharp"> // 右の台札を積み上げる
{
float x = rightCenterStackX;
this.rightCenterStacksY = minY;
float z = rightCenterStackZ;
foreach (var goCard in goCenterStacksCards[0])
{
SetPosRot(goCard, x, this.rightCenterStacksY, z);
this.rightCenterStacksY += 0.2f;
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Y座標は 記憶することにしよう」</p>
<p><a href="https://crieit.now.sh/upload_images/a706e47f7197dac257ffc00450c2fdca63d3e0e061ef7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a706e47f7197dac257ffc00450c2fdca63d3e0e061ef7.png?mw=700" alt="202301_unity_27-2332--hand-card-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 『台札は、場札から1枚抜いて置く』という動作に1本化しようぜ」</p>
<pre><code class="csharp"> // 左の台札が空っぽの状態
this.leftCenterStackX = -15.0f;
this.leftCenterStackY = minY;
this.leftCenterStackZ = 10.0f;
// 左の台札を積み上げる
{
// 場札の好きなところから1枚抜いて、台札を1枚置く
var player = 1; // 2プレイヤーが
var handIndex = 0; // 場札の1枚目から
var goCard = goPlayersHandCards[player].ElementAt(handIndex); // カードを1枚抜いて
goPlayersHandCards[player].RemoveAt(handIndex);
var leftRight = 0; // 左の
goCenterStacksCards[leftRight].Add(goCard); // 台札として置く
// カードの位置と角度をセット
SetPosRot(goCard, this.leftCenterStackX, this.leftCenterStackY, this.leftCenterStackZ, angleY: 0.0f);
// 次に台札に積むカードの高さ
this.leftCenterStackY += 0.2f;
}
// 右の台札が空っぽの状態
this.rightCenterStackX = 15.0f;
this.rightCenterStackY = minY;
this.rightCenterStackZ = 0.0f;
// 右の台札を積み上げる
{
var player = 0; // 1プレイヤーが
var handIndex = 0; // 場札の1枚目から
var goCard = goPlayersHandCards[player].ElementAt(handIndex); // カードを1枚抜いて
goPlayersHandCards[player].RemoveAt(handIndex);
var leftRight = 1; // 右の
goCenterStacksCards[leftRight].Add(goCard); // 台札として置く
// カードの位置と角度をセット
SetPosRot(goCard, this.rightCenterStackX, this.rightCenterStackY, this.rightCenterStackZ);
// 次に台札に積むカードの高さ
this.rightCenterStackY += 0.2f;
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 左の台札と、右の台札を 別にした方がいいな。<br />
カードの移動があったときに、同時に ポリゴンの位置と角度も設定しよう」</p>
<p>📅2023-01-27 fri 23:50</p>
<pre><code class="csharp"> /// <summary>
/// 場札の好きなところから1枚抜いて、台札を1枚置く
/// </summary>
/// <param name="player">何番目のプレイヤー</param>
/// <param name="handIndex">何枚目のカード</param>
/// <param name="leftRight">左なら1、右なら0</param>
private void PutCardToCenterStack(int player, int handIndex, int leftRight)
{
var goCard = goPlayersHandCards[player].ElementAt(handIndex); // カードを1枚抜いて
goPlayersHandCards[player].RemoveAt(handIndex);
goCenterStacksCards[leftRight].Add(goCard); // 台札として置く
// カードの位置をセット
SetPosRot(goCard, this.centerStacksX[leftRight], this.centerStacksY[leftRight], this.centerStacksZ[leftRight]);
// 次に台札に積むカードの高さ
this.centerStacksY[leftRight] += 0.2f;
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 一本化すれば こんな感じか」</p>
<pre><code class="csharp"> // 左の台札が空っぽの状態
this.centerStacksX[1] = -15.0f;
this.centerStacksY[1] = minY;
this.centerStacksZ[1] = 10.0f;
// 右の台札が空っぽの状態
this.centerStacksX[0] = 15.0f;
this.centerStacksY[0] = minY;
this.centerStacksZ[0] = 0.0f;
// 左の台札を積み上げる
{
PutCardToCenterStack(
player: 1, // 2プレイヤーが
handIndex: 0, // 場札の1枚目から
leftRight: 0 // 左の
);
}
// 右の台札を積み上げる
{
PutCardToCenterStack(
player: 0, // 1プレイヤーが
handIndex: 0, // 場札の1枚目から
leftRight: 1 // 右の
);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ゲーム開始時の台札は こんな感じに置く」</p>
<p><a href="https://crieit.now.sh/upload_images/d58d857a620027e6d00db7151d8ccdc163d3ea43f2156.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d58d857a620027e6d00db7151d8ccdc163d3ea43f2156.png?mw=700" alt="202301_unity_28-0013--coroutine-1.png" /></a></p>
<pre><code class="csharp"> IEnumerator DoDemo()
{
float seconds = 1.0f;
yield return new WaitForSeconds(seconds);
// 1プレイヤーの1枚目のカードにフォーカスを当てる
GetCard(0, 0, (goCard) => SetFocus(goCard));
yield return new WaitForSeconds(seconds);
// 1プレイヤーの1枚目のカードのフォーカスを外す
GetCard(0, 0, (goCard) => ResetFocus(goCard));
yield return new WaitForSeconds(seconds);
// 1プレイヤーの2枚目のカードにフォーカスを当てる
GetCard(0, 1, (goCard) => SetFocus(goCard));
yield return new WaitForSeconds(seconds);
// 1プレイヤーの2枚目のカードのフォーカスを外す
GetCard(0, 1, (goCard) => ResetFocus(goCard));
yield return new WaitForSeconds(seconds);
// 右の台札を積み上げる
{
PutCardToCenterStack(
player: 0, // 1プレイヤーが
handIndex: 1, // 場札の2枚目から
leftRight: 1 // 右の台札
);
}
yield return new WaitForSeconds(seconds);
// -
// 2プレイヤーの1枚目のカードにフォーカスを当てる
GetCard(1, 0, (goCard) => SetFocus(goCard));
yield return new WaitForSeconds(seconds);
// 2プレイヤーの1枚目のカードのフォーカスを外す
GetCard(1, 0, (goCard) => ResetFocus(goCard));
yield return new WaitForSeconds(seconds);
// 2プレイヤーの2枚目のカードにフォーカスを当てる
GetCard(1, 1, (goCard) => SetFocus(goCard));
yield return new WaitForSeconds(seconds);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 あっ、そうだ コルーチン使お」</p>
<p><a href="https://crieit.now.sh/upload_images/48076d79f58dd808524438de34cfd70d63d3eb135da8c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/48076d79f58dd808524438de34cfd70d63d3eb135da8c.png?mw=700" alt="202301_unity_28-0016--demo-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 台札に置けるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 次は、手札から 1枚取ってきて 場札として置く動作を作りなさいよ。<br />
そのとき 場札の位置が 歯抜けだったりするだろうから、位置の再調整がいるかもしれないわね」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 今日はここまでだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 おつ」</p>
<p>📅2023-01-28 fri 00:20 end</p>
<h1 id="📅2023-01-28 sat 17:51"><a href="#%F0%9F%93%852023-01-28+sat+17%3A51">📅2023-01-28 sat 17:51</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👇 場札を並べるコードは 以下のように書いているんだが……」</p>
<p><code>Assets.Scripts.GameManager.cs</code> :</p>
<pre><code class="csharp"> // 2プレイヤーの場札を並べる(画面では、左から右へ並べる)
{
float x = maxX;
float y = minY;
float z = player2HandZ;
float xStep = (maxX - minX) / (goPlayersHandCards[1].Count - 1);
foreach (var goCard in goPlayersHandCards[1])
{
SetPosRot(goCard, x, y, z, angleY: 0.0f);
x -= xStep;
}
}
// 中略
// 1プレイヤーの場札を並べる(画面では、右から左へ並べる)
{
float x = minX;
float y = minY;
float z = player1HandZ;
float xStep = (maxX - minX) / (goPlayersHandCards[0].Count - 1);
foreach (var goCard in goPlayersHandCards[0])
{
SetPosRot(goCard, x, y, z);
x += xStep;
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 1プレイヤーが 右から左へ、 2プレイヤーが 左から右へ、 みたいな 方向がまったく逆のものを<br />
1本化 するのは ちょっと すっきりしない方法を使うぜ」</p>
<pre><code class="csharp">public class GameManager : MonoBehaviour
{
/// <summary>
/// 西端
/// </summary>
readonly float minX = -62.0f;
/// <summary>
/// 東端
/// </summary>
readonly float maxX = 62.0f;
/// <summary>
/// 底端
///
/// - `0.0f` は盤
/// </summary>
readonly float minY = 0.5f;
readonly float player2HandZ = 42.0f;
readonly float player2PileZ = 26.0f;
readonly float player1PileZ = -12.0f;
readonly float player1HandZ = -28.0f;
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 その前に 決まりきった座標を 読取専用でメソッドからアクセスできる自由変数にしておこうぜ」</p>
<pre><code class="csharp"> /// <summary>
/// 場札を並べる
/// </summary>
void ArrangeHandCardsP2(int player)
{
// 2プレイヤーの場札を並べる(画面では、左から右へ並べる)
float x = maxX;
float xStep = (maxX - minX) / (goPlayersHandCards[player].Count - 1);
foreach (var goCard in goPlayersHandCards[player])
{
SetPosRot(goCard, x, minY, player2HandZ, angleY: 0.0f);
x -= xStep;
}
}
/// <summary>
/// 場札を並べる
/// </summary>
void ArrangeHandCardsP1(int player)
{
// 1プレイヤーの場札を並べる(画面では、右から左へ並べる)
float x = minX;
float xStep = (maxX - minX) / (goPlayersHandCards[player].Count - 1);
foreach (var goCard in goPlayersHandCards[player])
{
SetPosRot(goCard, x, minY, player1HandZ);
x += xStep;
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 プログラマーのやってることって、違う書き方のコードを1本化することだよな。<br />
この2つを 1本化しようぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/9af8c264c924f14f45b2c54b01a3183a63d4eb631459e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9af8c264c924f14f45b2c54b01a3183a63d4eb631459e.png?mw=700" alt="202301_unity_28-1830--player-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 プレイヤー1と2で 違う変数を使っているのを止めて、配列かリストにしようぜ?」</p>
<pre><code class="csharp"> readonly float[] handCardsZ = new[] { -28.0f, 42.0f };
readonly float[] pileCardsZ = new[] { -12.0f, 26.0f };
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こう」</p>
<pre><code class="csharp"> /// <summary>
/// 場札を並べる
/// </summary>
void ArrangeHandCards(int player)
{
float angleY;
float stepSign;
float x;
switch (player)
{
case 0:
// 1プレイヤーの場札は、画面では、右から左へ並べる
angleY = 180.0f;
stepSign = 1;
x = minX;
break;
case 1:
// 2プレイヤーの場札は、画面では、左から右へ並べる
angleY = 0.0f;
stepSign = -1;
x = maxX;
break;
default:
throw new Exception();
}
float xStep = stepSign * (maxX - minX) / (goPlayersHandCards[player].Count - 1);
foreach (var goCard in goPlayersHandCards[player])
{
SetPosRot(goCard, x, minY, handCardsZ[player], angleY: angleY);
x += xStep;
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 1本化したら こうなったぜ」</p>
<p>📅2023-01-28 sat 18:46</p>
<p><a href="https://crieit.now.sh/upload_images/08af1db6255bb190ceaeba626ab2a42063d4f23cb4d13.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/08af1db6255bb190ceaeba626ab2a42063d4f23cb4d13.png?mw=700" alt="202301_unity_28-1850--addPile-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 次は 『手札から1枚抜いて場札に置く』というモーションを1つの関数にしたいぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 せっかく n枚 指定できる作りなのに……」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 じゃあ n枚 のところも残すか……」</p>
<pre><code class="csharp"> /// <summary>
/// 手札からn枚抜いて、場札へ移動する
///
/// - 場札は並び直される
/// </summary>
void AddCardsToHandFromPile(int player, int numberOfCards)
{
// 手札からn枚抜いて、場札へ移動する
var goCards = goPlayersPileCards[player].GetRange(0, numberOfCards);
goPlayersPileCards[player].RemoveRange(0, numberOfCards);
goPlayersHandCards[player].AddRange(goCards);
// 場札を並べる
ArrangeHandCards(player);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こんな感じで」</p>
<p>📅2023-01-28 sat 19:12</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 手札を先頭から抜いたら、後ろのカードが浮いたままになってしまうわよ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 確かに」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 先頭から抜くのが おかしいのでは? 後ろから抜けだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 もっともだぜ」</p>
<pre><code class="csharp"> /// <summary>
/// 手札の上の方からn枚抜いて、場札の後ろへ追加する
///
/// - 画面上の場札は位置調整される
/// </summary>
void AddCardsToHandFromPile(int player, int numberOfCards)
{
// 手札の上の方からn枚抜いて、場札へ移動する
var length = goPlayersPileCards[player].Count; // 手札の枚数
if (numberOfCards <= length)
{
var startIndex = length - numberOfCards;
var goCards = goPlayersPileCards[player].GetRange(startIndex, numberOfCards);
goPlayersPileCards[player].RemoveRange(startIndex, numberOfCards);
goPlayersHandCards[player].AddRange(goCards);
// 場札を並べる
ArrangeHandCards(player);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうかな」</p>
<p>📅2023-01-28 sat 19:51</p>
<p><a href="https://crieit.now.sh/upload_images/040401253e79479b700bb3e75f2b586e63d500601bf39.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/040401253e79479b700bb3e75f2b586e63d500601bf39.png?mw=700" alt="202301_unity_28-2000--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 画作り を進め中」</p>
<p><a href="https://crieit.now.sh/upload_images/fed74a67948058a38082edad6516497663d5013bbfedb.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fed74a67948058a38082edad6516497663d5013bbfedb.png?mw=700" alt="202301_unity_28-2003--piles-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 👆 スピードをやってて、手札を積み上げるのって 全部で どういうケースがあるの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 初回で カードを配るときじゃないか?<br />
ゲームが始まったら 手札にカードを積む という動きは無いだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 初回は、どこから手札にカードが飛んでくるの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 どこからでもない。<br />
Unity のシーン上に ゲーム・オブジェクトが適当に散らばっているぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 関数にしたいのよ。<br />
『どこかに置いてあって、それを手札に積む』という定型パターンに乗せたいから、<br />
どこかに置いてあることにしなさいよ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 手札以外には、台札と 場札しかないぜ。<br />
そのどっちかだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 じゃあ ゲーム開始時に 散らばっているカードは<br />
台札という扱いにして、ゲーム開始時に 『台札を色分けして、手札に積む』という定型パターンに乗せなさいよ」</p>
<pre><code class="csharp"> // 台札
float[] centerStacksX = { 15.0f, -15.0f };
/// <summary>
/// 台札のY座標
///
/// - 右が 0、左が 1
/// - 0.0f は盤なので、それより上にある
/// </summary>
float[] centerStacksY = { 0.5f, 0.5f };
float[] centerStacksZ = { 0.0f, 10.0f };
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 台札の一番上のカードのY座標を 外側に追いやって……」</p>
<pre><code class="csharp"> /// <summary>
/// 台札を、手札へ移動する
/// </summary>
/// <param name="rightLeft">右:0, 左:1</param>
void AddCardsToPileFromCenterStacks(int rightLeft)
{
// 台札の一番上(一番後ろ)のカードを1枚抜く
var numberOfCards = 1;
var length = goCenterStacksCards[rightLeft].Count; // 手札の枚数
if (1 <= length)
{
var startIndex = length - numberOfCards;
var goCard = goCenterStacksCards[rightLeft].ElementAt(startIndex);
goCenterStacksCards[rightLeft].RemoveAt(startIndex);
// 黒いカードは1プレイヤー、赤いカードは2プレイヤー
int player;
float angleY;
if (goCard.name.StartsWith("Clubs") || goCard.name.StartsWith("Spades"))
{
player = 0;
angleY = 180.0f;
}
else if (goCard.name.StartsWith("Diamonds") || goCard.name.StartsWith("Hearts"))
{
player = 1;
angleY = 0.0f;
}
else
{
throw new Exception();
}
// プレイヤーの手札を積み上げる
goPlayersPileCards[player].Add(goCard);
SetPosRot(goCard, pileCardsX[player], pileCardsY[player], pileCardsZ[player], angleY: angleY, angleZ: 180.0f);
pileCardsY[player] += 0.2f;
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 台札を手札へ移動する動きも 1本化するぜ」</p>
<pre><code class="csharp"> void Start()
{
// ゲーム開始時、とりあえず、すべてのカードは、いったん右の台札という扱いにする
for (int i = 1; i < 14; i++)
{
// 右の台札
goCenterStacksCards[0].Add(GameObject.Find($"Clubs {i}"));
goCenterStacksCards[0].Add(GameObject.Find($"Diamonds {i}"));
goCenterStacksCards[0].Add(GameObject.Find($"Hearts {i}"));
goCenterStacksCards[0].Add(GameObject.Find($"Spades {i}"));
}
// 右の台札をシャッフル
var rightLeft = 0;// 右
goCenterStacksCards[rightLeft] = goCenterStacksCards[rightLeft].OrderBy(i => Guid.NewGuid()).ToList();
// 右の台札をすべて、色分けして、黒色なら1プレイヤーの、赤色なら2プレイヤーの、手札に乗せる
while (0 < goCenterStacksCards[rightLeft].Count)
{
AddCardsToPileFromCenterStacks(rightLeft);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 それに引きずられて、開始時の処理も変えるぜ」</p>
<p>📅2023-01-28 sat 21:17</p>
<pre><code class="csharp"> // 2プレイヤーが、場札の1枚目を抜いて、左の台札へ積み上げる
PutCardToCenterStack(
player: 1, // 2プレイヤーが
handIndex: 0, // 場札の1枚目から
rightLeft: 0 // 左の
);
// 2プレイヤーの場札の位置調整
ArrangeHandCards(1);
// 1プレイヤーが、場札の1枚目を抜いて、右の台札へ積み上げる
PutCardToCenterStack(
player: 0, // 1プレイヤーが
handIndex: 0, // 場札の1枚目から
rightLeft: 1 // 右の
);
// 1プレイヤーの場札の位置調整
ArrangeHandCards(0);
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 場札の位置調整を 毎回書くのも煩わしいから 関数の中に入れるかだぜ」</p>
<pre><code class="csharp"> /// <summary>
/// 場札の好きなところから1枚抜いて、台札を1枚置く
/// </summary>
/// <param name="player">何番目のプレイヤー</param>
/// <param name="handIndex">何枚目のカード</param>
/// <param name="rightLeft">右なら0、左なら1</param>
private void PutCardToCenterStackFromHand(int player, int handIndex, int rightLeft)
{
var goCard = goPlayersHandCards[player].ElementAt(handIndex); // カードを1枚抜いて
goPlayersHandCards[player].RemoveAt(handIndex);
goCenterStacksCards[rightLeft].Add(goCard); // 台札として置く
// カードの位置をセット
SetPosRot(goCard, this.centerStacksX[rightLeft], this.centerStacksY[rightLeft], this.centerStacksZ[rightLeft]);
// 次に台札に積むカードの高さ
this.centerStacksY[rightLeft] += 0.2f;
// 場札の位置調整
ArrangeHandCards(player);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 モデルへの編集と、画面への編集は 同じ関数に入れない方がいいんだが、<br />
それは あとで考えるぜ。<br />
関数名も変更」</p>
<pre><code class="csharp"> void Start()
{
// ゲーム開始時、とりあえず、すべてのカードは、いったん右の台札という扱いにする
const int right = 0;// 台札の右
const int left = 1;// 台札の左
for (int i = 1; i < 14; i++)
{
// 右の台札
goCenterStacksCards[right].Add(GameObject.Find($"Clubs {i}"));
goCenterStacksCards[right].Add(GameObject.Find($"Diamonds {i}"));
goCenterStacksCards[right].Add(GameObject.Find($"Hearts {i}"));
goCenterStacksCards[right].Add(GameObject.Find($"Spades {i}"));
}
// 右の台札をシャッフル
goCenterStacksCards[right] = goCenterStacksCards[right].OrderBy(i => Guid.NewGuid()).ToList();
// 右の台札をすべて、色分けして、黒色なら1プレイヤーの、赤色なら2プレイヤーの、手札に乗せる
while (0 < goCenterStacksCards[right].Count)
{
AddCardsToPileFromCenterStacks(right);
}
// 1,2プレイヤーについて、手札から5枚抜いて、場札として置く(画面上の場札の位置は調整される)
AddCardsToHandFromPile(player: 0, numberOfCards: 5);
AddCardsToHandFromPile(player: 1, numberOfCards: 5);
// 2プレイヤーが、場札の1枚目を抜いて、左の台札へ積み上げる
PutCardToCenterStackFromHand(
player: 1, // 2プレイヤーが
handIndex: 0, // 場札の1枚目から
place: left // 左の
);
// 1プレイヤーが、場札の1枚目を抜いて、右の台札へ積み上げる
PutCardToCenterStackFromHand(
player: 0, // 1プレイヤーが
handIndex: 0, // 場札の1枚目から
place: right // 右の
);
StartCoroutine("DoDemo");
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 開始時のコードが かなり短くなっただろ」</p>
<p>📅2023-01-28 sat 21:37</p>
<p><a href="https://crieit.now.sh/upload_images/ab86da7eb537bc99aadf3ebd969b8c6863d51737a5161.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ab86da7eb537bc99aadf3ebd969b8c6863d51737a5161.png?mw=700" alt="202301_unity_28-2137--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 👆 場札の間隔が空きすぎていて、スピードをしてる感じ、しなくない?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 <strong>均等割り付け</strong> なんだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 隙間を詰めてくれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/26148aac75f12353e84752b46a84c54163d519fbb4986.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/26148aac75f12353e84752b46a84c54163d519fbb4986.png?mw=700" alt="202301_unity_28-2147--calculate.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こういう感じか。 まるで プロポーショナル・フォント みたいだな」</p>
<p><a href="https://crieit.now.sh/upload_images/5a09a01bf912e6528f2dbd9821d6cdbd63d51e488bc77.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5a09a01bf912e6528f2dbd9821d6cdbd63d51e488bc77.png?mw=700" alt="202301_unity_28-2208--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 👆 カードの境界線が見えないから 1枚の長い紙みたいに見えるわよ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 世界に 境界線というものは 無いので……」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 カードを少し傾けたらどうだぜ?」</p>
<p>📅2023-01-28 sat 22:09</p>
<p><a href="https://crieit.now.sh/upload_images/a377c400c9e27ce82da82679529fa85863d51fd264fac.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a377c400c9e27ce82da82679529fa85863d51fd264fac.png?mw=700" alt="202301_unity_28-2214--angle.png" /></a></p>
<pre><code class="csharp"> /// <summary>
/// 場札を並べる
/// </summary>
void ArrangeHandCards(int player)
{
int numberOfCards = goPlayersHandCards[player].Count; // カードの枚数
if (numberOfCards < 1)
{
return;
}
float cardAngleZ = -5; // カードの少しの傾き
float cardWidth = 10; // カードの横幅
float marginRight = -2; // カードは隣のカードと少し重なる
float wholeWidth = numberOfCards * cardWidth + ((numberOfCards - 1) * marginRight); // 場札全体の横幅
float centerOfLeftestCard = -(wholeWidth / 2 - (cardWidth / 2)); // 1プレイヤーから見て一番左のカードの中心座標
float angleY;
float stepSign;
float x;
switch (player)
{
case 0:
// 1プレイヤーの場札は、画面では、右から左へ並べる
angleY = 180.0f;
stepSign = 1;
x = centerOfLeftestCard;
break;
case 1:
// 2プレイヤーの場札は、画面では、左から右へ並べる
angleY = 0.0f;
stepSign = -1;
x = -centerOfLeftestCard;
break;
default:
throw new Exception();
}
float xStep = stepSign * (cardWidth + marginRight);
foreach (var goCard in goPlayersHandCards[player])
{
SetPosRot(goCard, x, minY, handCardsZ[player], angleY: angleY, angleZ: cardAngleZ);
x += xStep;
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 2プレイヤー側は いい感じに影が付いたが、1プレイヤー側は 光の当たり方のせいで 思ったようにはなってないぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 扇状に並べたら いい感じになるんじゃない?」</p>
<p>📅2023-01-28 sat 22:17</p>
<p><a href="https://crieit.now.sh/upload_images/e0cdf84d063a717958eaf0a4eb708d0363d5223685550.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e0cdf84d063a717958eaf0a4eb708d0363d5223685550.png?mw=700" alt="202301_unity_28-2220--calculate.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 頭の運動不足の頭では n枚のとき角度は何mがいいのか ぱっと出てこないが まあ 手調整してみるか」</p>
<p><a href="https://crieit.now.sh/upload_images/451a21aeb768027cb85956a23304222863d523df195f7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/451a21aeb768027cb85956a23304222863d523df195f7.png?mw=700" alt="202301_unity_28-2227--calculate.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こんな式だったかな?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 Y は空を指してるから、テーブルの奥は Z ね」</p>
<p>📅2023-01-28 sat 22:58</p>
<p><a href="https://crieit.now.sh/upload_images/e89144db700bf6658c029cdae3fcb07c63d52957045fd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e89144db700bf6658c029cdae3fcb07c63d52957045fd.png?mw=700" alt="202301_unity_28-2254--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 うーん、 どうすればいいのか。ちょっと 考えようか」</p>
<p><a href="https://crieit.now.sh/upload_images/16f459ea4a174ee5b69b354607d77b7863d52a3ade814.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/16f459ea4a174ee5b69b354607d77b7863d52a3ade814.png?mw=700" alt="202301_unity_28-2256--idea.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これで行ってみるかだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/d0b68d4d1a088f2f9f87ab91931f876063d52d26c2bc0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d0b68d4d1a088f2f9f87ab91931f876063d52d26c2bc0.png?mw=700" alt="202301_unity_28-2311--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 わたしは恥ずかしい。一発で決めれない」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 何発で決まったとか ユーザーには分かんないから 目視確認と 手調整を繰り返せばいいのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 半径が 100、スタートの角度が 110°、 間隔の角度は -4° でこれだから、<br />
もっと半径を大きくして カーブを緩くするか」</p>
<p><a href="https://crieit.now.sh/upload_images/d41b155b49f4551af3ae041a30fa1f3563d52fbe64198.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d41b155b49f4551af3ae041a30fa1f3563d52fbe64198.png?mw=700" alt="202301_unity_28-2322--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 半径が 200、スタートの角度が 112°、 間隔の角度は -1.83°、 円の中心のz位置を +10」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 うまく画面に収めたが、ゲーム中にこんなケースは出てこないのでは?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 盤の周りが スカスカに空いてる分には ユーザーも困らないでしょう」</p>
<p><a href="https://crieit.now.sh/upload_images/caf7c6cc3f7bd62dacfdeee456ad0aa263d531f2053da.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/caf7c6cc3f7bd62dacfdeee456ad0aa263d531f2053da.png?mw=700" alt="202301_unity_28-2332--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 2P側も どう見えるか確認だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 台札は カードが積み重なっていくはずだから、 画面の下側に 気持ち ずらした方がよくない?」</p>
<p>📅2023-01-28 sat 22:58</p>
<p><a href="https://crieit.now.sh/upload_images/a3de1bff60c52c33dd076bbecb3e1dcf63d533a7eeb87.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a3de1bff60c52c33dd076bbecb3e1dcf63d533a7eeb87.png?mw=700" alt="202301_unity_28-2339--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 几帳面に真上に積むから 2Pのカードと被って見えることは無さそうだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 几帳面に積まれるのも スピードな感じは しないわねえ」</p>
<p><a href="https://crieit.now.sh/upload_images/bf87bea9ab444f6333a58139cf0dd26263d53857d7652.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bf87bea9ab444f6333a58139cf0dd26263d53857d7652.png?mw=700" alt="202301_unity_28-2359--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ランダムにずれを入れると どこに行くか わからんけど」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 もっと 上下の空いてる方向に 伸びなさいよ」</p>
<p><a href="https://crieit.now.sh/upload_images/906d94f006435d15bb7ac931844003ba63d53a468f78f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/906d94f006435d15bb7ac931844003ba63d53a468f78f.png?mw=700" alt="202301_unity_29-0007--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 スピードな感じは しないわねえ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 台札の所定の位置から離れていくのが おかしいのと、<br />
カードが几帳面に 正方形の角度が ぶれてないのが おかしいんだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 なるほど」</p>
<p><a href="https://crieit.now.sh/upload_images/2c6b4f87a4a0b118168adace270d965463d53d7939ad3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2c6b4f87a4a0b118168adace270d965463d53d7939ad3.png?mw=700" alt="202301_unity_29-0021--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 少しは 揃えて置こうと してほしいわねえ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 1プレイヤー、2プレイヤーが 右利きか、左利きかでも 変わってくるんじゃないかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 そんなん 設定するのも 嬉しさがあるのか分からないので 右利き ということにしとこうぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5cde71936fe6af498ffe18637d8fef4263d5429662c3a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5cde71936fe6af498ffe18637d8fef4263d5429662c3a.png?mw=700" alt="202301_unity_29-0042--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 少しは揃えてみたのと、1プレイヤーと 2プレイヤーで 大きく捻る回転方向を ずらしたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 良くは なってきたわね」</p>
<pre><code class="csharp"> /// <summary>
/// ぴったり積むと不自然だから、X と Z を少しずらすための仕組み
///
/// - 1プレイヤー、2プレイヤーのどちらも右利きと仮定
/// </summary>
/// <param name="player"></param>
/// <returns></returns>
(float, float, float) MakeShakeForCenterStack(int player)
{
// 1プレイヤーから見て。左上にずれていくだろう
var left = -1.5f;
var right = 0.5f;
var bottom = -0.5f;
var top = 1.5f;
var angleY = UnityEngine.Random.Range(-10, 40); // 反時計回りに大きく捻りそう
switch (player)
{
case 0:
return (UnityEngine.Random.Range(left, right), UnityEngine.Random.Range(bottom, top), angleY);
case 1:
return (UnityEngine.Random.Range(-right, -left), UnityEngine.Random.Range(-top, -bottom), angleY);
default:
throw new Exception();
}
}
</code></pre>
<p>📅2023-01-29 sat 00:42</p>
<p><a href="https://crieit.now.sh/upload_images/451b97166a4ee878146f6f824fc6df3b63d5440e06550.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/451b97166a4ee878146f6f824fc6df3b63d5440e06550.png?mw=700" alt="202301_unity_29-0049--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 カードのセンタリングが まだ作ってないので 作るぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/08a864806a6973158ce09b84cd87f77c63d54556e70c3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/08a864806a6973158ce09b84cd87f77c63d54556e70c3.png?mw=700" alt="202301_unity_29-0054--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 なんか 手札が めっちゃ遠くに見えるな」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 そりゃ、25枚の場札に合わせた位置だしな」</p>
<p>ソースコード:</p>
<pre><code class="csharp"> /// <summary>
/// 場札を並べる
/// </summary>
void ArrangeHandCards(int player)
{
// 25枚の場札が並べるように調整してある
int numberOfCards = goPlayersHandCards[player].Count; // カードの枚数
if (numberOfCards < 1)
{
return;
}
float cardAngleZ = -5; // カードの少しの傾き
int range = 200; // 半径。大きな円にするので、中心を遠くに離したい
int offsetCircleCenterZ; // 中心位置の調整
float angleY;
float playerTheta;
// float leftestAngle = 112.0f;
float angleStep = -1.83f;
float startTheta = (numberOfCards * Mathf.Abs(angleStep) / 2 - Mathf.Abs(angleStep) / 2 + 90.0f) * Mathf.Deg2Rad;
float thetaStep = angleStep * Mathf.Deg2Rad; ; // 時計回り
float ox = 0.0f;
float oz = handCardsZ[player];
switch (player)
{
case 0:
// 1プレイヤー
angleY = 180.0f;
playerTheta = 0;
offsetCircleCenterZ = -190;
break;
case 1:
// 2プレイヤー
angleY = 0.0f;
playerTheta = 180 * Mathf.Deg2Rad;
offsetCircleCenterZ = 188; // カメラのパースペクティブが付いているから、目視で調整
break;
default:
throw new Exception();
}
float theta = startTheta;
foreach (var goCard in goPlayersHandCards[player])
{
float x = range * Mathf.Cos(theta + playerTheta) + ox;
float z = range * Mathf.Sin(theta + playerTheta) + oz + offsetCircleCenterZ;
SetPosRot(goCard, x, minY, z, angleY: angleY, angleZ: cardAngleZ);
theta += thetaStep;
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 このコードは まあ こんなもんだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/6f29b136f7add61236e8cdfb44a59b8863d5471b2f5bb.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6f29b136f7add61236e8cdfb44a59b8863d5471b2f5bb.png?mw=700" alt="202301_unity_29-0102--picture-making.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 目視確認と 感覚で 調整」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 画作り は、こんなもんでいいでしょ」</p>
<p>📅2023-01-29 sat 01:04</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 次は 入力 を作っていきましょう」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 カーソル・キーの 左、右で ピックアップしている場札を 隣の札に変えるようにしましょう」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 すると、今どの場札に フォーカスが当たっているかを 変数として持ちたいよな」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 でも 今日はここまでだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 おつ」</p>
<p>📅2023-01-29 sat 01:23</p>
<h1 id="📅2023-01-29 sat 15:05"><a href="#%F0%9F%93%852023-01-29+sat+15%3A05">📅2023-01-29 sat 15:05</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 入力を受け取る部分を まず書くか」</p>
<p><code>Assets.Scripts.GameManager.cs</code> :</p>
<pre><code class="csharp"> void Update()
{
// 1プレイヤー
if (Input.GetKey(KeyCode.UpArrow))
{
// TODO 選択中の場札を1枚抜いて、左の台札に置く
}
else if (Input.GetKey(KeyCode.DownArrow))
{
// TODO 選択中の場札を1枚抜いて、右の台札に置く
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
// TODO 左隣の場札を選択する
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
// TODO 右隣の場札を選択する
}
// 2プレイヤー
if (Input.GetKey(KeyCode.W))
{
// TODO (1プレイヤー視点で言うと)選択中の場札を1枚抜いて、右の台札に置く
}
else if (Input.GetKey(KeyCode.S))
{
// TODO (1プレイヤー視点で言うと)選択中の場札を1枚抜いて、左の台札に置く
}
else if (Input.GetKeyDown(KeyCode.A))
{
// TODO (1プレイヤー視点で言うと)右隣の場札を選択する
}
else if (Input.GetKeyDown(KeyCode.D))
{
// TODO (1プレイヤー視点で言うと)右隣の場札を選択する
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 スピードの操作って 他にある?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 だいたい こんなもんでしょう。<br />
あとで 気づいたら そのとき 追加しましょう」</p>
<p>📅2023-01-29 sat 15:24</p>
<p><code>Assets.Scripts.GameManager.cs</code> :</p>
<pre><code class="csharp"> /// <summary>
/// プレイヤーが選択しているカードは、先頭から何枚目
/// </summary>
int[] playsersFocusedCardIndex ={ 0, 0 };
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 何枚目のカードを選択しているか、覚えさせることにするぜ」</p>
<pre><code class="csharp"> /// <summary>
/// 左(前側)のカードをフォーカスします
/// </summary>
/// <param name="player"></param>
void MoveFocusToLeftCard(int player)
{
var previous = playsersFocusedCardIndex[player];
var current = previous - 1;
if (current < 1)
{
return;
}
// 前にフォーカスしていたカードを、盤に下ろす
var goPreviousCard = goPlayersHandCards[player][previous];
ResetFocusHand(goPreviousCard);
// 今回フォーカスするカードを持ち上げる
var goCurrentCard = goPlayersHandCards[player][current];
SetFocusHand(goCurrentCard);
}
/// <summary>
/// 右(後ろ側)のカードをフォーカスします
/// </summary>
/// <param name="player"></param>
void MoveFocusToRightCard(int player)
{
var previous = playsersFocusedCardIndex[player];
var current = previous + 1;
if (goPlayersHandCards[player].Count <= current)
{
return;
}
// 前にフォーカスしていたカードを、盤に下ろす
var goPreviousCard = goPlayersHandCards[player][previous];
ResetFocusHand(goPreviousCard);
// 今回フォーカスするカードを持ち上げる
var goCurrentCard = goPlayersHandCards[player][current];
SetFocusHand(goCurrentCard);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうかなあ?」</p>
<p>📅2023-01-29 sat 15:42</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 1本化しろだぜ」</p>
<pre><code class="csharp"> /// <summary>
/// 隣のカードへフォーカスを移します
/// </summary>
/// <param name="player"></param>
/// <param name="direction">後ろ:0, 前:1</param>
void MoveFocusToNextCard(int player, int direction)
{
int previous;
int current;
switch (direction)
{
case 0:
previous = playsersFocusedCardIndex[player];
current = previous + 1;
if (goPlayersHandCards[player].Count <= current)
{
return;
}
break;
case 1:
previous = playsersFocusedCardIndex[player];
current = previous - 1;
if (current < 0)
{
return;
}
break;
default:
throw new Exception();
}
// 前にフォーカスしていたカードを、盤に下ろす
var goPreviousCard = goPlayersHandCards[player][previous];
ResetFocusHand(goPreviousCard);
// 今回フォーカスするカードを持ち上げる
var goCurrentCard = goPlayersHandCards[player][current];
SetFocusHand(goCurrentCard);
// 更新
playsersFocusedCardIndex[player] = current;
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうかなあ?」</p>
<p>📅2023-01-29 sat 15:45</p>
<p>古いコード:</p>
<pre><code class="csharp"> // 1プレイヤーの1枚目のカードにフォーカスを当てる
GetCard(0, 0, (goCard) => SetFocusHand(goCard));
yield return new WaitForSeconds(seconds);
// 1プレイヤーの1枚目のカードのフォーカスを外す
GetCard(0, 0, (goCard) => ResetFocusHand(goCard));
yield return new WaitForSeconds(seconds);
// 1プレイヤーの2枚目のカードにフォーカスを当てる
GetCard(0, 1, (goCard) => SetFocusHand(goCard));
yield return new WaitForSeconds(seconds);
// 1プレイヤーの2枚目のカードのフォーカスを外す
GetCard(0, 1, (goCard) => ResetFocusHand(goCard));
yield return new WaitForSeconds(seconds);
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これは」</p>
<p>新しいコード:</p>
<pre><code class="csharp"> // 1プレイヤーの1枚目のカードにフォーカスを当てる
GetCard(0, 0, (goCard) => SetFocusHand(goCard));
yield return new WaitForSeconds(seconds);
// 1プレイヤーの右隣のカードへフォーカスを移します
MoveFocusToNextCard(0, 0);
yield return new WaitForSeconds(seconds);
// 1プレイヤーの2枚目のカードのフォーカスを外す
GetCard(0, 1, (goCard) => ResetFocusHand(goCard));
yield return new WaitForSeconds(seconds);
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こう書き直せるな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 『フォーカスされているカードはない』という状態を 有りにすれば、<br />
『1枚目のカードにフォーカスを当てる』のも、<br />
『1プレイヤーの右隣のカードへフォーカスを移します』で代用できるんじゃないの?」</p>
<pre><code class="csharp"> /// <summary>
/// プレイヤーが選択している場札は、先頭から何枚目
///
/// - 選択中の場札が無いなら、-1
/// </summary>
int[] playsersFocusedCardIndex = { -1, -1 };
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こう書き直して……」</p>
<pre><code class="csharp"> /// <summary>
/// 隣のカードへフォーカスを移します
/// </summary>
/// <param name="player"></param>
/// <param name="direction">後ろ:0, 前:1</param>
void MoveFocusToNextCard(int player, int direction)
{
int previous;
int current;
switch (direction)
{
case 0:
var length = goPlayersHandCards[player].Count;
previous = playsersFocusedCardIndex[player];
if (previous==-1)
{
// 最後尾の外から、最後尾へ入ってくる
current = length - 1;
}
else
{
current = previous + 1;
}
if (length <= current)
{
return;
}
break;
case 1:
previous = playsersFocusedCardIndex[player];
if (previous==-1)
{
// 先頭の外から、先頭へ入ってくる
current = 0;
}
else
{
current = previous - 1;
}
if (current < 0)
{
return;
}
break;
default:
throw new Exception();
}
// 前にフォーカスしていたカードを、盤に下ろす
var goPreviousCard = goPlayersHandCards[player][previous];
ResetFocusHand(goPreviousCard);
// 今回フォーカスするカードを持ち上げる
var goCurrentCard = goPlayersHandCards[player][current];
SetFocusHand(goCurrentCard);
// 更新
playsersFocusedCardIndex[player] = current;
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうかだぜ」</p>
<pre><code class="csharp"> for (int i=0; i<2; i++)
{
// 1プレイヤーの右隣のカードへフォーカスを移します
MoveFocusToNextCard(0, 0);
yield return new WaitForSeconds(seconds);
}
// 1プレイヤーの2枚目のカードのフォーカスを外す
GetCard(0, 1, (goCard) => ResetFocusHand(goCard));
yield return new WaitForSeconds(seconds);
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 すると こう書けるわけかだぜ。 便利になるな」</p>
<p>📅2023-01-29 sat 16:03</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 持ってる場札を、台札の上に置いたら、<br />
場札は どれをピックアップしている状態に戻るんだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 どれもピックアップしてないんじゃないの?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ また端っこから ピックアップし直しかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 それも不便だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 じゃあ 抜いたカードの右隣を ピックアップするようにしたらいいんじゃないの?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 右端のカードを抜いたんだったら どうする?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 一番右端のカードを ピックアップしたらいいのよ。<br />
何もピックアップしないというのも 自然だけど」</p>
<p>📅2023-01-29 sat 16:21</p>
<pre><code class="csharp"> void Start()
{ // ... 略
// 2プレイヤーが、場札の1枚目を抜いて、左の台札へ積み上げる
MoveCardToCenterStackFromHand(
player: 1, // 2プレイヤーが
handIndex: 0, // 場札の1枚目から
place: left // 左の
);
// 1プレイヤーが、場札の1枚目を抜いて、右の台札へ積み上げる
MoveCardToCenterStackFromHand(
player: 0, // 1プレイヤーが
handIndex: 0, // 場札の1枚目から
place: right // 右の
);
StartCoroutine("DoDemo");
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 既存のコードでは、任意の場所のカードを引き抜けたが、<br />
これを ピックアップしているカードを引き抜く ように固定したいぜ」</p>
<pre><code class="csharp"> private void MoveCardToCenterStackFromHand(int player, int handIndex, int place)
{
var goCard = goPlayersHandCards[player].ElementAt(handIndex); // カードを1枚抜いて
goPlayersHandCards[player].RemoveAt(handIndex);
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 つまり handIndex 変数を廃止して、<br />
<code>playsersFocusedCardIndex[player]</code> を参照するように 1本化したいぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 しろだぜ」</p>
<pre><code class="csharp"> private void MoveCardToCenterStackFromHand(int player, int place)
{
int handIndex = playsersFocusedCardIndex[player]; // 何枚目の場札をピックアップしているか
if (handIndex < 0 || goPlayersHandCards[player].Count <= handIndex) // 範囲外は無視
{
return;
}
var goCard = goPlayersHandCards[player].ElementAt(handIndex); // カードを1枚抜いて
goPlayersHandCards[player].RemoveAt(handIndex);
if (goPlayersHandCards[player].Count <= handIndex) // 範囲外アクセス防止対応
{
handIndex = goPlayersHandCards[player].Count - 1;
}
// ... 場札の位置調整が済んだ後で
if (0 <= handIndex && handIndex < goPlayersHandCards[player].Count) // 範囲内なら
{
// 抜いたカードの右隣のカードを(有れば)ピックアップする
var goNewPickupCard = goPlayersHandCards[player].ElementAt(handIndex);
SetFocusHand(goNewPickupCard);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こう書きかえて」</p>
<pre><code class="csharp"> void Start()
{ // ... 略
// 1プレイヤーの先頭のカードへフォーカスを移します
MoveFocusToNextCard(player: 0, direction: 0);
// 2プレイヤーの先頭のカードへフォーカスを移します
MoveFocusToNextCard(player: 1, direction: 0);
// 2プレイヤーが、ピックアップ中の場札を抜いて、左の台札へ積み上げる
MoveCardToCenterStackFromHand(
player: 1, // 2プレイヤーが
place: left // 左の
);
// 1プレイヤーが、ピックアップ中の場札を抜いて、右の台札へ積み上げる
MoveCardToCenterStackFromHand(
player: 0, // 1プレイヤーが
place: right // 右の
);
StartCoroutine("DoDemo");
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうだぜ」</p>
<p>📅2023-01-29 sat 16:44</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 場札を並べ直すと、場札を全部 盤の上に置いてしまって ピックアップを忘れているぜ」</p>
<pre><code class="csharp"> /// <summary>
/// 場札を並べなおすと、持ち上げていたカードを下ろしてしまうので、再度、持ち上げる
/// </summary>
void ResumeCardPickup(int player)
{
int handIndex = playsersFocusedCardIndex[player]; // 何枚目の場札をピックアップしているか
if (0 <= handIndex && handIndex < goPlayersHandCards[player].Count) // 範囲内なら
{
// 抜いたカードの右隣のカードを(有れば)ピックアップする
var goNewPickupCard = goPlayersHandCards[player].ElementAt(handIndex);
SetFocusHand(goNewPickupCard);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 再度、持ち上げるのを関数化して……」</p>
<pre><code class="csharp"> /// <summary>
/// 場札を並べる
/// </summary>
void ArrangeHandCards(int player)
{ // ... 略
// 場札を並べなおすと、持ち上げていたカードを下ろしてしまうので、再度、持ち上げる
ResumeCardPickup(player);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 場札の並べなおしメソッドに組み込んでしまおう。<br />
他の箇所の既存の 持ち上げ直しコードは消すぜ」</p>
<p>📅2023-01-29 sat 17:07</p>
<pre><code class="csharp"> void Update()
{
// 1プレイヤー
if (Input.GetKeyDown(KeyCode.UpArrow))
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)左の台札へ積み上げる
MoveCardToCenterStackFromHand(
player: 0, // 1プレイヤーが
place: left // 左の
);
}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
MoveCardToCenterStackFromHand(
player: 0, // 1プレイヤーが
place: right // 右の
);
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
// 1プレイヤーのピックアップしているカードから見て、(1プレイヤーから見て)左隣のカードをピックアップするように変えます
MoveFocusToNextCard(0, 1);
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
// 1プレイヤーのピックアップしているカードから見て、(1プレイヤーから見て)右隣のカードをピックアップするように変えます
MoveFocusToNextCard(0, 0);
}
// 2プレイヤー
if (Input.GetKeyDown(KeyCode.W))
{
// 2プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
MoveCardToCenterStackFromHand(
player: 1, // 2プレイヤーが
place: right // 右の
);
}
else if (Input.GetKeyDown(KeyCode.S))
{
// 2プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)左の台札へ積み上げる
MoveCardToCenterStackFromHand(
player: 1, // 2プレイヤーが
place: left // 左の
);
}
else if (Input.GetKeyDown(KeyCode.A))
{
// 2プレイヤーのピックアップしているカードから見て、(2プレイヤーから見て)左隣のカードをピックアップするように変えます
MoveFocusToNextCard(1, 1);
}
else if (Input.GetKeyDown(KeyCode.D))
{
// 2プレイヤーのピックアップしているカードから見て、(2プレイヤーから見て)右隣のカードをピックアップするように変えます
MoveFocusToNextCard(1, 0);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 半分埋まったな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 2プレイヤーは 頭がひっくり返って 不利じゃない?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 上級者用のハンデに使えだぜ」</p>
<p>📅2023-01-29 sat 17:18</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 動かしてみると 配列の範囲を超えるエラーと よく出会うので リミットチェックを入れていくぜ」</p>
<pre><code class="csharp"> /// <summary>
/// 隣のカードへフォーカスを移します
/// </summary>
/// <param name="player"></param>
/// <param name="direction">後ろ:0, 前:1</param>
void MoveFocusToNextCard(int player, int direction)
{
int previous;
int current;
var length = goPlayersHandCards[player].Count;
switch (direction)
{
// 後ろへ
case 0:
previous = playsersFocusedCardIndex[player];
if (previous == -1)
{
// (ピックアップしているカードが無いとき)先頭の外から、先頭へ入ってくる
current = 0;
}
else
{
current = previous + 1;
if (length <= current)
{
// 範囲外は -1 ということにしておく
current = -1;
}
}
break;
// 前へ
case 1:
previous = playsersFocusedCardIndex[player];
if (previous == -1)
{
// (ピックアップしているカードが無いとき)最後尾の外から、最後尾へ入ってくる
current = length - 1;
}
else
{
current = previous - 1;
// - 1 になるケースもある
}
break;
default:
throw new Exception();
}
// 更新
playsersFocusedCardIndex[player] = current;
if (0 <= previous && previous < goPlayersHandCards[player].Count) // 範囲内なら
{
// 前にフォーカスしていたカードを、盤に下ろす
var goPreviousCard = goPlayersHandCards[player][previous];
ResetFocusHand(goPreviousCard);
}
if (0 <= current && current < goPlayersHandCards[player].Count) // 範囲内なら
{
// 今回フォーカスするカードを持ち上げる
var goCurrentCard = goPlayersHandCards[player][current];
SetFocusHand(goCurrentCard);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こう」</p>
<p>📅2023-01-29 sat 17:40</p>
<p><a href="https://crieit.now.sh/upload_images/8372f0534816009612dd239cc72bf53a63d63200df956.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8372f0534816009612dd239cc72bf53a63d63200df956.png?mw=700" alt="202301_unity_29-1744--game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 右端の場札を 台札の上に置いたら、<br />
何も場札を選択していない状態になるんだけど、<br />
この瞬間、何ボタンを押したらいいのか 分かんなくなっちゃうのよね」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 じゃあ、場札がある限り、必ず なんらかの場札が1枚 ピックアップされている状態にした方が いいのかだぜ?」</p>
<pre><code class="csharp"> /// <summary>
/// 隣のカードへフォーカスを移します
/// </summary>
/// <param name="player"></param>
/// <param name="direction">後ろ:0, 前:1</param>
void MoveFocusToNextCard(int player, int direction)
{
int previous = playsersFocusedCardIndex[player];
int current;
var length = goPlayersHandCards[player].Count;
if (length < 1)
{
// 場札が無いなら、何もピックアップされていません
current = -1;
}
else
{
switch (direction)
{
// 後ろへ
case 0:
if (previous == -1 || length <= previous + 1)
{
// (ピックアップしているカードが無いとき)先頭の外から、先頭へ入ってくる
current = 0;
}
else
{
current = previous + 1;
}
break;
// 前へ
case 1:
if (previous == -1 || previous - 1 < 0)
{
// (ピックアップしているカードが無いとき)最後尾の外から、最後尾へ入ってくる
current = length - 1;
}
else
{
current = previous - 1;
}
break;
default:
throw new Exception();
}
}
// 更新
playsersFocusedCardIndex[player] = current;
if (0 <= previous && previous < goPlayersHandCards[player].Count) // 範囲内なら
{
// 前にフォーカスしていたカードを、盤に下ろす
var goPreviousCard = goPlayersHandCards[player][previous];
ResetFocusHand(goPreviousCard);
}
if (0 <= current && current < goPlayersHandCards[player].Count) // 範囲内なら
{
// 今回フォーカスするカードを持ち上げる
var goCurrentCard = goPlayersHandCards[player][current];
SetFocusHand(goCurrentCard);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 左右への移動は 右端が左端とつながっているようにループさせて」</p>
<pre><code class="csharp"> /// <summary>
/// 場札の好きなところから1枚抜いて、台札を1枚置く
/// </summary>
/// <param name="player">何番目のプレイヤー</param>
/// <param name="place">右なら0、左なら1</param>
private void MoveCardToCenterStackFromHand(int player, int place)
{
int handIndex = playsersFocusedCardIndex[player]; // 何枚目の場札をピックアップしているか
if (handIndex < 0 || goPlayersHandCards[player].Count <= handIndex) // 範囲外は無視
{
return;
}
var goCard = goPlayersHandCards[player].ElementAt(handIndex); // カードを1枚抜いて
goPlayersHandCards[player].RemoveAt(handIndex);
if (handIndex < 0 && 0 < goPlayersHandCards[player].Count)
{
handIndex = 0;
}
else if (goPlayersHandCards[player].Count <= handIndex) // 範囲外アクセス防止対応
{
// 一旦、最後尾へ
handIndex = goPlayersHandCards[player].Count - 1;
}
// それでも範囲外なら、負の数
playsersFocusedCardIndex[player] = handIndex; // 更新:何枚目の場札をピックアップしているか
// ... 略
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 台札の移動は 場札のどれかを必ず選択しておくようにするぜ」</p>
<p>📅2023-01-29 sat 18:03</p>
<h1 id="📅2023-01-31 mon 04:32"><a href="#%F0%9F%93%852023-01-31+mon+04%3A32">📅2023-01-31 mon 04:32</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 腰が痛くて 目が覚めたので 朝から練習しよ。<br />
えーと どこまで やったっけ?」</p>
<p><a href="https://crieit.now.sh/upload_images/275d4af7ee594bca4c1ba9075063dc1f63d81c5528cd4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/275d4af7ee594bca4c1ba9075063dc1f63d81c5528cd4.png?mw=700" alt="202301_unity_31-0436--morning.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 フーン。<br />
何やってたかな。手札を、場札へ移動する動きも付けたいな。<br />
デバッグ用に スペース・キーに割り当てるか」</p>
<pre><code class="csharp"> void Update()
{ // ...
// デバッグ用
if (Input.GetKeyDown(KeyCode.Space))
{
// 両プレイヤーは手札から1枚抜いて、場札として置く
for (var player=0; player<2; player++)
{
MoveCardsToHandFromPile(player, 1);
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こんなんでいいかな」</p>
<p><a href="https://crieit.now.sh/upload_images/3e9991937dc29eef9156485c096c377763d81deeb7631.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3e9991937dc29eef9156485c096c377763d81deeb7631.png?mw=700" alt="202301_unity_31-0443--test.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 よし、手札を場札へ 移動できるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 操作方法を 画面に書き込むかな?」</p>
<p><a href="https://crieit.now.sh/upload_images/b91e15681f759b32d14cf9ba5eba579563d8222dda221.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b91e15681f759b32d14cf9ba5eba579563d8222dda221.png?mw=700" alt="202301_unity_31-0501--png.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 どうやって 白色を 透過させるんだぜ?」</p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://note.com/app49/n/n4e5a5f7aac2c">透過PNGの設定方法 Unity</a></p>
<p><a href="https://crieit.now.sh/upload_images/f9b5502b6a5a2928c60acd507aaa9da763d82743c1689.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f9b5502b6a5a2928c60acd507aaa9da763d82743c1689.png?mw=700" alt="202301_unity_31-0522--png-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ゲーム・オブジェクトじゃなくて、画像素材側に設定するのかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/fc0a753ba31798e572079457a0fb06a463d8288f960b7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fc0a753ba31798e572079457a0fb06a463d8288f960b7.png?mw=700" alt="202301_unity_31-0528--texture-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ウィンドウの縦幅を伸ばすと <code>Apply</code> ボタンが出てきた。気づかね~」</p>
<p><a href="https://crieit.now.sh/upload_images/0e081080cd718666c3f53910083e349363d82951a4aa9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0e081080cd718666c3f53910083e349363d82951a4aa9.png?mw=700" alt="202301_unity_31-0531--single.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 べつに 白色が透過される様子もないぜ」</p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://teratail.com/questions/209553">unityで画像背景を透過させる方法が分かりません。</a><br />
📖 <a target="_blank" rel="nofollow noopener" href="https://pc.atsuhiro-me.net/entry/2013/01/19/000000">Unityでテクスチャを透明にする</a></p>
<p><a href="https://crieit.now.sh/upload_images/3fe7455f460ebf5c1b13f98864b0162863d82be8775df.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3fe7455f460ebf5c1b13f98864b0162863d82be8775df.png?mw=700" alt="202301_unity_31-0542--gimp-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 調べても分からんので昔ながらの方法でやる。GIMP を使って、<br />
PNG画像が RGB 形式で、データが 不透明度を表す A チャンネルを持ってないようなので、<br />
アルファ・チャンネルを追加し……」</p>
<p><a href="https://crieit.now.sh/upload_images/d2ad59aa6cb86c87bbaf523fda87cda363d82cd3c987d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d2ad59aa6cb86c87bbaf523fda87cda363d82cd3c987d.png?mw=700" alt="202301_unity_31-0546--gimp-b-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 マジックワンドを使って 白い所を選んで、 <code>[Del]</code> キーで消すぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/b5be590cb8815894f852523c7819e38863d82d60d3535.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b5be590cb8815894f852523c7819e38863d82d60d3535.png?mw=700" alt="202301_unity_31-0549--transparent.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 画像を差し替えると 透過した」</p>
<p><a href="https://crieit.now.sh/upload_images/8f6bd102d16990e3fe322b6af5a6e82e63d83294a854f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8f6bd102d16990e3fe322b6af5a6e82e63d83294a854f.png?mw=700" alt="202301_unity_31-0610--sprite-diffuse-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 この <code>Shader</code> は <code>Sprites/Diffuse</code> でいいのか?<br />
自分が何やってんのか 分からなくて つらい」</p>
<p>📅2023-01-31 sat 06:12</p>
<p><a href="https://crieit.now.sh/upload_images/0e0aa6d92fbcce02b50662bae353d63963d838c020711.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0e0aa6d92fbcce02b50662bae353d63963d838c020711.png?mw=700" alt="202301_unity_31-0637--key-explain.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 操作説明は これぐらい うるさく書いておけば 確かだろ。<br />
邪魔くさいが……」</p>
<p>📅2023-01-31 sat 06:38</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 やっぱ RGB値を 加算したいな……。<br />
シェーダーの書き方を調べるか」</p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://shibuya24.info/entry/unity-ui-additive">【Unity UI】uGUIで色を加算合成する方法</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 日本人の薄っぺらい記事なんか読んでも さっぱり分からんな 公式読むか」</p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://docs.unity3d.com/ja/2021.3/Manual/SL-VertexFragmentShaderExamples.html">カスタムシェーダーの基礎</a><br />
📖 <a target="_blank" rel="nofollow noopener" href="https://docs.unity3d.com/ja/2021.3/Manual/shader-writing.html">シェーダーの作成</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>HLSL</code> という書き方を覚えればいいらしいぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 数十分で終わるレベルではないので パス」</p>
<p>📅2023-01-31 sat 06:58</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 次は、ゲームのルールを組み込んでいくか」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 しかし、今のプログラミングの書き方では ルール・ベースで書きにくい……」</p>
<p><a href="https://crieit.now.sh/upload_images/536ba5b01096d0f188a03d6161da27e963d841d1070f4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/536ba5b01096d0f188a03d6161da27e963d841d1070f4.png?mw=700" alt="202301_unity_31-0715--game-view-model-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 いったん 画面関係の変数は <code>GameViewModel</code> クラスを新しく作って そっちへ移し……」</p>
<p><a href="https://crieit.now.sh/upload_images/c6b7756586ef797f69daf16ce236a71763d84239388c9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c6b7756586ef797f69daf16ce236a71763d84239388c9.png?mw=700" alt="202301_unity_31-0717--game-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameManager.cs</code> の方では <code>GameViewModel</code> インスタンスを使うように書き直し……」</p>
<p><a href="https://crieit.now.sh/upload_images/08f6ab6ebc398a80be9e777a38645aea63d843db3828a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/08f6ab6ebc398a80be9e777a38645aea63d843db3828a.png?mw=700" alt="202301_unity_31-0724--game-view-model-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 変数名の頭に <code>go</code> と付けたやつは <code>GameObject</code> なんで、<br />
画面に関係するものは全部 <code>GameViewModel</code> クラスへ 追いやるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/4512ae14d4b714e74265ac153596ae6163d844b10115c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4512ae14d4b714e74265ac153596ae6163d844b10115c.png?mw=700" alt="202301_unity_31-0728--wrapping.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 配列の長さを取りたいときは、 <code>GetCenterStackCardsLength()</code> メソッドを使うようにする。<br />
これを ラッピング・メソッド(Wrapping method) という」</p>
<p><a href="https://crieit.now.sh/upload_images/50fdf08e3d9aed1244e2b4096a015a8263d8456837f39.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/50fdf08e3d9aed1244e2b4096a015a8263d8456837f39.png?mw=700" alt="202301_unity_31-0731--game-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうやって、 <code>GameManager</code> の方は、 ゲーム・オブジェクトをいじらなくても、<br />
<code>player: 0</code> とか、 <code>numberOfCards: 5</code> とか、命令だけ書けばいいような 見た目に変えていくぜ」</p>
<p>📅2023-01-31 sat 07:33</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 全部 ラッピングするの 時間かかるから 今朝は ここまで」</p>
<p>📅2023-01-31 sat 08:04</p>
<h1 id="📅2023-01-31 mon 23:34"><a href="#%F0%9F%93%852023-01-31+mon+23%3A34">📅2023-01-31 mon 23:34</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 眠りが覚めた。ちょっと練習しよ」</p>
<p>📅2023-02-01 sat 23:34 start</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 全体的に 書きかえた。また寝よ」</p>
<p>📅2023-02-01 sat 03:54 end</p>
<h1 id="📅2023-02-01 mon 21:04"><a href="#%F0%9F%93%852023-02-01+mon+21%3A04">📅2023-02-01 mon 21:04</a></h1>
<p><a href="https://crieit.now.sh/upload_images/25b899318fe0de3300f6a947f55ecf8d63da5a0216a70.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/25b899318fe0de3300f6a947f55ecf8d63da5a0216a70.png?mw=700" alt="202302_unity_01-2123--explorer.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 大改造した」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 いっぱい増えてるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 会社でやってはいけないことの1つが 大改造よ。<br />
コード・レビュー受け付けられないから 没になるのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/ffc55cad2e3f7d0e7e7b80fe9d9b2b7a63da5aaeb2c58.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ffc55cad2e3f7d0e7e7b80fe9d9b2b7a63da5aaeb2c58.png?mw=700" alt="202302_unity_01-2127--timeline.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Unity に ゲームの基本機能が 足りな過ぎるので タイムライン機能を自作した」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 Unity にも あるかも知らんのに」</p>
<p><a href="https://crieit.now.sh/upload_images/afa48d3d58dac5034c9bb9608797750163da5b2a18750.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/afa48d3d58dac5034c9bb9608797750163da5b2a18750.png?mw=700" alt="202302_unity_01-2129--command.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Command</code> (コマンド)というのは、プレイヤーができる操作だな。<br />
中を見てみよう」</p>
<p>📄 <code>Assets/Scripts/Models/Timeline/Commands/ICommand.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline.Commands
{
using Assets.Scripts.Models;
using Assets.Scripts.Views;
/// <summary>
/// コマンド
/// </summary>
interface ICommand
{
/// <summary>
/// コマンド実行
/// </summary>
/// <param name="gameModelBuffer">ゲームの内部状態(編集可能)</param>
/// <param name="gameViewModel">画面表示の状態(編集可能)</param>
void DoIt(GameModelBuffer gameModelBuffer, GameViewModel gameViewModel);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 『コマンドを実行すると、 <strong>ゲームの内部状態</strong> と、 <strong>画面表示の状態</strong> が変わる』、ということを書いている」</p>
<p>📄 <code>Assets/Scripts/Models/Timeline/Commands/MoveCardsToHandFromPile.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline.Commands
{
using Assets.Scripts.Models;
using Assets.Scripts.Views;
/// <summary>
/// nプレイヤーの手札から場札へ、m枚のカードを移動
/// </summary>
class MoveCardsToHandFromPile : ICommand
{
// - その他(生成)
/// <summary>
/// 生成
/// </summary>
/// <param name="player">nプレイヤー</param>
/// <param name="numberOfCards">カードがm枚</param>
internal MoveCardsToHandFromPile(int player, int numberOfCards)
{
Player = player;
NumberOfCards = numberOfCards;
}
// - プロパティ
int Player { get; set; }
int NumberOfCards { get; set; }
// - メソッド
/// <summary>
/// 手札の上の方からn枚抜いて、場札の後ろへ追加する
///
/// - 画面上の場札は位置調整される
/// </summary>
public void DoIt(GameModelBuffer gameModelBuffer, GameViewModel gameViewModel)
{
// 手札の上の方からn枚抜いて、場札へ移動する
var length = gameModelBuffer.IdOfCardsOfPlayersPile[Player].Count; // 手札の枚数
if (NumberOfCards <= length)
{
// もし、場札が空っぽのところへ、手札を配ったのなら、先頭の場札をピックアップする
if (gameModelBuffer.IndexOfFocusedCardOfPlayers[Player] == -1)
{
gameModelBuffer.IndexOfFocusedCardOfPlayers[Player] = 0;
}
GameModel gameModel = new GameModel(gameModelBuffer);
var startIndex = length - NumberOfCards;
gameModelBuffer.MoveCardsToHandFromPile(Player, startIndex, NumberOfCards);
gameViewModel.ArrangeHandCards(gameModel, Player);
}
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 コマンドの中身は こんな感じだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 さっぱり分からん」</p>
<p>📄 <code>Assets/Scripts/Models/Timeline/Commands/MoveCardsToPileFromCenterStacks.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline.Commands
{
using Assets.Scripts.Models;
using Assets.Scripts.Views;
using System;
/// <summary>
/// 右(または左)側の台札1枚を、手札へ移動する
/// </summary>
class MoveCardsToPileFromCenterStacks : ICommand
{
// - 生成
internal MoveCardsToPileFromCenterStacks(int place)
{
this.Place = place;
}
// - プロパティ
int Place { get; set; }
// - メソッド
/// <summary>
/// 台札を、手札へ移動する
///
/// - ゲーム開始時に使う
/// </summary>
/// <param name="place">右:0, 左:1</param>
public void DoIt(GameModelBuffer gameModelBuffer, GameViewModel gameViewModel)
{
// 台札の一番上(一番後ろ)のカードを1枚抜く
var numberOfCards = 1;
var length = gameModelBuffer.IdOfCardsOfCenterStacks[Place].Count; // 台札の枚数
if (1 <= length)
{
var startIndex = length - numberOfCards;
var idOfCard = gameModelBuffer.IdOfCardsOfCenterStacks[Place][startIndex];
gameModelBuffer.RemoveCardAtOfCenterStack(Place, startIndex);
// 黒いカードは1プレイヤー、赤いカードは2プレイヤー
int player;
float angleY;
var goCard = GameObjectStorage.PlayingCards[idOfCard];
if (goCard.name.StartsWith("Clubs") || goCard.name.StartsWith("Spades"))
{
player = 0;
angleY = 180.0f;
}
else if (goCard.name.StartsWith("Diamonds") || goCard.name.StartsWith("Hearts"))
{
player = 1;
angleY = 0.0f;
}
else
{
throw new Exception();
}
// プレイヤーの手札を積み上げる
gameModelBuffer.AddCardOfPlayersPile(player, idOfCard);
gameViewModel.SetPosRot(idOfCard, gameViewModel.pileCardsX[player], gameViewModel.pileCardsY[player], gameViewModel.pileCardsZ[player], angleY: angleY, angleZ: 180.0f);
gameViewModel.pileCardsY[player] += 0.2f;
}
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 説明するの めんどくさいんで 感じろだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 わらう」</p>
<p>📄 <code>Assets/Scripts/Models/Timeline/Commands/MoveCardToCenterStackFromHand.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline.Commands
{
using Assets.Scripts.Models;
using Assets.Scripts.Views;
/// <summary>
/// nプレイヤーがピックアップしている場札を、右(または左)の台札へ移動する
/// </summary>
class MoveCardToCenterStackFromHand : ICommand
{
// - 生成
internal MoveCardToCenterStackFromHand(int player, int place)
{
this.Player = player;
this.Place = place;
}
// - プロパティ
int Player { get; set; }
int Place { get; set; }
// - メソッド
/// <summary>
/// nプレイヤーがピックアップしている場札を、右(または左)の台札へ移動する
/// </summary>
/// <param name="player">何番目のプレイヤー</param>
/// <param name="place">右なら0、左なら1</param>
public void DoIt(GameModelBuffer gameModelBuffer, GameViewModel gameViewModel)
{
var gameModel = new GameModel(gameModelBuffer);
// ピックアップしているカードがあるか?
GetIndexOfFocusedHandCard(
gameModelBuffer: gameModelBuffer,
player: Player,
(indexOfFocusedHandCard) =>
{
RemoveAtOfHandCard(
gameModelBuffer: gameModelBuffer,
gameViewModel: gameViewModel,
player: Player,
place: Place,
indexOfHandCardToRemove: indexOfFocusedHandCard,
setIndexOfNextFocusedHandCard: (indexOfNextFocusedHandCard) =>
{
gameModelBuffer.IndexOfFocusedCardOfPlayers[Player] = indexOfNextFocusedHandCard; // 更新:何枚目の場札をピックアップしているか
// 場札の位置調整
gameViewModel.ArrangeHandCards(
gameModel: gameModel,
player: Player);
});
});
}
private static void GetIndexOfFocusedHandCard(GameModelBuffer gameModelBuffer, int player, LazyArgs.SetValue<int> setIndex)
{
int handIndex = gameModelBuffer.IndexOfFocusedCardOfPlayers[player]; // 何枚目の場札をピックアップしているか
if (handIndex < 0 || gameModelBuffer.IdOfCardsOfPlayersHand[player].Count <= handIndex) // 範囲外は無視
{
return;
}
setIndex(handIndex);
}
/// <summary>
/// 台札を抜く
/// </summary>
/// <param name="player"></param>
/// <param name="indexOfHandCardToRemove"></param>
/// <param name="setIndexOfNextFocusedHandCard"></param>
private static void RemoveAtOfHandCard(GameModelBuffer gameModelBuffer, GameViewModel gameViewModel, int player, int place, int indexOfHandCardToRemove, LazyArgs.SetValue<int> setIndexOfNextFocusedHandCard)
{
// 抜く前の場札の数
var lengthBeforeRemove = gameModelBuffer.IdOfCardsOfPlayersHand[player].Count;
if (indexOfHandCardToRemove < 0 || lengthBeforeRemove <= indexOfHandCardToRemove)
{
// 抜くのに失敗
return;
}
// 抜いた後の場札の数
var lengthAfterRemove = lengthBeforeRemove - 1;
// 抜いた後の次のピックアップするカードが先頭から何枚目か、先に算出
int indexOfNextFocusedHandCard;
if (lengthAfterRemove <= indexOfHandCardToRemove) // 範囲外アクセス防止対応
{
// 一旦、最後尾へ
indexOfNextFocusedHandCard = lengthAfterRemove - 1;
}
else
{
// そのまま
indexOfNextFocusedHandCard = indexOfHandCardToRemove;
}
var goCard = gameModelBuffer.IdOfCardsOfPlayersHand[player][indexOfHandCardToRemove]; // 場札を1枚抜いて
gameModelBuffer.RemoveCardAtOfPlayerHand(player, indexOfHandCardToRemove);
AddCardOfCenterStack2(gameModelBuffer, gameViewModel, goCard, place); // 台札
setIndexOfNextFocusedHandCard(indexOfNextFocusedHandCard);
}
private static void AddCardOfCenterStack2(GameModelBuffer gameModelBuffer, GameViewModel gameViewModel, IdOfPlayingCards idOfCard, int place)
{
var gameModel = new GameModel(gameModelBuffer);
// 手ぶれ
var (shakeX, shakeZ, shakeAngleY) = gameViewModel.MakeShakeForCenterStack(place);
// 台札の次の天辺(一番後ろ)のカードの中心座標 X, Z
var (nextTopX, nextTopZ) = gameViewModel.GetXZOfNextCenterStackCard(gameModel, place);
// 台札の捻り
var goCard = GameObjectStorage.PlayingCards[idOfCard];
float nextAngleY = goCard.transform.rotation.eulerAngles.y;
var length = gameModel.GetLengthOfCenterStackCards(place);
if (length < 1)
{
}
else
{
nextAngleY += shakeAngleY;
}
gameModelBuffer.AddCardOfCenterStack(place, idOfCard); // 台札として置く
// 台札の位置をセット
gameViewModel.SetPosRot(idOfCard, nextTopX + shakeX, gameViewModel.centerStacksY[place], nextTopZ + shakeZ, angleY: nextAngleY);
// 次に台札に積むカードの高さ
gameViewModel.centerStacksY[place] += 0.2f;
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 👆 説明がないのなら コードも貼らなくていいのでは?」</p>
<p>📄 <code>Assets/Scripts/Models/Timeline/Commands/MoveFocusToNextCard.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline.Commands
{
using Assets.Scripts.Models;
using Assets.Scripts.Views;
using System;
/// <summary>
/// nプレイヤーは、右(または左)隣のカードへ、ピックアップを移動します
/// </summary>
class MoveFocusToNextCard : ICommand
{
// - 生成
internal MoveFocusToNextCard(int player, int direction, LazyArgs.SetValue<int> setIndexOfNextFocusedHandCard)
{
this.Player = player;
this.Direction = direction;
this.SetIndexOfNextFocusedHandCard = setIndexOfNextFocusedHandCard;
}
// - プロパティ
int Player { get; set; }
int Direction { get; set; }
LazyArgs.SetValue<int> SetIndexOfNextFocusedHandCard { get; set; }
// - メソッド
/// <summary>
/// nプレイヤーは、右(または左)隣のカードへ、ピックアップを移動します
/// </summary>
/// <param name="player"></param>
/// <param name="direction">後ろ:0, 前:1</param>
public void DoIt(GameModelBuffer gameModelBuffer, GameViewModel gameViewModel)
{
GameModel gameModel = new GameModel(gameModelBuffer);
int indexOfFocusedHandCard = gameModelBuffer.IndexOfFocusedCardOfPlayers[Player];
int current;
var length = gameModelBuffer.IdOfCardsOfPlayersHand[Player].Count;
if (length < 1)
{
// 場札が無いなら、何もピックアップされていません
current = -1;
}
else
{
switch (Direction)
{
// 後ろへ
case 0:
if (indexOfFocusedHandCard == -1 || length <= indexOfFocusedHandCard + 1)
{
// (ピックアップしているカードが無いとき)先頭の外から、先頭へ入ってくる
current = 0;
}
else
{
current = indexOfFocusedHandCard + 1;
}
break;
// 前へ
case 1:
if (indexOfFocusedHandCard == -1 || indexOfFocusedHandCard - 1 < 0)
{
// (ピックアップしているカードが無いとき)最後尾の外から、最後尾へ入ってくる
current = length - 1;
}
else
{
current = indexOfFocusedHandCard - 1;
}
break;
default:
throw new Exception();
}
}
SetIndexOfNextFocusedHandCard(current);
if (0 <= indexOfFocusedHandCard && indexOfFocusedHandCard < gameModelBuffer.IdOfCardsOfPlayersHand[Player].Count) // 範囲内なら
{
// 前にフォーカスしていたカードを、盤に下ろす
gameViewModel.PutDownCardOfHand(gameModel, Player, indexOfFocusedHandCard);
}
if (0 <= current && current < gameModelBuffer.IdOfCardsOfPlayersHand[Player].Count) // 範囲内なら
{
// 今回フォーカスするカードを持ち上げる
gameViewModel.PickupCardOfHand(gameModel, Player, current);
}
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 まあ、 だから ゲームの状態と、 画面の表示を 変更するのが コマンドだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/b79e7864c7f7f432b4845dc43339ede663da5eed893ed.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b79e7864c7f7f432b4845dc43339ede663da5eed893ed.png?mw=700" alt="202302_unity_01-2144--timeline-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 そして コマンドに 時間を付けて、 時限式で 実行すりゃいいんだぜ。<br />
ソースを見てみよう」</p>
<p>📄 <code>Assets/Scripts/Models/Timeline/TimedItem.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline
{
using Assets.Scripts.Models.Timeline.Commands;
/// <summary>
/// 指定した時間と、そのとき実行されるコマンドのペア
/// </summary>
class TimedItem
{
// - その他(生成)
internal TimedItem(float seconds, ICommand command)
{
this.Seconds = seconds;
this.Command = command;
}
// - プロパティ
internal float Seconds { get; private set; }
internal ICommand Command { get; private set; }
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 タイムラインの上に置いてあるコマンドだぜ。<br />
『音符』みたいなもんだぜ。 感じろ」</p>
<p>📄 <code>Assets/Scripts/Models/Timeline/Model.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline
{
using Assets.Scripts.Models;
using Assets.Scripts.Models.Timeline.Commands;
using Assets.Scripts.Views;
using System.Collections.Generic;
/// <summary>
/// タイムライン・モデル
/// </summary>
internal class Model
{
// - プロパティ
List<TimedItem> timedItems = new();
internal List<TimedItem> TimedItems
{
get
{
return this.timedItems;
}
}
// - メソッド
/// <summary>
/// 追加
/// </summary>
/// <param name="seconds">実行される時間(秒)</param>
/// <param name="command">コマンド</param>
internal void Add(float seconds, ICommand command)
{
this.TimedItems.Add(new TimedItem(seconds,command));
}
/// <summary>
/// コマンドを消化
/// </summary>
/// <param name="elapsedSeconds">ゲーム内消費時間(秒)</param>
/// <param name="gameModelBuffer">ゲームの内部状態(編集可能)</param>
/// <param name="gameViewModel">画面表示の状態(編集可能)</param>
internal void DoIt(float elapsedSeconds, GameModelBuffer gameModelBuffer, GameViewModel gameViewModel)
{
if (0 < timedItems.Count)
{
var timedCommand = timedItems[0];
while (timedCommand.Seconds <= elapsedSeconds)
{
// 消化
timedItems.RemoveAt(0);
timedCommand.Command.DoIt(gameModelBuffer, gameViewModel);
if (0 < timedItems.Count)
{
timedCommand = timedItems[0];
}
else
{
break;
}
}
}
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 タイムラインは、『音符』のようなものが記憶されていて、時間が来たら実行される。<br />
『楽譜』みたいなもんだぜ。 感じろ」</p>
<p><a href="https://crieit.now.sh/upload_images/aff31060ad1af05bf580697fae24b5c563da609270f07.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/aff31060ad1af05bf580697fae24b5c563da609270f07.png?mw=700" alt="202302_unity_01-2151--game-model-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ゲームの状態を記憶しているのは、 <code>GameModelBuffer</code> インスタンスだぜ。<br />
<code>GameModel</code> は、読み取り専用の <code>GameModelBuffer</code> だぜ」</p>
<p>📄 <code>Assets/Scripts/Models/GameModel.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models
{
using System.Collections.Generic;
/// <summary>
/// ゲーム・モデル
///
/// - 読み取り専用。(Immutable)
/// </summary>
class GameModel
{
GameModelBuffer gameModelBuffer;
public GameModel(GameModelBuffer gameModel)
{
this.gameModelBuffer = gameModel;
}
/// <summary>
/// 右(または左)の天辺の台札
/// </summary>
/// <param name="place">右:0, 左:1</param>
/// <returns></returns>
internal IdOfPlayingCards GetLastCardOfCenterStack(int place)
{
var length = this.GetLengthOfCenterStackCards(place);
var startIndex = length - 1;
return this.gameModelBuffer.IdOfCardsOfCenterStacks[place][startIndex]; // 最後のカード
}
/// <summary>
/// nプレイヤーが選択している場札は、先頭から何枚目
///
/// - 選択中の場札が無いなら、-1
/// </summary>
/// <param name="player">プレイヤー</param>
internal int GetIndexOfFocusedCardOfPlayer(int player)
{
return this.gameModelBuffer.IndexOfFocusedCardOfPlayers[player];
}
/// <summary>
/// 右(または左)の台札の枚数
/// </summary>
/// <param name="place">右:0, 左:1</param>
internal int GetLengthOfCenterStackCards(int place)
{
return this.gameModelBuffer.IdOfCardsOfCenterStacks[place].Count;
}
/// <summary>
/// nプレイヤーの、場札の枚数
/// </summary>
/// <param name="player">プレイヤー</param>
/// <returns></returns>
internal int GetLengthOfPlayerHandCards(int player)
{
return this.gameModelBuffer.IdOfCardsOfPlayersHand[player].Count;
}
/// <summary>
/// nプレイヤーの、場札をリストで取得
/// </summary>
/// <param name="player">プレイヤー</param>
/// <returns></returns>
internal List<IdOfPlayingCards> GetCardsOfPlayerHand(int player)
{
return this.gameModelBuffer.IdOfCardsOfPlayersHand[player];
}
/// <summary>
/// nプレイヤーの、m枚目の場札を取得
/// </summary>
/// <param name="player"></param>
/// <param name="handIndex"></param>
/// <returns></returns>
internal IdOfPlayingCards GetCardAtOfPlayerHand(int player, int handIndex)
{
return this.gameModelBuffer.IdOfCardsOfPlayersHand[player][handIndex];
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameModel</code> は、<code>GameModelBuffer</code> を包んでるわけだな」</p>
<p>📄 <code>Assets/Scripts/Models/GameModelBuffer.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models
{
using System.Collections.Generic;
/// <summary>
/// ゲームの状態
///
/// - 編集可能
/// </summary>
public class GameModelBuffer
{
// - プロパティ
/// <summary>
/// nプレイヤーが選択している場札は、先頭から何枚目
///
/// - 選択中の場札が無いなら、-1
/// </summary>
internal int[] IndexOfFocusedCardOfPlayers { get; set; } = { -1, -1 };
/// <summary>
/// 手札
///
/// - プレイヤー側で積んでる札
/// - 0: 1プレイヤー(黒色)
/// - 1: 2プレイヤー(黒色)
/// </summary>
internal List<List<IdOfPlayingCards>> IdOfCardsOfPlayersPile { get; set; } = new() { new(), new() };
/// <summary>
/// 場札
///
/// - プレイヤー側でオープンしている札
/// - 0: 1プレイヤー(黒色)
/// - 1: 2プレイヤー(黒色)
/// </summary>
internal List<List<IdOfPlayingCards>> IdOfCardsOfPlayersHand { get; set; } = new() { new(), new() };
/// <summary>
/// 台札
///
/// - 画面中央に積んでいる札
/// - 0: 右
/// - 1: 左
/// </summary>
internal List<List<IdOfPlayingCards>> IdOfCardsOfCenterStacks { get; set; } = new() { new(), new() };
/// <summary>
/// 台札を削除
/// </summary>
/// <param name="place"></param>
/// <param name="startIndex"></param>
internal void RemoveCardAtOfCenterStack(int place, int startIndex)
{
this.IdOfCardsOfCenterStacks[place].RemoveAt(startIndex);
}
/// <summary>
/// 台札を追加
/// </summary>
/// <param name="place"></param>
/// <param name="idOfCard"></param>
internal void AddCardOfCenterStack(int place, IdOfPlayingCards idOfCard)
{
this.IdOfCardsOfCenterStacks[place].Add(idOfCard);
}
/// <summary>
/// 手札を追加
/// </summary>
/// <param name="player"></param>
/// <param name="idOfCard"></param>
internal void AddCardOfPlayersPile(int player, IdOfPlayingCards idOfCard)
{
this.IdOfCardsOfPlayersPile[player].Add(idOfCard);
}
/// <summary>
/// 手札を削除
/// </summary>
/// <param name="player"></param>
/// <param name="startIndex"></param>
/// <param name="numberOfCards"></param>
internal void RemoveRangeCardsOfPlayerPile(int player, int startIndex, int numberOfCards)
{
this.IdOfCardsOfPlayersPile[player].RemoveRange(startIndex, numberOfCards);
}
/// <summary>
/// 場札を追加
/// </summary>
/// <param name="player"></param>
/// <param name="idOfCards"></param>
internal void AddRangeCardsOfPlayerHand(int player, List<IdOfPlayingCards> idOfCards)
{
this.IdOfCardsOfPlayersHand[player].AddRange(idOfCards);
}
/// <summary>
/// 場札を削除
/// </summary>
/// <param name="player"></param>
/// <param name="handIndex"></param>
internal void RemoveCardAtOfPlayerHand(int player, int handIndex)
{
this.IdOfCardsOfPlayersHand[player].RemoveAt(handIndex);
}
/// <summary>
/// 手札から場札へ移動
/// </summary>
/// <param name="player"></param>
/// <param name="startIndex"></param>
/// <param name="numberOfCards"></param>
internal void MoveCardsToHandFromPile(int player, int startIndex, int numberOfCards)
{
var idOfCards = this.IdOfCardsOfPlayersPile[player].GetRange(startIndex, numberOfCards);
this.RemoveRangeCardsOfPlayerPile(player, startIndex, numberOfCards);
this.AddRangeCardsOfPlayerHand(player, idOfCards);
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameModelBuffer</code> は、ゲームを時間で切った断面図みたいなもんだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ スナップショットか?」</p>
<p>📄 <code>Assets/Scripts/Models/IdOfPlayingCards.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models
{
/// <summary>
/// トランプのカード
///
/// - ジョーカーを除く
/// </summary>
internal enum IdOfPlayingCards
{
Clubs1,
Clubs2,
Clubs3,
Clubs4,
Clubs5,
Clubs6,
Clubs7,
Clubs8,
Clubs9,
Clubs10,
Clubs11,
Clubs12,
Clubs13,
Diamonds1,
Diamonds2,
Diamonds3,
Diamonds4,
Diamonds5,
Diamonds6,
Diamonds7,
Diamonds8,
Diamonds9,
Diamonds10,
Diamonds11,
Diamonds12,
Diamonds13,
Hearts1,
Hearts2,
Hearts3,
Hearts4,
Hearts5,
Hearts6,
Hearts7,
Hearts8,
Hearts9,
Hearts10,
Hearts11,
Hearts12,
Hearts13,
Spades1,
Spades2,
Spades3,
Spades4,
Spades5,
Spades6,
Spades7,
Spades8,
Spades9,
Spades10,
Spades11,
Spades12,
Spades13,
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 トランプのカードの Id を、 enum型で作っておくぜ」</p>
<p>📅2023-02-01 sat 22:04</p>
<p><a href="https://crieit.now.sh/upload_images/6d9d89cdd24a2d5e55270c4e5208ad2e63da64fcd5564.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6d9d89cdd24a2d5e55270c4e5208ad2e63da64fcd5564.png?mw=700" alt="202302_unity_01-2210--view-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ビューは 画面表示関連だぜ」</p>
<p>📄 <code>Assets/Scripts/Views/GameObjectStorage.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Views
{
using Assets.Scripts.Models;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// ゲーム・オブジェクトと、その Id の紐づけ
/// </summary>
static class GameObjectStorage
{
internal static Dictionary<IdOfPlayingCards, GameObject> PlayingCards { get; private set; } = new();
internal static void Add(IdOfPlayingCards cardId, GameObject goCard)
{
PlayingCards.Add(cardId, goCard);
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ゲーム・オブジェクトを、 Id で すぐ取り出せる仕組みを作っておくぜ。<br />
<code>GameObject.Find( ... )</code> は 処理が重たいらしいしな」</p>
<p>📄 <code>Assets/Scripts/Views/GameViewModel.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Views
{
using Assets.Scripts.Models;
using System;
using UnityEngine;
/// <summary>
/// 画面表示関連
///
/// 西端: -62.0f
/// 東端: 62.0f
/// </summary>
public class GameViewModel
{
// - プロパティー
/// <summary>
/// 底端
///
/// - `0.0f` は盤
/// </summary>
internal readonly float minY = 0.5f;
internal readonly float[] handCardsZ = new[] { -28.0f, 42.0f };
// 手札(プレイヤー側で伏せて積んでる札)
internal readonly float[] pileCardsX = new[] { 40.0f, -40.0f }; // 端っこは 62.0f, -62.0f
internal readonly float[] pileCardsY = new[] { 0.5f, 0.5f };
internal readonly float[] pileCardsZ = new[] { -6.5f, 16.0f };
// 台札
internal float[] centerStacksX = { 15.0f, -15.0f };
/// <summary>
/// 台札のY座標
///
/// - 右が 0、左が 1
/// - 0.0f は盤なので、それより上にある
/// </summary>
internal float[] centerStacksY = { 0.5f, 0.5f };
internal float[] centerStacksZ = { 2.5f, 9.0f };
// - メソッド
/// <summary>
/// 台札の次の天辺の位置
/// </summary>
/// <param name="place"></param>
/// <returns></returns>
internal (float, float) GetXZOfNextCenterStackCard(GameModel gameModel, int place)
{
var length = gameModel.GetLengthOfCenterStackCards(place);
if (length < 1)
{
// 床上
var nextTopX2 = this.centerStacksX[place];
var nextTopZ2 = this.centerStacksZ[place];
return (nextTopX2, nextTopZ2);
}
// 台札の次の天辺の位置
var idOfLastCard = gameModel.GetLastCardOfCenterStack(place); // 天辺(最後)のカード
var goLastCard = GameObjectStorage.PlayingCards[idOfLastCard];
var nextTopX = (this.centerStacksX[place] - goLastCard.transform.position.x) / 2 + this.centerStacksX[place];
var nextTopZ = (this.centerStacksZ[place] - goLastCard.transform.position.z) / 2 + this.centerStacksZ[place];
return (nextTopX, nextTopZ);
}
/// <summary>
/// 場札を持ち上げる
/// </summary>
/// <param name="player"></param>
/// <param name="handIndesx"></param>
internal void PickupCardOfHand(GameModel gameModel, int player, int handIndesx)
{
var idOfFocusedHandCard = gameModel.GetCardAtOfPlayerHand(player, handIndesx);
var liftY = 5.0f; // 持ち上げる(パースペクティブがかかっていて、持ち上げすぎると北へ移動したように見える)
var rotateY = -5; // -5°傾ける
var rotateZ = -5; // -5°傾ける
var goCard = GameObjectStorage.PlayingCards[idOfFocusedHandCard];
goCard.transform.position = new Vector3(goCard.transform.position.x, goCard.transform.position.y + liftY, goCard.transform.position.z);
goCard.transform.rotation = Quaternion.Euler(goCard.transform.rotation.eulerAngles.x, goCard.transform.rotation.eulerAngles.y + rotateY, goCard.transform.eulerAngles.z + rotateZ);
}
/// <summary>
/// ピックアップしているカードを場に戻す
/// </summary>
/// <param name="card"></param>
internal void PutDownCardOfHand(GameModel gameModel, int player, int handIndex)
{
var idOfCard = gameModel.GetCardAtOfPlayerHand(player, handIndex);
var liftY = 5.0f; // 持ち上げる(パースペクティブがかかっていて、持ち上げすぎると北へ移動したように見える)
var rotateY = -5; // -5°傾ける
var rotateZ = -5; // -5°傾ける
// 逆をする
liftY = -liftY;
rotateY = -rotateY;
rotateZ = -rotateZ;
var goCard = GameObjectStorage.PlayingCards[idOfCard];
goCard.transform.position = new Vector3(goCard.transform.position.x, goCard.transform.position.y + liftY, goCard.transform.position.z);
goCard.transform.rotation = Quaternion.Euler(goCard.transform.rotation.eulerAngles.x, goCard.transform.rotation.eulerAngles.y + rotateY, goCard.transform.eulerAngles.z + rotateZ);
}
/// <summary>
/// 場札を並べる
///
/// - 左端は角度で言うと 112.0f
/// </summary>
internal void ArrangeHandCards(GameModel gameModel, int player)
{
int handIndex = gameModel.GetIndexOfFocusedCardOfPlayer(player);
// 25枚の場札が並べるように調整してある
int numberOfCards = gameModel.GetLengthOfPlayerHandCards(player); // 場札の枚数
if (numberOfCards < 1)
{
return; // 何もしない
}
float cardAngleZ = -5; // カードの少しの傾き
int range = 200; // 半径。大きな円にするので、中心を遠くに離したい
int offsetCircleCenterZ; // 中心位置の調整
float angleY;
float playerTheta;
float angleStep = -1.83f;
float startTheta = (numberOfCards * Mathf.Abs(angleStep) / 2 - Mathf.Abs(angleStep) / 2 + 90.0f) * Mathf.Deg2Rad;
float thetaStep = angleStep * Mathf.Deg2Rad; ; // 時計回り
float ox = 0.0f;
float oz = this.handCardsZ[player];
switch (player)
{
case 0:
// 1プレイヤー
angleY = 180.0f;
playerTheta = 0;
offsetCircleCenterZ = -190;
break;
case 1:
// 2プレイヤー
angleY = 0.0f;
playerTheta = 180 * Mathf.Deg2Rad;
offsetCircleCenterZ = 188; // カメラのパースペクティブが付いているから、目視で調整
break;
default:
throw new Exception();
}
float theta = startTheta;
foreach (var goCard in gameModel.GetCardsOfPlayerHand(player))
{
float x = range * Mathf.Cos(theta + playerTheta) + ox;
float z = range * Mathf.Sin(theta + playerTheta) + oz + offsetCircleCenterZ;
SetPosRot(goCard, x, this.minY, z, angleY: angleY, angleZ: cardAngleZ);
theta += thetaStep;
}
// 場札を並べなおすと、持ち上げていたカードを下ろしてしまうので、再度、持ち上げる
this.ResumeCardPickup(gameModel, player);
}
/// <summary>
/// 場札を並べなおすと、持ち上げていたカードを下ろしてしまうので、再度、持ち上げる
/// </summary>
private void ResumeCardPickup(GameModel gameModel, int player)
{
int handIndex = gameModel.GetIndexOfFocusedCardOfPlayer(player);
if (0 <= handIndex && handIndex < gameModel.GetLengthOfPlayerHandCards(player)) // 範囲内なら
{
// 抜いたカードの右隣のカードを(有れば)ピックアップする
this.PickupCardOfHand(gameModel, player, handIndex);
}
}
/// <summary>
/// カードの位置と 捻りの設定
/// </summary>
/// <param name="card"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="angleY"></param>
/// <param name="angleZ"></param>
/// <param name="motionProgress">Update関数の中でないと役に立たない</param>
internal void SetPosRot(IdOfPlayingCards idOfCard, float x, float y, float z, float angleY = 180.0f, float angleZ = 0.0f, float motionProgress = 1.0f)
{
var goCard = GameObjectStorage.PlayingCards[idOfCard];
var beginPos = goCard.transform.position;
var endPos = new Vector3(x, y, z);
goCard.transform.position = Vector3.Lerp(beginPos, endPos, motionProgress);
goCard.transform.rotation = Quaternion.Euler(0, angleY, angleZ);
}
/// <summary>
/// ぴったり積むと不自然だから、X と Z を少しずらすための仕組み
///
/// - 1プレイヤー、2プレイヤーのどちらも右利きと仮定
/// </summary>
/// <param name="player"></param>
/// <returns></returns>
internal (float, float, float) MakeShakeForCenterStack(int player)
{
// 1プレイヤーから見て。左上にずれていくだろう
var left = -1.5f;
var right = 0.5f;
var bottom = -0.5f;
var top = 1.5f;
var angleY = UnityEngine.Random.Range(-10, 40); // 反時計回りに大きく捻りそう
switch (player)
{
case 0:
return (UnityEngine.Random.Range(left, right), UnityEngine.Random.Range(bottom, top), angleY);
case 1:
return (UnityEngine.Random.Range(-right, -left), UnityEngine.Random.Range(-top, -bottom), angleY);
default:
throw new Exception();
}
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ゲーム・ビュー・モデルは 画面の表示が どんな感じになってるか記憶したり、編集したりしているな」</p>
<p><a href="https://crieit.now.sh/upload_images/bde2a0ff8832ed5f511872b547efed2563da664376b74.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bde2a0ff8832ed5f511872b547efed2563da664376b74.png?mw=700" alt="202302_unity_01-2216--game-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 一番上の階層のスクリプトは、整理できてないものが残っている」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 目立つんだから、重要なものを置けだぜ」</p>
<p>📄 <code>Assets/Scripts/PlayingCard.cs</code> file:</p>
<pre><code class="csharp">using UnityEngine;
public class PlayingCard : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
// 今回は使わない
//
///// <summary>
///// マウスボタン押下時
///// </summary>
//private void OnMouseDown()
//{
// // 裏返します
// var oldZ = transform.rotation.eulerAngles.z; // 度数法
// transform.rotation = Quaternion.Euler(0, 0, oldZ + 180); // 180°回転
//}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>PlayingCard.cs</code> は、神経衰弱ゲームのとき使っていたが、スピードでは使っていないぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 じゃあ 消しなさいよ!」</p>
<p>📄 <code>Assets/Scripts/LazyArgs.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts
{
/// <summary>
/// コーディングのテクニックのための仕込み
/// </summary>
internal class LazyArgs
{
public delegate void Action();
public delegate void SetValue<T>(T value);
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>LazyArgs.cs</code> は、コードを上手く書くテクニックに使うだけなんで、気にしなくていい」</p>
<p>📄 <code>Assets/Scripts/GameManager.cs</code> file:</p>
<pre><code class="csharp">using Assets.Scripts.Models;
using Assets.Scripts.Views;
using System;
using System.Linq;
using UnityEngine;
using Commands = Assets.Scripts.Models.Timeline.Commands;
using ModelsOfTimeline = Assets.Scripts.Models.Timeline;
/// <summary>
/// ゲーム・マネージャー
///
/// - スピードは、日本と海外で ルールとプレイング・スタイルに違いがあるので、用語に統一感はない
/// </summary>
public class GameManager : MonoBehaviour
{
ModelsOfTimeline.Model commandStorage;
GameModelBuffer gameModelBuffer;
GameModel gameModel;
GameViewModel gameViewModel;
// ゲーム内単位時間
float unitSeconds = 1.0f / 60.0f;
// ゲーム内経過時間
float elapsedSeconds = 0.0f;
// Start is called before the first frame update
void Start()
{
// 全てのカードのゲーム・オブジェクトを、IDに紐づける
GameObjectStorage.Add(IdOfPlayingCards.Clubs1, GameObject.Find($"Clubs 1"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs2, GameObject.Find($"Clubs 2"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs3, GameObject.Find($"Clubs 3"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs4, GameObject.Find($"Clubs 4"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs5, GameObject.Find($"Clubs 5"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs6, GameObject.Find($"Clubs 6"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs7, GameObject.Find($"Clubs 7"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs8, GameObject.Find($"Clubs 8"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs9, GameObject.Find($"Clubs 9"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs10, GameObject.Find($"Clubs 10"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs11, GameObject.Find($"Clubs 11"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs12, GameObject.Find($"Clubs 12"));
GameObjectStorage.Add(IdOfPlayingCards.Clubs13, GameObject.Find($"Clubs 13"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds1, GameObject.Find($"Diamonds 1"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds2, GameObject.Find($"Diamonds 2"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds3, GameObject.Find($"Diamonds 3"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds4, GameObject.Find($"Diamonds 4"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds5, GameObject.Find($"Diamonds 5"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds6, GameObject.Find($"Diamonds 6"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds7, GameObject.Find($"Diamonds 7"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds8, GameObject.Find($"Diamonds 8"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds9, GameObject.Find($"Diamonds 9"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds10, GameObject.Find($"Diamonds 10"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds11, GameObject.Find($"Diamonds 11"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds12, GameObject.Find($"Diamonds 12"));
GameObjectStorage.Add(IdOfPlayingCards.Diamonds13, GameObject.Find($"Diamonds 13"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts1, GameObject.Find($"Hearts 1"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts2, GameObject.Find($"Hearts 2"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts3, GameObject.Find($"Hearts 3"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts4, GameObject.Find($"Hearts 4"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts5, GameObject.Find($"Hearts 5"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts6, GameObject.Find($"Hearts 6"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts7, GameObject.Find($"Hearts 7"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts8, GameObject.Find($"Hearts 8"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts9, GameObject.Find($"Hearts 9"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts10, GameObject.Find($"Hearts 10"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts11, GameObject.Find($"Hearts 11"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts12, GameObject.Find($"Hearts 12"));
GameObjectStorage.Add(IdOfPlayingCards.Hearts13, GameObject.Find($"Hearts 13"));
GameObjectStorage.Add(IdOfPlayingCards.Spades1, GameObject.Find($"Spades 1"));
GameObjectStorage.Add(IdOfPlayingCards.Spades2, GameObject.Find($"Spades 2"));
GameObjectStorage.Add(IdOfPlayingCards.Spades3, GameObject.Find($"Spades 3"));
GameObjectStorage.Add(IdOfPlayingCards.Spades4, GameObject.Find($"Spades 4"));
GameObjectStorage.Add(IdOfPlayingCards.Spades5, GameObject.Find($"Spades 5"));
GameObjectStorage.Add(IdOfPlayingCards.Spades6, GameObject.Find($"Spades 6"));
GameObjectStorage.Add(IdOfPlayingCards.Spades7, GameObject.Find($"Spades 7"));
GameObjectStorage.Add(IdOfPlayingCards.Spades8, GameObject.Find($"Spades 8"));
GameObjectStorage.Add(IdOfPlayingCards.Spades9, GameObject.Find($"Spades 9"));
GameObjectStorage.Add(IdOfPlayingCards.Spades10, GameObject.Find($"Spades 10"));
GameObjectStorage.Add(IdOfPlayingCards.Spades11, GameObject.Find($"Spades 11"));
GameObjectStorage.Add(IdOfPlayingCards.Spades12, GameObject.Find($"Spades 12"));
GameObjectStorage.Add(IdOfPlayingCards.Spades13, GameObject.Find($"Spades 13"));
commandStorage = new ModelsOfTimeline.Model();
gameModelBuffer = new GameModelBuffer();
gameModel = new GameModel(gameModelBuffer);
gameViewModel = new GameViewModel();
// ゲーム開始時、とりあえず、すべてのカードは、いったん右の台札という扱いにする
const int right = 0;// 台札の右
// const int left = 1;// 台札の左
foreach (var idOfCard in GameObjectStorage.PlayingCards.Keys)
{
// 右の台札
gameModelBuffer.IdOfCardsOfCenterStacks[right].Add(idOfCard);
}
// 右の台札をシャッフル
gameModelBuffer.IdOfCardsOfCenterStacks[right] = gameModelBuffer.IdOfCardsOfCenterStacks[right].OrderBy(i => Guid.NewGuid()).ToList();
// 右の台札をすべて、色分けして、黒色なら1プレイヤーの、赤色なら2プレイヤーの、手札に乗せる
while (0 < gameModel.GetLengthOfCenterStackCards(right))
{
// 即実行
new Commands.MoveCardsToPileFromCenterStacks(place: right).DoIt(gameModelBuffer, gameViewModel);
}
// 1,2プレイヤーについて、手札から5枚抜いて、場札として置く(画面上の場札の位置は調整される)
var time = 0.0f;
this.commandStorage.Add(time, new Commands.MoveCardsToHandFromPile(player: 0, numberOfCards: 5));
this.commandStorage.Add(time, new Commands.MoveCardsToHandFromPile(player: 1, numberOfCards: 5));
// 以下、デモ・プレイを登録
SetupDemo();
// OnTick を 1.0 秒後に呼び出し、以降は unitSeconds 秒毎に実行
InvokeRepeating(nameof(OnTick), 1.0f, unitSeconds);
}
// Update is called once per frame
void Update()
{
// 入力をコマンドとして登録
UpdateInput();
}
/// <summary>
/// 一定間隔で呼び出される
/// </summary>
void OnTick()
{
// 時限式で、コマンドを消化
this.commandStorage.DoIt(elapsedSeconds, gameModelBuffer, gameViewModel);
elapsedSeconds += unitSeconds;
}
/// <summary>
/// 入力を、コマンドに変換して、タイムラインへ登録します
/// </summary>
private void UpdateInput()
{
const int right = 0;// 台札の右
const int left = 1;// 台札の左
bool handled1player = false;
bool handled2player = false;
// 先に登録したコマンドの方が早く実行される
// (ボタン押下が同時なら)右の台札は1プレイヤー優先
// ==================================================
if (Input.GetKeyDown(KeyCode.DownArrow))
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
this.commandStorage.Add(elapsedSeconds, new Commands.MoveCardToCenterStackFromHand(
player: 0, // 1プレイヤーが
place: right // 右の
));
handled1player = true;
}
if (Input.GetKeyDown(KeyCode.W))
{
// 2プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
this.commandStorage.Add(elapsedSeconds, new Commands.MoveCardToCenterStackFromHand(
player: 1, // 2プレイヤーが
place: right // 右の
));
handled2player = true;
}
// (ボタン押下が同時なら)左の台札は2プレイヤー優先
// ==================================================
// 2プレイヤー
if (Input.GetKeyDown(KeyCode.S))
{
// 2プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)左の台札へ積み上げる
this.commandStorage.Add(elapsedSeconds, new Commands.MoveCardToCenterStackFromHand(
player: 1, // 2プレイヤーが
place: left // 左の
));
handled2player = true;
}
// 1プレイヤー
if (Input.GetKeyDown(KeyCode.UpArrow))
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)左の台札へ積み上げる
this.commandStorage.Add(elapsedSeconds, new Commands.MoveCardToCenterStackFromHand(
player: 0, // 1プレイヤーが
place: left // 左の
));
handled1player = true;
}
// それ以外のキー入力は、同時でも勝敗に関係しない
// ==============================================
// 1プレイヤー
if(handled1player)
{
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
// 1プレイヤーのピックアップしているカードから見て、(1プレイヤーから見て)左隣のカードをピックアップするように変えます
var player = 0;
this.commandStorage.Add(elapsedSeconds, new Commands.MoveFocusToNextCard(
player: player,
direction: 1,
setIndexOfNextFocusedHandCard: (indexOfNextFocusedHandCard) =>
{
gameModelBuffer.IndexOfFocusedCardOfPlayers[player] = indexOfNextFocusedHandCard; // 更新
}));
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
// 1プレイヤーのピックアップしているカードから見て、(1プレイヤーから見て)右隣のカードをピックアップするように変えます
var player = 0;
this.commandStorage.Add(elapsedSeconds, new Commands.MoveFocusToNextCard(
player: player,
direction: 0,
setIndexOfNextFocusedHandCard: (indexOfNextFocusedHandCard) =>
{
gameModelBuffer.IndexOfFocusedCardOfPlayers[player] = indexOfNextFocusedHandCard; // 更新
}));
}
// 2プレイヤー
if(handled2player)
{
}
else if (Input.GetKeyDown(KeyCode.A))
{
// 2プレイヤーのピックアップしているカードから見て、(2プレイヤーから見て)左隣のカードをピックアップするように変えます
var player = 1;
this.commandStorage.Add(elapsedSeconds, new Commands.MoveFocusToNextCard(
player: player,
direction: 1,
setIndexOfNextFocusedHandCard: (indexOfNextFocusedHandCard) =>
{
gameModelBuffer.IndexOfFocusedCardOfPlayers[player] = indexOfNextFocusedHandCard; // 更新
}));
}
else if (Input.GetKeyDown(KeyCode.D))
{
// 2プレイヤーのピックアップしているカードから見て、(2プレイヤーから見て)右隣のカードをピックアップするように変えます
var player = 1;
this.commandStorage.Add(elapsedSeconds, new Commands.MoveFocusToNextCard(
player: player,
direction: 0,
setIndexOfNextFocusedHandCard: (indexOfNextFocusedHandCard) =>
{
gameModelBuffer.IndexOfFocusedCardOfPlayers[player] = indexOfNextFocusedHandCard; // 更新
}));
}
// デバッグ用
if (Input.GetKeyDown(KeyCode.Space))
{
// 両プレイヤーは手札から1枚抜いて、場札として置く
for (var player = 0; player < 2; player++)
{
// 場札を並べる
this.commandStorage.Add(elapsedSeconds, new Commands.MoveCardsToHandFromPile(
player: player,
numberOfCards: 1));
}
}
}
/// <summary>
/// タイムライン作成
///
/// - デモ
/// </summary>
void SetupDemo()
{
// 卓準備
const int right = 0;// 台札の右
const int left = 1;// 台札の左
float scheduleSeconds = 1.0f;
float oneSecond = 1.0f;
// 登録:ピックアップ場札を、台札へ積み上げる
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、右の台札へ積み上げる
this.commandStorage.Add(scheduleSeconds, new Commands.MoveCardToCenterStackFromHand(
player: 0, // 1プレイヤーが
place: right // 右の
));
// 2プレイヤーが、ピックアップ中の場札を抜いて、左の台札へ積み上げる
this.commandStorage.Add(scheduleSeconds, new Commands.MoveCardToCenterStackFromHand(
player: 1, // 2プレイヤーが
place: left // 左の
));
scheduleSeconds += oneSecond;
}
// ゲーム・デモ開始
// 登録:カード選択
{
for (int i = 0; i < 2; i++)
{
// 1プレイヤーの右隣のカードへフォーカスを移します
{
var player = 0;
this.commandStorage.Add(scheduleSeconds, new Commands.MoveFocusToNextCard(
player: player,
direction: 0,
setIndexOfNextFocusedHandCard: (indexOfNextFocusedHandCard) =>
{
gameModelBuffer.IndexOfFocusedCardOfPlayers[player] = indexOfNextFocusedHandCard; // 更新
}));
}
// 2プレイヤーの右隣のカードへフォーカスを移します
{
var player = 1;
this.commandStorage.Add(scheduleSeconds, new Commands.MoveFocusToNextCard(
player: player,
direction: 0,
setIndexOfNextFocusedHandCard: (indexOfNextFocusedHandCard) =>
{
gameModelBuffer.IndexOfFocusedCardOfPlayers[player] = indexOfNextFocusedHandCard; // 更新
}));
}
scheduleSeconds += oneSecond;
}
}
// 登録:台札を積み上げる
{
this.commandStorage.Add(scheduleSeconds, new Commands.MoveCardToCenterStackFromHand(
player: 0, // 1プレイヤーが
place: 1 // 左の台札
));
this.commandStorage.Add(scheduleSeconds, new Commands.MoveCardToCenterStackFromHand(
player: 1, // 2プレイヤーが
place: 0 // 右の台札
));
scheduleSeconds += oneSecond;
}
// 登録:手札から1枚引く
{
// 1プレイヤーは手札から1枚抜いて、場札として置く
this.commandStorage.Add(scheduleSeconds, new Commands.MoveCardsToHandFromPile(
player: 0,
numberOfCards: 1));
// 2プレイヤーは手札から1枚抜いて、場札として置く
this.commandStorage.Add(scheduleSeconds, new Commands.MoveCardsToHandFromPile(
player: 1,
numberOfCards: 1));
scheduleSeconds += oneSecond;
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 キー入力しても、コマンドは ただちに実行せず、<br />
いったん タイムラインに登録するというのが、<br />
ビューと モデルを分離した工夫だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 最初から そうしろだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 Unity の開発経験が 短いからね」</p>
<p>📅2023-02-01 sat 22:24</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <code>Lerp</code> (リープ) を使うと、モーションを補間できるんじゃないの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 やってみるかだぜ」</p>
<p>📄 <code>Assets/Scripts/GameManager.cs</code> file:</p>
<pre><code class="csharp"> /// <summary>
/// 場札を持ち上げる
/// </summary>
/// <param name="player"></param>
/// <param name="handIndesx"></param>
internal void PickupCardOfHand(GameModel gameModel, int player, int handIndesx)
{
var idOfFocusedHandCard = gameModel.GetCardAtOfPlayerHand(player, handIndesx);
var liftY = 5.0f; // 持ち上げる(パースペクティブがかかっていて、持ち上げすぎると北へ移動したように見える)
var rotateY = -5; // -5°傾ける
var rotateZ = -5; // -5°傾ける
var goCard = GameObjectStorage.PlayingCards[idOfFocusedHandCard];
goCard.transform.position = new Vector3(
goCard.transform.position.x,
goCard.transform.position.y + liftY,
goCard.transform.position.z);
goCard.transform.rotation = Quaternion.Euler(
goCard.transform.rotation.eulerAngles.x,
goCard.transform.rotation.eulerAngles.y + rotateY,
goCard.transform.eulerAngles.z + rotateZ);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 例えば、場札を持ち上げるのは、 <code>position</code> や <code>rotation</code> を上書きしていたが、<br />
これをやめて、<br />
持ち上げる前の <code>position</code> と <code>rotation</code> 、<br />
持ち上げた後の <code>position</code> と <code>rotation</code> を持てばいいわけだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 それを覚えておいて、 <code>Update</code> メソッドで <code>Lerp()</code> すればいいわけだぜ」</p>
<pre><code class="csharp"> /// <summary>
/// 場札を持ち上げる
/// </summary>
/// <param name="player"></param>
/// <param name="handIndesx"></param>
internal void PickupCardOfHand(GameModel gameModel, int player, int handIndesx)
{
var idOfFocusedHandCard = gameModel.GetCardAtOfPlayerHand(player, handIndesx);
var liftY = 5.0f; // 持ち上げる(パースペクティブがかかっていて、持ち上げすぎると北へ移動したように見える)
var rotateY = -5; // -5°傾ける
var rotateZ = -5; // -5°傾ける
var goCard = GameObjectStorage.PlayingCards[idOfFocusedHandCard];
var beginPosition = goCard.transform.position;
var endPosition = new Vector3(
goCard.transform.position.x,
goCard.transform.position.y + liftY,
goCard.transform.position.z);
var beginRotation = goCard.transform.rotation;
var endRotation = Quaternion.Euler(
goCard.transform.rotation.eulerAngles.x,
goCard.transform.rotation.eulerAngles.y + rotateY,
goCard.transform.eulerAngles.z + rotateZ);
// TODO ★ セットせず、 Lerp したい
goCard.transform.position = endPosition;
goCard.transform.rotation = endRotation;
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 この <code>beginPosition</code>、 <code>endPosition</code>、 <code>beginRotation</code>、 <code>endRotation</code> を<br />
呼出し元へ さかのぼって持っていけばいいのか、大変だな」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1620798276151971840?s=20&t=y59Zxexg9CNQelCbIjaJFA">開発中画面</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 今日は ここまでだぜ」</p>
<p>📅 2023-02-01 sat 23:58 end</p>
<h1 id="📅2023-02-02 thu 18:44"><a href="#%F0%9F%93%852023-02-02+thu+18%3A44">📅2023-02-02 thu 18:44</a></h1>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://www.youtube.com/watch?v=betM4QG_DgQ&list=PLhaEhzBcQGjAF8nu1ze2lSxC5MyGXE1oc&index=10">作業用BGM</a></p>
<p><a href="https://crieit.now.sh/upload_images/807a266506e3b2be5f200d022f65c3b263db8796798d4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/807a266506e3b2be5f200d022f65c3b263db8796798d4.png?mw=700" alt="202302_unity_02-1844--movement-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 とりあえず、 <code>Movement</code> というクラスを作ろうぜ」</p>
<p><code>Assets/Scripts/Models/Timeline/Movement.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline
{
using UnityEngine;
/// <summary>
/// ゲーム・オブジェクトの動き
///
/// - Lerpに使うもの
/// </summary>
internal class Movement
{
// - その他(生成)
/// <summary>
/// 生成
/// </summary>
/// <param name="beginPosition">開始位置</param>
/// <param name="endPosition">終了位置</param>
/// <param name="beginRotation">開始回転</param>
/// <param name="endRotation">終了回転</param>
/// <param name="gameObject">ゲーム・オブジェクト</param>
public Movement(
Vector3 beginPosition,
Vector3 endPosition,
Quaternion beginRotation,
Quaternion endRotation,
GameObject gameObject)
{
this.BeginPosition = beginPosition;
this.EndPosition = endPosition;
this.BeginRotation = beginRotation;
this.EndRotation = endRotation;
this.GameObject = gameObject;
}
// - プロパティ
internal Vector3 BeginPosition { get; private set; }
internal Vector3 EndPosition { get; private set; }
internal Quaternion BeginRotation { get; private set; }
internal Quaternion EndRotation { get; private set; }
internal GameObject GameObject { get; private set; }
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Lerp</code> に使うデータを 持っておくクラスだな」</p>
<p>書き直す前のソース:</p>
<pre><code class="csharp"> /// <summary>
/// カードの位置と 捻りの設定
/// </summary>
/// <param name="card"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="angleY"></param>
/// <param name="angleZ"></param>
/// <param name="motionProgress">Update関数の中でないと役に立たない</param>
internal void SetPosRot(IdOfPlayingCards idOfCard, float x, float y, float z, float angleY = 180.0f, float angleZ = 0.0f, float motionProgress = 1.0f)
{
var goCard = GameObjectStorage.PlayingCards[idOfCard];
var beginPos = goCard.transform.position;
var endPos = new Vector3(x, y, z);
goCard.transform.position = Vector3.Lerp(beginPos, endPos, motionProgress);
goCard.transform.rotation = Quaternion.Euler(0, angleY, angleZ);
}
</code></pre>
<p>書き直した後のソース:</p>
<pre><code class="csharp"> /// <summary>
/// カードの位置と 捻りの設定
/// </summary>
/// <param name="card"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="angleY"></param>
/// <param name="angleZ"></param>
/// <param name="motionProgress">Update関数の中でないと役に立たない</param>
internal void SetPosRot(IdOfPlayingCards idOfCard, float x, float y, float z, float angleY = 180.0f, float angleZ = 0.0f, float motionProgress = 1.0f)
{
var goCard = GameObjectStorage.PlayingCards[idOfCard];
var movement = new Movement(
beginPosition: goCard.transform.position,
endPosition: new Vector3(x, y, z),
beginRotation: goCard.transform.rotation,
endRotation: Quaternion.Euler(0, angleY, angleZ),
gameObject: goCard);
goCard.transform.position = Vector3.Lerp(movement.BeginPosition, movement.EndPosition, motionProgress);
goCard.transform.rotation = Quaternion.Lerp(movement.BeginRotation, movement.EndRotation, motionProgress);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 動作が変わるんで リファクタリング ではなくて 仕様変更だが、<br />
どんどん <code>Lerp</code> するコードを 関数の外側に出すための 仕込みをしていこう」</p>
<p><a href="https://crieit.now.sh/upload_images/621dd5a817a3a1f6113dd6cac51b5f8763db9034de7c1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/621dd5a817a3a1f6113dd6cac51b5f8763db9034de7c1.png?mw=700" alt="202302_unity_02-1927--unwrapped-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>SetPosRot</code> という関数そのものが よくないので、この関数は削除して<br />
呼出し側に ベタ書き するように変えていこう」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 最大25枚の場札を 円弧上に 揃えて並べていく処理よ それ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 じゃあ、タイムラインには コマンドだけではなくて、<br />
<code>Movement</code> も置けた方がいいのか」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 <code>ICommand</code> と、 <code>Movement</code> を、1本化しろだぜ」</p>
<p><code>Assets/Scripts/Models/Timeline/Commands/ICommand.cs</code> file:</p>
<p>書き直す前のソース:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline.Commands
{
using Assets.Scripts.Models;
using Assets.Scripts.Views;
/// <summary>
/// コマンド
/// </summary>
interface ICommand
{
/// <summary>
/// コマンド実行
/// </summary>
/// <param name="gameModelBuffer">ゲームの内部状態(編集可能)</param>
/// <param name="gameViewModel">画面表示の状態(編集可能)</param>
void DoIt(GameModelBuffer gameModelBuffer, GameViewModel gameViewModel);
void Lerp(float progress);
/// <summary>
/// 持続時間が切れたとき
/// </summary>
void OnLeave();
}
}
</code></pre>
<p>書き直した後のソース:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models.Timeline.Commands
{
using Assets.Scripts.Models;
using Assets.Scripts.Views;
/// <summary>
/// コマンド
/// </summary>
interface ICommand
{
/// <summary>
/// 開始時
/// </summary>
/// <param name="gameModelBuffer">ゲームの内部状態(編集可能)</param>
/// <param name="gameViewModel">画面表示の状態(編集可能)</param>
void OnEnter(GameModelBuffer gameModelBuffer, GameViewModel gameViewModel);
/// <summary>
/// 持続中
/// </summary>
/// <param name="progress">進捗 0.0 ~ 1.0</param>
void Lerp(float progress);
/// <summary>
/// 持続時間が切れたとき
/// </summary>
void OnLeave();
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>DoIt</code> を、 <code>OnEnter</code> に書き直すだけでも 一貫性が出てきそうだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 コマンドに 開始時間と 持続時間 を持たせてしまえば どうだぜ?<br />
名前を <code>TimeSpan</code> にでも変えて、 コマンドはその特殊なケースにしろだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/9ffbcaec6153684ab19ecb7f7cd811d063dba250f263d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9ffbcaec6153684ab19ecb7f7cd811d063dba250f263d.png?mw=700" alt="202302_unity_02-2041--time-span-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>TimedItem</code> と、 <code>Command</code> と、 <code>Movement</code> は、 <code>TimeSpan</code> という枠組みで1本化したぜ」</p>
<p>📅 2023-02-01 sat 20:46 end</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 どんどん <code>Lerp</code> を使える形に変えていこう」</p>
<p>📅 2023-02-01 sat 21:02</p>
<p><a href="https://crieit.now.sh/upload_images/07038993315917412365e7a8ed30b72163dba65c59e89.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/07038993315917412365e7a8ed30b72163dba65c59e89.png?mw=700" alt="202302_unity_02-2100--put-down-card-of-hand-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 例えば <code>PutDownCardOfHand</code> メソッドは、単に <code>Movement</code> インスタンスを作るだけのメソッドだと分かった」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 頭の中が整理されてきたのね」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 頭を整理してから プログラミングしてくれだぜ」</p>
<pre><code class="csharp"> /// <summary>
/// 場札を並べる
///
/// - 左端は角度で言うと 112.0f
/// </summary>
internal void ArrangeHandCards(GameModel gameModel, int player, LazyArgs.SetValue<List<ISpan>> setSpans)
{ // ...
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 例えば <code>ArrangeHandCards</code> メソッドは、単に <code>Movement</code> インスタンスを複数、作るだけのメソッドだと分かった」</p>
<p><a href="https://crieit.now.sh/upload_images/9da5cce608656a39afd64d10d82c062c63dbab5320059.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9da5cce608656a39afd64d10d82c062c63dbab5320059.png?mw=700" alt="202302_unity_02-2123--bug.png" /></a></p>
<p>📅 2023-02-01 sat 21:24</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 あっ、バグった!」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 表現しづらいバグを起こすなあ。<br />
持ち上げるカードを 間違えているんだぜ なぜか」</p>
<p><a href="https://crieit.now.sh/upload_images/5df83fbc29ac83b16423729685df063f63dbadb60f858.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5df83fbc29ac83b16423729685df063f63dbadb60f858.png?mw=700" alt="202302_unity_02-2132--fixme-code-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 タイム・スパンの インスタンスの中で 即実行 するコードがあると タイミングが狂ってる感じがするぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <code>OnEnter</code> メソッドの中ではなく、 <code>Lerp</code> メソッドの中に書けば いいんじゃない?」</p>
<pre><code class="csharp"> List<ISpan> SubSpans { get; set; }
// - メソッド
public override void Lerp(float progress)
{
base.Lerp(progress);
if (this.SubSpans!=null)
{
foreach (var span in this.SubSpans)
{
span.Lerp(progress);
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 なるほど」</p>
<p><a href="https://crieit.now.sh/upload_images/75824c81f812608ff3c9af799de7db5163dbaf0883524.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/75824c81f812608ff3c9af799de7db5163dbaf0883524.png?mw=700" alt="202302_unity_02-2139--sub-spans.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ダメだぜ。持ち上げるカードを間違えているぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 コマンドのタイム・スパンの寿命と、<br />
場札の位置調整をしたいタイム・スパンの寿命は 別物だからでは?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 じゃあ タイム・スパンを新しく スポーン(Spawn;生成)しなくちゃ いけないのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/3a672258c6245ea0984fcbf08fe7462363dbb0278046d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3a672258c6245ea0984fcbf08fe7462363dbb0278046d.png?mw=700" alt="202302_unity_02-2143--timeline-model-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 タイムライン・モデルは ゲーム・モデルの外側にあるし、 ゲーム・ビュー・モデルの外側でもあるぜ。<br />
タイムライン・モデルは <strong>モデル</strong> なのだろうか? <strong>ビュー</strong> なのだろうか?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 画面に表示されてないから、モデルだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 モデルのくせに、ゲーム・オブジェクトを持ってるのは 良くない」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 タイムライン・モデルの <strong>モデルとビューの分離</strong> を先に行っておくべきだったんじゃない?」</p>
<p><a href="https://crieit.now.sh/upload_images/e7a86a76e31094d3827cc96a5faee2a463dbb116f3de9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e7a86a76e31094d3827cc96a5faee2a463dbb116f3de9.png?mw=700" alt="202302_unity_02-2148--discard.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 今なら Discard(ディスカード;更新の破棄)しても ダメージは30分レベルで軽微だから ロールバック(Rollback;巻き戻し)するかだぜ」</p>
<p>📅 2023-02-01 sat 21:49</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 巻き戻した」</p>
<p><a href="https://crieit.now.sh/upload_images/d1e912417499780590344d3d7876e4b663dbb2aa21421.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d1e912417499780590344d3d7876e4b663dbb2aa21421.png?mw=700" alt="202302_unity_02-2154--model-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 モデルが ビューを持ってると 良くないんだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e1894933fdbf99e422b4c700276d2c9a63dbb3e1e0787.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e1894933fdbf99e422b4c700276d2c9a63dbb3e1e0787.png?mw=700" alt="202302_unity_02-2159--lerp-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 じゃあ <code>Lerp</code> メソッドのような、ビュー に属するものを タイムライン・モデルが 持っていては<br />
いけなくないかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 そりゃそうだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <strong>TimelineView</strong> のようなものが 要るのかしら?」</p>
<p><a href="https://crieit.now.sh/upload_images/a763038bbe98f909c90c48e982e3405163dbb82a57a01.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a763038bbe98f909c90c48e982e3405163dbb82a57a01.png?mw=700" alt="202302_unity_02-2216--model-view-1.png" /></a></p>
<p>📅 2023-02-02 sat 22:20</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>OnEnter</code> メソッドは モデルを扱い、<br />
<code>Lerp</code> メソッドは ビューを扱うというように ぱっきり 分かれているので、<br />
<code>TimeSpan</code> も モデルとビューに分けられないかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 あっ、トランプの絵柄を取得できるメソッドが欲しいぜ」</p>
<p><code>Assets/Scripts/Models/IdOfCardSuits.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models
{
/// <summary>
/// カードのスート(絵柄)
/// </summary>
internal enum IdOfCardSuits
{
None,
Clubs,
Diamonds,
Hearts,
Spades,
}
}
</code></pre>
<p><code>Assets/Scripts/Models/IdOfCardSuits.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Models
{
using System;
/// <summary>
/// トランプのカード
///
/// - ジョーカーを除く
/// </summary>
internal enum IdOfPlayingCards
{
// ... 中略 ...
}
static class IdOfPlayingCardsExtensions
{
public static IdOfCardSuits Suit(this IdOfPlayingCards idOfCard)
{
switch (idOfCard)
{
case IdOfPlayingCards.Clubs1:
case IdOfPlayingCards.Clubs2:
case IdOfPlayingCards.Clubs3:
case IdOfPlayingCards.Clubs4:
case IdOfPlayingCards.Clubs5:
case IdOfPlayingCards.Clubs6:
case IdOfPlayingCards.Clubs7:
case IdOfPlayingCards.Clubs8:
case IdOfPlayingCards.Clubs9:
case IdOfPlayingCards.Clubs10:
case IdOfPlayingCards.Clubs11:
case IdOfPlayingCards.Clubs12:
case IdOfPlayingCards.Clubs13:
return IdOfCardSuits.Clubs;
case IdOfPlayingCards.Diamonds1:
case IdOfPlayingCards.Diamonds2:
case IdOfPlayingCards.Diamonds3:
case IdOfPlayingCards.Diamonds4:
case IdOfPlayingCards.Diamonds5:
case IdOfPlayingCards.Diamonds6:
case IdOfPlayingCards.Diamonds7:
case IdOfPlayingCards.Diamonds8:
case IdOfPlayingCards.Diamonds9:
case IdOfPlayingCards.Diamonds10:
case IdOfPlayingCards.Diamonds11:
case IdOfPlayingCards.Diamonds12:
case IdOfPlayingCards.Diamonds13:
return IdOfCardSuits.Diamonds;
case IdOfPlayingCards.Hearts1:
case IdOfPlayingCards.Hearts2:
case IdOfPlayingCards.Hearts3:
case IdOfPlayingCards.Hearts4:
case IdOfPlayingCards.Hearts5:
case IdOfPlayingCards.Hearts6:
case IdOfPlayingCards.Hearts7:
case IdOfPlayingCards.Hearts8:
case IdOfPlayingCards.Hearts9:
case IdOfPlayingCards.Hearts10:
case IdOfPlayingCards.Hearts11:
case IdOfPlayingCards.Hearts12:
case IdOfPlayingCards.Hearts13:
return IdOfCardSuits.Hearts;
case IdOfPlayingCards.Spades1:
case IdOfPlayingCards.Spades2:
case IdOfPlayingCards.Spades3:
case IdOfPlayingCards.Spades4:
case IdOfPlayingCards.Spades5:
case IdOfPlayingCards.Spades6:
case IdOfPlayingCards.Spades7:
case IdOfPlayingCards.Spades8:
case IdOfPlayingCards.Spades9:
case IdOfPlayingCards.Spades10:
case IdOfPlayingCards.Spades11:
case IdOfPlayingCards.Spades12:
case IdOfPlayingCards.Spades13:
return IdOfCardSuits.Spades;
default: throw new ArgumentOutOfRangeException("idOfCard");
}
}
}
}
</code></pre>
<p>📅 2023-02-03 sat 00:12</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 作った」</p>
<p><a href="https://crieit.now.sh/upload_images/33d34bc41640b4ab0cc11582acd5120063dbec62dfa0a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/33d34bc41640b4ab0cc11582acd5120063dbec62dfa0a.png?mw=700" alt="202302_unity_03-0200--bug-point-1.png" /></a></p>
<p>📅 2023-02-03 sat 02:00</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 タイム・ライン登録時は まだ 座標が動いてないから、<br />
タイム・ライン登録中も 座標を動かしてやらないと いけないぜ。<br />
この不具合は また今度直そう」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1621193047693492224?s=20&t=CoRWztOdgUDSmBcMSE_6ug">開発中画面</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 今日は ここまで」</p>
<h1 id="📅2023-02-03 fri 18:48"><a href="#%F0%9F%93%852023-02-03+fri+18%3A48">📅2023-02-03 fri 18:48</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 しばらく 作り直し」</p>
<p><a href="https://crieit.now.sh/upload_images/ea26ca30cc98ad498bd8b846754055b663dd3f4d754cc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ea26ca30cc98ad498bd8b846754055b663dd3f4d754cc.png?mw=700" alt="202302_unity_04-0206--addition-1.png" /></a></p>
<p>📅 2023-02-04 sat 02:07</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 7時間ぐらいバグ探して 1つ 直した。<br />
操作を2連続で行うと カードが変なところに飛んでいくので、<br />
2つの操作を結合して、1回の操作にする」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1621557770603597829?s=20&t=kCM9dWqp32K8flyyi7UwJw">開発中画面</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 今日はここまで」</p>
<h1 id="📅2023-02-04 sat 12:02"><a href="#%F0%9F%93%852023-02-04+sat+12%3A02">📅2023-02-04 sat 12:02</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 作ってみると 分からないところが いっぱい出てくる。散々だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/ebec83eb4d51368e981f5b01d418850163dde49642650.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ebec83eb4d51368e981f5b01d418850163dde49642650.png?mw=700" alt="202302_unity_04-1351--static-game-view-1.png" /></a></p>
<p>📅 2023-02-04 sat 13:53</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameViewModel</code> を廃止し、静的クラスにしたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/671c39f10b2bfd10364dcb29e820e5d663de36bb375b1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/671c39f10b2bfd10364dcb29e820e5d663de36bb375b1.png?mw=700" alt="202302_unity_04-1941--miss-name-1.png" /></a></p>
<p>📅 2023-02-04 sat 19:43</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 怪しい場所を発見したぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 修正したが、バグが直る様子なし」</p>
<p><a href="https://crieit.now.sh/upload_images/1da52164e1479a43a0deeeb0c7749e4063de4d8620cfb.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1da52164e1479a43a0deeeb0c7749e4063de4d8620cfb.png?mw=700" alt="202302_unity_04-2119--log-1.png" /></a></p>
<p>📅 2023-02-04 sat 21:20</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 5.0 だけ持ち上げたいのに、すでに 25.5 も持ち上がってたら、 6倍ぐらい 飛び上がるよな」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 1.06、 2.17、 3.83、 6.06、 8.83、 12.17、 16.06、 20.50、 25.50 は、<br />
+1.06、 +1.11、 +1.66、 +2.23、 +2.77、 +3.34、 +3.89、 +4.44、 +5.0 だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 加速していく 5.0 を累計してんの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 なんで勝手に 積分してんだぜ? 調べるか……」</p>
<p><a href="https://crieit.now.sh/upload_images/5fc49fa169db43447eac3818ed2ad21163de53d7257c0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5fc49fa169db43447eac3818ed2ad21163de53d7257c0.png?mw=700" alt="202302_unity_04-2144--sum-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 説明するのは難しいが 理解した。<br />
開始地点から 終了地点まで 刻んで動け、という命令をしてるときに<br />
開始地点が 刻々と 進んでいるんだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 開始地点は 動くなだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/22a69d36cf4f65370174b4d5c6b5bdd463de578425568.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/22a69d36cf4f65370174b4d5c6b5bdd463de578425568.png?mw=700" alt="202302_unity_04-2201--bug-fix-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こういう書き方で 修正できたが、<br />
こんな書き方が役に立つ場面 初めて見た。<br />
不思議な気分だぜ」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1621884143868219393?s=20&t=DePtrbaQRFX6Mkz2O1Tomg">開発中画面</a></p>
<p>📅 2023-02-04 sat 23:55</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 思ったのと 違う動きをしているが、<br />
不具合のリクツが分かってきたのは前進だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 今日は ここまでだぜ」</p>
<h1 id="📅2023-02-05 sun 12:27"><a href="#%F0%9F%93%852023-02-05+sun+12%3A27">📅2023-02-05 sun 12:27</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 バグ探ししてるだけで 進展なし」</p>
<p><a href="https://crieit.now.sh/upload_images/22a3541b196232b578691e0e3b01832363df6e92b1057.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/22a3541b196232b578691e0e3b01832363df6e92b1057.png?mw=700" alt="202302_unity_05-1752--modified-1.png" /></a></p>
<p>📅 2023-02-05 sat 17:53</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 1か所 変更して 様子を見るぜ」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1622158274866057217?s=20&t=25NMt9VXXAmLnP4iA654jw">開発中画面</a></p>
<p>📅 2023-02-05 sat 18:02</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 カードが飛び上がるのは なくなったぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 連打を禁止したら どうだぜ?<br />
<code>Lerp</code> が重なってるケースがあるのでは?」</p>
<p><a href="https://crieit.now.sh/upload_images/3e49488f553402bbbab28b9800855c9463df724eb7739.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3e49488f553402bbbab28b9800855c9463df724eb7739.png?mw=700" alt="202302_unity_05-1808--input-manager-1.png" /></a></p>
<p>📅 2023-02-05 sat 18:09</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 入力系は こんがらがると 大変だろうから ゲーム・マネージャーと分離するぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 疲れた ラーメン食べに行く いったん休憩!」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 おつ」</p>
<p>📅 2023-02-05 sat 18:10 end</p>
<h1 id="📅2023-02-06 sun 02:06"><a href="#%F0%9F%93%852023-02-06+sun+02%3A06">📅2023-02-06 sun 02:06</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 3時間寝たと思ったら目が覚めた。練習しよ」</p>
<p><a href="https://crieit.now.sh/upload_images/5c0e874300fea62638c208911a56889963dff522348ef.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5c0e874300fea62638c208911a56889963dff522348ef.png?mw=700" alt="202302_unity_06-0326--bug-fix-1.png" /></a></p>
<p>📅 2023-02-06 mon 03:28</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 やることの順番を 少しでも 前後間違えると 違った動きをする。<br />
直した」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1622302091426533381?s=20&t=f5EqhpedTJmS2Pkxi9oGIg">開発中画面</a></p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 👆 やったな!」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1622312190270402560?s=20&t=f5EqhpedTJmS2Pkxi9oGIg">開発中画面</a></p>
<p>📅 2023-02-06 mon 04:13</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 今朝は ここまで」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 おつ」</p>
<h1 id="📅2023-02-07 tue 03:59"><a href="#%F0%9F%93%852023-02-07+tue+03%3A59">📅2023-02-07 tue 03:59</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 睡眠が 長続きせず 途切れてしまった。 練習するか」</p>
<p><a href="https://crieit.now.sh/upload_images/43558fdfe0f08ea345a3f39d2b7ed1b963e15caa8f265.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/43558fdfe0f08ea345a3f39d2b7ed1b963e15caa8f265.png?mw=700" alt="202302_unity_07-0459--getter-1.png" /></a></p>
<p>📅 2023-02-06 mon 05:03</p>
<p><code>Assets/Scripts/Gui/GameManager.cs</code> file:</p>
<pre><code class="csharp"> // - プロパティ
// モデル・バッファー
GameModelBuffer modelBuffer = new GameModelBuffer();
/// <summary>
/// ゲーム・モデル
/// </summary>
internal GameModel Model
{
get
{
if (model == null)
{
// ゲーム・モデルは、ゲーム・モデル・バッファーを持つ
model = new GameModel(modelBuffer);
}
return model;
}
}
GameModel model;
/// <summary>
/// スケジュール・レジスター
/// </summary>
internal ScheduleRegister ScheduleRegister
{
get
{
if (scheduleRegister == null)
{
// スケジューラー・レジスターは、ゲーム・モデルを持つ。
scheduleRegister = new TimedGeneratorOfSpanOfLearp.ScheduleRegister(this.Model);
}
return scheduleRegister;
}
}
ScheduleRegister scheduleRegister;
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 プロパティは、ゲットしたタイミングで生成されるようにするぜ。<br />
どのゲーム・オブジェクトの <code>Start()</code> イベントハンドラから実行されるか 順番が不定なケースではこうする」</p>
<p><code>Assets/Scripts/Gui/InputManager.cs</code> file:</p>
<pre><code class="csharp">using Assets.Scripts.Gui.SpanOfLerp.TimedGenerator;
using Assets.Scripts.ThinkingEngine.CommandArgs;
using UnityEngine;
public class InputManager : MonoBehaviour
{
// - フィールド
ScheduleRegister scheduleRegister;
// - イベントハンドラ
// Start is called before the first frame update
void Start()
{
scheduleRegister = GameObject.Find("Game Manager").GetComponent<GameManager>().ScheduleRegister;
}
/// <summary>
/// Update is called once per frame
///
/// - 入力は、すぐに実行は、しません
/// - 入力は、コマンドに変換して、タイムラインへ登録します
/// </summary>
void Update()
{
const int right = 0;// 台札の右
const int left = 1;// 台札の左
bool handled1player = false;
bool handled2player = false;
// 先に登録したコマンドの方が早く実行される
// (ボタン押下が同時なら)右の台札は1プレイヤー優先
// ==================================================
if (Input.GetKeyDown(KeyCode.DownArrow))
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
scheduleRegister.AddJustNow(new MoveCardToCenterStackFromHandModel(
player: 0, // 1プレイヤーが
place: right)); // 右の
handled1player = true;
}
if (Input.GetKeyDown(KeyCode.W))
{
// 2プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
scheduleRegister.AddJustNow(new MoveCardToCenterStackFromHandModel(
player: 1, // 2プレイヤーが
place: right)); // 右の
handled2player = true;
}
// (ボタン押下が同時なら)左の台札は2プレイヤー優先
// ==================================================
// 2プレイヤー
if (Input.GetKeyDown(KeyCode.S))
{
// 2プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)左の台札へ積み上げる
scheduleRegister.AddJustNow(new MoveCardToCenterStackFromHandModel(
player: 1, // 2プレイヤーが
place: left)); // 左の
handled2player = true;
}
// 1プレイヤー
if (Input.GetKeyDown(KeyCode.UpArrow))
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)左の台札へ積み上げる
scheduleRegister.AddJustNow(new MoveCardToCenterStackFromHandModel(
player: 0, // 1プレイヤーが
place: left)); // 左の
handled1player = true;
}
// それ以外のキー入力は、同時でも勝敗に関係しない
// ==============================================
// 1プレイヤー
if (handled1player)
{
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
// 1プレイヤーのピックアップしているカードから見て、(1プレイヤーから見て)左隣のカードをピックアップするように変えます
scheduleRegister.AddJustNow(new MoveFocusToNextCardModel(
player: 0,
direction: 1));
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
// 1プレイヤーのピックアップしているカードから見て、(1プレイヤーから見て)右隣のカードをピックアップするように変えます
scheduleRegister.AddJustNow(new MoveFocusToNextCardModel(
player: 0,
direction: 0));
}
// 2プレイヤー
if (handled2player)
{
}
else if (Input.GetKeyDown(KeyCode.A))
{
// 2プレイヤーのピックアップしているカードから見て、(2プレイヤーから見て)左隣のカードをピックアップするように変えます
scheduleRegister.AddJustNow(new MoveFocusToNextCardModel(
player: 1,
direction: 1));
}
else if (Input.GetKeyDown(KeyCode.D))
{
// 2プレイヤーのピックアップしているカードから見て、(2プレイヤーから見て)右隣のカードをピックアップするように変えます
scheduleRegister.AddJustNow(new MoveFocusToNextCardModel(
player: 1,
direction: 0));
}
// デバッグ用
if (Input.GetKeyDown(KeyCode.Space))
{
// 両プレイヤーは手札から1枚抜いて、場札として置く
for (var player = 0; player < 2; player++)
{
// 場札を並べる
scheduleRegister.AddJustNow(new MoveCardsToHandFromPileModel(
player: player,
numberOfCards: 1));
}
}
}
}
</code></pre>
<p>📅 2023-02-07 tue 05:03</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 入力は、入力されたらすぐ実行するということはせず、<br />
入力時のゲーム時間を付けて、スケジュール・レジスターに コマンドを登録するぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/d56cdbb9a549ba31c837c6fb9188077d63e1561093086.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d56cdbb9a549ba31c837c6fb9188077d63e1561093086.png?mw=700" alt="202302_unity_07-0423--legal-manager-1.png" /></a></p>
<p>📅 2023-02-07 tue 05:04</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 入力の中に、ゲームの制約を書き込むと 読みづらくなるので、<br />
<code>LegalManager</code> というのを別途作って、こっちに ゲームの制約を組み込んでいくぜ」</p>
<p><code>Assets/Scripts/ThinkingEngine/IdOfPlayingCards.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.ThinkingEngine
{
using System;
/// <summary>
/// トランプのカード
///
/// - ジョーカーを除く
/// </summary>
internal enum IdOfPlayingCards
{ // ...
}
static class IdOfPlayingCardsExtensions
{
public static IdOfCardSuits Suit(this IdOfPlayingCards idOfCard)
{ // ...
}
public static int Number(this IdOfPlayingCards idOfCard)
{
switch (idOfCard)
{
case IdOfPlayingCards.Clubs1:
case IdOfPlayingCards.Diamonds1:
case IdOfPlayingCards.Hearts1:
case IdOfPlayingCards.Spades1:
return 1;
case IdOfPlayingCards.Clubs2:
case IdOfPlayingCards.Diamonds2:
case IdOfPlayingCards.Hearts2:
case IdOfPlayingCards.Spades2:
return 2;
case IdOfPlayingCards.Clubs3:
case IdOfPlayingCards.Diamonds3:
case IdOfPlayingCards.Hearts3:
case IdOfPlayingCards.Spades3:
return 3;
case IdOfPlayingCards.Clubs4:
case IdOfPlayingCards.Diamonds4:
case IdOfPlayingCards.Hearts4:
case IdOfPlayingCards.Spades4:
return 4;
case IdOfPlayingCards.Clubs5:
case IdOfPlayingCards.Diamonds5:
case IdOfPlayingCards.Hearts5:
case IdOfPlayingCards.Spades5:
return 5;
case IdOfPlayingCards.Clubs6:
case IdOfPlayingCards.Diamonds6:
case IdOfPlayingCards.Hearts6:
case IdOfPlayingCards.Spades6:
return 6;
case IdOfPlayingCards.Clubs7:
case IdOfPlayingCards.Diamonds7:
case IdOfPlayingCards.Hearts7:
case IdOfPlayingCards.Spades7:
return 7;
case IdOfPlayingCards.Clubs8:
case IdOfPlayingCards.Diamonds8:
case IdOfPlayingCards.Hearts8:
case IdOfPlayingCards.Spades8:
return 8;
case IdOfPlayingCards.Clubs9:
case IdOfPlayingCards.Diamonds9:
case IdOfPlayingCards.Hearts9:
case IdOfPlayingCards.Spades9:
return 9;
case IdOfPlayingCards.Clubs10:
case IdOfPlayingCards.Diamonds10:
case IdOfPlayingCards.Hearts10:
case IdOfPlayingCards.Spades10:
return 10;
case IdOfPlayingCards.Clubs11:
case IdOfPlayingCards.Diamonds11:
case IdOfPlayingCards.Hearts11:
case IdOfPlayingCards.Spades11:
return 11;
case IdOfPlayingCards.Clubs12:
case IdOfPlayingCards.Diamonds12:
case IdOfPlayingCards.Hearts12:
case IdOfPlayingCards.Spades12:
return 12;
case IdOfPlayingCards.Clubs13:
case IdOfPlayingCards.Diamonds13:
case IdOfPlayingCards.Hearts13:
case IdOfPlayingCards.Spades13:
return 13;
default: throw new ArgumentOutOfRangeException("idOfCard");
}
}
}
}
</code></pre>
<p>📅 2023-02-07 tue 05:24</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 トランプ・カードのIdを、数に変える方法が無かったので、作っておくぜ」</p>
<p><code>Assets/Scripts/ThinkingEngine/LegalMove.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.ThinkingEngine
{
internal class LegalMove
{
// - メソッド
internal static bool CanPutToCenterStack(GameModel gameModel, int player, int place)
{
int index = gameModel.GetIndexOfFocusedCardOfPlayer(player);
if (index == -1)
{
return false;
}
IdOfPlayingCards topCard = gameModel.GetLastCardOfCenterStack(place);
if (topCard == IdOfPlayingCards.None)
{
return false;
}
var numberOfPickup = gameModel.GetCardsOfPlayerHand(player)[index].Number();
int numberOfTopCard = topCard.Number();
// とりあえず差分を取る。
// 負数が出ると、負数の剰余はプログラムによって結果が異なるので、面倒だ。
// 割る数を先に足しておけば、剰余をしても負数にはならない
int divisor = 13; // 法
int remainder = (numberOfTopCard - numberOfPickup + divisor) % divisor;
return remainder == 1 || remainder == divisor - 1;
}
}
}
</code></pre>
<p>📅 2023-02-07 tue 06:10</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>LegalManager</code> というゲーム・オブジェクトにアタッチする C#スクリプトは止めて、<br />
<code>LegalMove</code> という静的クラスを作ったぜ」</p>
<pre><code class="csharp"> // (ボタン押下が同時なら)右の台札は1プレイヤー優先
// ==================================================
if (Input.GetKeyDown(KeyCode.DownArrow) && LegalMove.CanPutToCenterStack(
gameModel: scheduleRegister.GameModel,
player: 0, // 1プレイヤーが
place: right)) // 右の
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
scheduleRegister.AddJustNow(new MoveCardToCenterStackFromHandModel(
player: 0, // 1プレイヤーが
place: right)); // 右の
handled1player = true;
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こんな風に、入力に制約を付ける感じで使う」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ついでに、ボタン連打をするという スパム行為 をやめさせたいな。<br />
前に押してから 何秒経過するまで 次の入力ができないというような 制約を付ければいいのかだぜ?」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://www.youtube.com/watch?v=7kSsKSADyc4">作業用BGM</a></p>
<p><a href="https://crieit.now.sh/upload_images/5c8ad51247c2818a0a74c28de179629e63e17941976e9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5c8ad51247c2818a0a74c28de179629e63e17941976e9.png?mw=700" alt="202302_unity_07-0702--timed-command-1.png" /></a></p>
<p>📅 2023-02-07 tue 07:03</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 コマンドには 持続時間が自動的にセットされるようにして……」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 すべての入力は コマンドに変換してから実行されるという 建付け にしておけば、<br />
入力による 必要な待機時間は 決まるな」</p>
<pre><code class="csharp"> // - フィールド
// ...
float[] spamSeconds = new[] { 0f, 0f };
// - イベントハンドラ
// ...
void Update()
{
// もう入力できないなら真
bool[] handled = { false, false };
for (var player = 0; player < 2; player++)
{
// 前判定
// もう入力できないなら真
handled[player] = 0 < spamSeconds[player];
// スパン時間消化
if (0 < spamSeconds[player])
{
// 負数になっても気にしない
spamSeconds[player] -= Time.deltaTime;
}
}
const int right = 0;// 台札の右
const int left = 1;// 台札の左
// 先に登録したコマンドの方が早く実行される
// (ボタン押下が同時なら)右の台札は1プレイヤー優先
// ==================================================
// 1プレイヤー
{
var player = 0;
if (!handled[player] && Input.GetKeyDown(KeyCode.DownArrow) && LegalMove.CanPutToCenterStack(
gameModel: scheduleRegister.GameModel,
player: player,
place: right)) // 右の
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveCardToCenterStackFromHandModel(
player: player, // 1プレイヤーが
place: right)); // 右の
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
handled[player] = true;
}
}
// ...
</code></pre>
<p>📅 2023-02-07 tue 08:15</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 キー入力したら、コマンドに対応づく持続時間を覚えておいて、<br />
その時間を消化しきるまで 次の入力ができないようにするぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 今朝は ここまで」</p>
<h1 id="📅2023-02-09 thu 18:26"><a href="#%F0%9F%93%852023-02-09+thu+18%3A26">📅2023-02-09 thu 18:26</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 動作テストを勝手にしてくれるAIを入れたいぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 右、上、下、スペース を押してくれるだけで いいんじゃない?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 じゃあ ひとまず、<br />
1P vs 2P、<br />
1P vs COM、<br />
COM vs 2P、<br />
COM vs COM<br />
のボタンを作るかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/56fcfed0aebd37033778b7701a124b1163e4c288508ff.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/56fcfed0aebd37033778b7701a124b1163e4c288508ff.png?mw=700" alt="202302_unity_09-1851--ui-default-1.png" /></a></p>
<p>📅 2023-02-09 thu 18:54</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Shader を <code>UI/Default</code> にすると半透明にできるの、ノーヒントでは 気づかないよな」</p>
<p><a href="https://crieit.now.sh/upload_images/68cfdc5dbaae0e4d63316bcf379fffa363e4c3f541982.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/68cfdc5dbaae0e4d63316bcf379fffa363e4c3f541982.png?mw=700" alt="202302_unity_09-1857--ui-manager-1.png" /></a></p>
<p>📅 2023-02-09 thu 18:57</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>UIManager</code> を作るぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 大改造」</p>
<p><a href="https://crieit.now.sh/upload_images/4894f35fd236d41538658b4b49979a2463e4f9ba21c07.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4894f35fd236d41538658b4b49979a2463e4f9ba21c07.png?mw=700" alt="202302_unity_09-2243--to-meaning-1.png" /></a></p>
<p>📅 2023-02-09 thu 22:48</p>
<p><code>Assets/Scripts/Gui/InputManager/ToMeaning.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.Gui.InputManager
{
using UnityEngine;
/// <summary>
/// キー入力の解析
/// </summary>
internal class ToMeaning
{
// - プロパティ
/// <summary>
/// 自分に近い方の台札へ置く
/// </summary>
internal bool[] MoveCardToCenterStackNearMe { get; private set; } = new[] { false, false };
/// <summary>
/// 自分から遠い方の台札へ置く
/// </summary>
internal bool[] MoveCardToFarCenterStack { get; private set; } = new[] { false, false };
/// <summary>
/// 自分から見て(今ピックアップしているカードの)右隣のカードをピックアップ
/// </summary>
internal bool[] PickupCardToForward { get; private set; } = new[] { false, false };
/// <summary>
/// 自分から見て(今ピックアップしているカードの)左隣のカードをピックアップ
/// </summary>
internal bool[] PickupCardToBackward { get; private set; } = new[] { false, false };
/// <summary>
/// 手札から場札を補充する
/// </summary>
internal bool Drawing { get; private set; } = false;
// - メソッド
/// <summary>
/// 解析結果を全部消す
/// </summary>
internal void Clear()
{
for (var player = 0; player < 2; player++)
{
MoveCardToCenterStackNearMe[player] = false;
MoveCardToFarCenterStack[player] = false;
PickupCardToForward[player] = false;
PickupCardToBackward[player] = false;
}
Drawing = false;
}
/// <summary>
/// 物理的なキー入力を、意味的に置き換える
/// </summary>
/// <param name="player"></param>
internal void UpdateFromInput(int player)
{
if (player == 0)
{
MoveCardToCenterStackNearMe[player] = Input.GetKeyDown(KeyCode.DownArrow);
MoveCardToFarCenterStack[player] = Input.GetKeyDown(KeyCode.UpArrow);
PickupCardToForward[player] = Input.GetKeyDown(KeyCode.RightArrow);
PickupCardToBackward[player] = Input.GetKeyDown(KeyCode.LeftArrow);
}
else
{
MoveCardToCenterStackNearMe[player] = Input.GetKeyDown(KeyCode.S);
MoveCardToFarCenterStack[player] = Input.GetKeyDown(KeyCode.W);
PickupCardToForward[player] = Input.GetKeyDown(KeyCode.D);
PickupCardToBackward[player] = Input.GetKeyDown(KeyCode.A);
}
Drawing = Input.GetKeyDown(KeyCode.Space); // 1プレイヤーと、2プレイヤーの2回判定されてしまう
}
/// <summary>
/// 解析結果を全部上書きする
/// </summary>
internal void Overwrite(
int player,
bool moveCardToCenterStackNearMe,
bool moveCardToFarCenterStack,
bool pickupCardToForward,
bool pickupCardToBackward,
bool drawing)
{
MoveCardToCenterStackNearMe[player] = moveCardToCenterStackNearMe;
MoveCardToFarCenterStack[player] = moveCardToFarCenterStack;
PickupCardToForward[player] = pickupCardToForward;
PickupCardToBackward[player] = pickupCardToBackward;
Drawing = drawing;
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 何キーを押したかではなく、どういう意図で押したかで データを持つクラスを作るぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/f64f0c7d52606cfc27594a855d8f17b863e4fa99794f0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f64f0c7d52606cfc27594a855d8f17b863e4fa99794f0.png?mw=700" alt="202302_unity_09-2251--computer-1.png" /></a></p>
<p>📅 2023-02-09 thu 22:51</p>
<p><code>Assets/Scripts/ThinkingEngine/Computer.cs</code> file:</p>
<pre><code class="csharp">namespace Assets.Scripts.ThinkingEngine
{
using Assets.Scripts.ThinkingEngine.Model;
/// <summary>
/// コンピューター・プレイヤー
/// </summary>
internal class Computer
{
// - その他
internal Computer(int number)
{
this.Number = number;
}
// - プロパティ
/// <summary>
/// プレイヤー番号
///
/// - 1プレイヤーなら0
/// </summary>
public int Number { get; private set; }
/// <summary>
/// 自分に近い方の台札へ置く
/// </summary>
internal bool MoveCardToCenterStackNearMe { get; private set; }
/// <summary>
/// 自分から遠い方の台札へ置く
/// </summary>
internal bool MoveCardToFarCenterStack { get; private set; }
/// <summary>
/// 自分から見て(今ピックアップしているカードの)右隣のカードをピックアップ
/// </summary>
internal bool PickupCardToForward { get; private set; }
/// <summary>
/// 自分から見て(今ピックアップしているカードの)左隣のカードをピックアップ
/// </summary>
internal bool PickupCardToBackward { get; private set; }
/// <summary>
/// 手札から場札を補充する
/// </summary>
internal bool Drawing { get; private set; }
// - メソッド
/// <summary>
/// コンピューター・プレイヤーが思考して、操作を決める
/// </summary>
/// <param name="gameModel">現在の局面</param>
internal void Think(GameModel gameModel)
{
// 今回の入力予定
var moveCardToCenterStackNearMe = false;
var moveCardToFarCenterStack = false;
var pickupCardToForward = false;
var pickupCardToBackward = false;
var drawing = false;
// 順繰りにやってるだけ
if (this.MoveCardToCenterStackNearMe == false && this.MoveCardToFarCenterStack == false && this.PickupCardToForward == false && this.Drawing == false)
{
moveCardToCenterStackNearMe = true;
}
else if (this.MoveCardToCenterStackNearMe)
{
moveCardToCenterStackNearMe = false;
moveCardToFarCenterStack = true;
}
else if (this.MoveCardToFarCenterStack)
{
moveCardToFarCenterStack = false;
pickupCardToForward = true;
}
else if (this.PickupCardToForward)
{
pickupCardToForward = false;
drawing = true;
}
else if (this.Drawing)
{
drawing = false;
moveCardToCenterStackNearMe = true;
}
// 今回の入力
this.MoveCardToCenterStackNearMe = moveCardToCenterStackNearMe;
this.MoveCardToFarCenterStack = moveCardToFarCenterStack;
this.PickupCardToForward = pickupCardToForward;
this.PickupCardToBackward = pickupCardToBackward;
this.Drawing = drawing;
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 コンピューターは 順繰りに キーを押してるだけ」</p>
<p><a href="https://crieit.now.sh/upload_images/6a7301f5d50bc1f499bc80fa551a7c9d63e4fb4852de9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6a7301f5d50bc1f499bc80fa551a7c9d63e4fb4852de9.png?mw=700" alt="202302_unity_09-2254--input-manager-1.png" /></a></p>
<p>📅 2023-02-09 thu 22:54</p>
<p><code>Assets/Scripts/Gui/InputManager.cs</code> file:</p>
<pre><code class="csharp">using GuiOfInputManager = Assets.Scripts.Gui.InputManager;
using Assets.Scripts.Gui.SpanOfLerp.TimedGenerator;
using Assets.Scripts.ThinkingEngine.Model;
using Assets.Scripts.ThinkingEngine.Model.CommandArgs;
using UnityEngine;
using GuiOfTimedCommandArgs = Assets.Scripts.Gui.TimedCommandArgs;
using Assets.Scripts.ThinkingEngine;
public class InputManager : MonoBehaviour
{
// - フィールド
ScheduleRegister scheduleRegister;
/// <summary>
/// コンピューター・プレイヤー用
/// </summary>
GameModel gameModel;
float[] spamSeconds = new[] { 0f, 0f };
/// <summary>
/// コンピューター・プレイヤーか?
///
/// - コンピューターなら Computer インスタンス
/// - コンピューターでなければヌル
/// </summary>
internal Computer[] Computers { get; set; } = new Computer[] { new Computer(0), new Computer(1), };
GuiOfInputManager.ToMeaning inputToMeaning = new GuiOfInputManager.ToMeaning();
// - イベントハンドラ
// Start is called before the first frame update
void Start()
{
var gameManager = GameObject.Find("Game Manager").GetComponent<GameManager>();
scheduleRegister = gameManager.ScheduleRegister;
gameModel = gameManager.Model;
}
/// <summary>
/// Update is called once per frame
///
/// - 入力は、すぐに実行は、しません
/// - 入力は、コマンドに変換して、タイムラインへ登録します
/// </summary>
void Update()
{
// キー入力の解析:クリアー
inputToMeaning.Clear();
// もう入力できないなら真
bool[] handled = { false, false };
for (var player = 0; player < 2; player++)
{
// 前判定:もう入力できないなら真
//
// - スパム中
// - 対局停止中
handled[player] = 0 < spamSeconds[player] || !gameModel.IsGameActive;
if (!handled[player])
{
if (Computers[player] == null)
{
// キー入力の解析:人間の入力を受付
inputToMeaning.UpdateFromInput(player);
}
else
{
// コンピューター・プレイヤーが思考して、操作を決める
Computers[player].Think(gameModel);
// キー入力の解析:コンピューターからの入力を受付
inputToMeaning.Overwrite(
player: player,
moveCardToCenterStackNearMe: Computers[player].MoveCardToCenterStackNearMe,
moveCardToFarCenterStack: Computers[player].MoveCardToFarCenterStack,
pickupCardToForward: Computers[player].PickupCardToForward,
pickupCardToBackward: Computers[player].PickupCardToBackward,
drawing: Computers[player].Drawing);
}
}
// スパン時間消化
if (0 < spamSeconds[player])
{
// 負数になっても気にしない
spamSeconds[player] -= Time.deltaTime;
}
}
const int right = 0;// 台札の右
const int left = 1;// 台札の左
// 先に登録したコマンドの方が早く実行される
// (ボタン押下が同時なら)右の台札は1プレイヤー優先
// ==================================================
// 1プレイヤー
{
var player = 0;
if (!handled[player] && inputToMeaning.MoveCardToCenterStackNearMe[player] && LegalMove.CanPutToCenterStack(
gameModel: scheduleRegister.GameModel,
player: player,
place: right)) // 右の
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveCardToCenterStackFromHandModel(
player: player, // 1プレイヤーが
place: right)); // 右の
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
handled[player] = true;
}
}
// 2プレイヤー
{
var player = 1;
if (!handled[player] && inputToMeaning.MoveCardToFarCenterStack[player] && LegalMove.CanPutToCenterStack(
gameModel: scheduleRegister.GameModel,
player: player,
place: right)) // 右の)
{
// 2プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)右の台札へ積み上げる
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveCardToCenterStackFromHandModel(
player: player, // 2プレイヤーが
place: right)); // 右の
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
handled[player] = true;
}
}
// (ボタン押下が同時なら)左の台札は2プレイヤー優先
// ==================================================
// 2プレイヤー
{
var player = 1;
if (!handled[player] && inputToMeaning.MoveCardToCenterStackNearMe[player] && LegalMove.CanPutToCenterStack(
gameModel: scheduleRegister.GameModel,
player: player,
place: left))
{
// 2プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)左の台札へ積み上げる
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveCardToCenterStackFromHandModel(
player: player, // 2プレイヤーが
place: left)); // 左の
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
handled[player] = true;
}
}
// 1プレイヤー
{
var player = 0;
if (!handled[player] && inputToMeaning.MoveCardToFarCenterStack[player] && LegalMove.CanPutToCenterStack(
gameModel: scheduleRegister.GameModel,
player: player,
place: left))
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、(1プレイヤーから見て)左の台札へ積み上げる
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveCardToCenterStackFromHandModel(
player: player, // 1プレイヤーが
place: left)); // 左の
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
handled[player] = true;
}
}
// それ以外のキー入力は、同時でも勝敗に関係しない
// ==============================================
// 1プレイヤー
{
var player = 0;
if (handled[player])
{
}
else if (inputToMeaning.PickupCardToBackward[player])
{
// 1プレイヤーのピックアップしているカードから見て、(1プレイヤーから見て)左隣のカードをピックアップするように変えます
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveFocusToNextCardModel(
player: player,
direction: 1));
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
}
else if (inputToMeaning.PickupCardToForward[player])
{
// 1プレイヤーのピックアップしているカードから見て、(1プレイヤーから見て)右隣のカードをピックアップするように変えます
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveFocusToNextCardModel(
player: player,
direction: 0));
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
}
}
// 2プレイヤー
{
var player = 1;
if (handled[player])
{
}
else if (inputToMeaning.PickupCardToBackward[player])
{
// 2プレイヤーのピックアップしているカードから見て、(2プレイヤーから見て)左隣のカードをピックアップするように変えます
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveFocusToNextCardModel(
player: player,
direction: 1));
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
}
else if (inputToMeaning.PickupCardToForward[player])
{
// 2プレイヤーのピックアップしているカードから見て、(2プレイヤーから見て)右隣のカードをピックアップするように変えます
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveFocusToNextCardModel(
player: player,
direction: 0));
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
}
}
// デバッグ用
if (inputToMeaning.Drawing)
{
// 両プレイヤーは手札から1枚抜いて、場札として置く
for (var player = 0; player < 2; player++)
{
// 場札を並べる
var timedCommandArg = new GuiOfTimedCommandArgs.Model(new MoveCardsToHandFromPileModel(
player: player,
numberOfCards: 1));
spamSeconds[player] = timedCommandArg.Duration;
scheduleRegister.AddJustNow(timedCommandArg);
}
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 人間のキー入力も、コンピューターのキー入力も、<br />
同じルーチンに合流するように しておくぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/4ddd22bdc1f702f7824e91ba18737a6e63e4fc8a2d089.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4ddd22bdc1f702f7824e91ba18737a6e63e4fc8a2d089.png?mw=700" alt="202302_unity_09-2259--game-manager-1.png" /></a></p>
<p>📅 2023-02-09 thu 22:59</p>
<p><code>Assets/Scripts/Gui/GameManager.cs</code> file:</p>
<pre><code class="csharp">// ... 前略 ...
// 登録:ピックアップ場札を、台札へ積み上げる
{
{
// 1プレイヤーが、ピックアップ中の場札を抜いて、右の台札へ積み上げる
var player = 0;
var spanModel = new MoveCardToCenterStackFromHandModel(
player: player, // 1プレイヤーが
place: right); // 右の
this.ScheduleRegister.AddWithinScheduler(player, spanModel);
}
{
// 2プレイヤーが、ピックアップ中の場札を抜いて、左の台札へ積み上げる
var player = 1;
var spanModel = new MoveCardToCenterStackFromHandModel(
player: player, // 2プレイヤーが
place: left); // 左の;
this.ScheduleRegister.AddWithinScheduler(player, spanModel);
}
}
// 対局開始の合図
{
var spanModel = new SetGameActive(
isGameActive: true);
{
var player = 0; // どっちでもいいが、とりあえず、プレイヤー1に 合図を出させる
this.ScheduleRegister.AddWithinScheduler(player, spanModel);
}
{
var player = 1; // プレイヤー2も、間を合わせる
this.ScheduleRegister.AddScheduleSeconds(
player: player,
seconds: new GuiOfTimedCommandArgs.Model(spanModel).Duration);
}
}
// 以下、デモ・プレイを登録
// SetupDemo();
// OnTick を 1.0 秒後に呼び出し、以降は tickSeconds 秒毎に実行
InvokeRepeating(nameof(OnTick), 1.0f, tickSeconds);
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <strong>対局開始コマンド</strong> というのを追加した。<br />
これがないと コンピューターが ゲーム起動直後から 台札置くのも すっとばして 場札をいじりだしてしまうぜ」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1623684569303257088?s=20&t=ribcP0tlx-bgwQ1pUug2MQ">開発中画面</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 とりあえず こんなもんで」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 今日は ここまでだぜ」</p>
<h1 id="📅 2023-02-12 sun 17:52"><a href="#%F0%9F%93%85+2023-02-12+sun+17%3A52">📅 2023-02-12 sun 17:52</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 1プレイヤーと 2プレイヤーのどちらも カードを置けなくなったら、どうすんだっけ?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 いっせー のー せっ! の掛け声で一緒に出すんじゃないの?」</p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://www.nintendo.co.jp/others/playing_cards/howtoplay/speed/index.html">遊びかた:スピード</a></p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 👆 手札から補充する、手札がなければ 場札から補充する、とあるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 じゃあ、どちらも置けなくなったら、以下のケースがあるわけだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 手札が残っている方は、手札の頂上から1枚 自動的に 出す」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 手札が残っていない方は、場札を1枚 手動的に選んで 出す」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 後出しが できるんじゃない?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 出さない、というケースもあるのでは?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 どちらかが カード出したら、残っている方は、3秒後に ピックアップしてる場札 勝手に出す、ということで いいのでは?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 カウントダウン 作んなきゃいけないわね」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 じゃあ、置く札がない状況、仮に <strong>ステイルメイト</strong>(Stalemate) とでも呼ぶとして、<br />
Stalemate かどうか判断する関数を1つ作ろうぜ?」</p>
<p>📅 2023-02-12 sun 18:07 ↑</p>
<p><a href="https://crieit.now.sh/upload_images/b64d921c905fa5b3d80f6fbdc1b331a063e8afaeb87bf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b64d921c905fa5b3d80f6fbdc1b331a063e8afaeb87bf.png?mw=700" alt="202302_unity_12-1821--player-select.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 その前にこの 画面サイズに関係なく ボタンサイズがある、という<br />
GUI なんとかならないの?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 画面サイズが縮んだのなら、ボタンも縮むべきだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/0fa06cd42b6a96be7c9d325dcbea96c263e8b08d18169.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0fa06cd42b6a96be7c9d325dcbea96c263e8b08d18169.png?mw=700" alt="202302_unity_12-1824--ui-layer-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 👆 UI レイヤーのこと よく分かってないのよね」</p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://docs.unity3d.com/ja/2020.3/Manual/HOWTO-UIMultiResolution.html">複数の解像度のための UI 設計</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 勉強しようぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 <strong>Canvas Scaler</strong> コンポーネントというものがあるらしい。なんだぜそれ?」</p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://docs.unity3d.com/ja/2023.1/Manual/script-CanvasScaler.html">Canvas Scaler</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 スクリプトなのかな?」</p>
<p><a href="https://crieit.now.sh/upload_images/fc234b56fd12ce567cb2d50c89c447e463e8b32c393e2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fc234b56fd12ce567cb2d50c89c447e463e8b32c393e2.png?mw=700" alt="202302_unity_12-1835--canvas-scaler-1.png" /></a></p>
<p>📅 2023-02-12 sun 18:35</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 追加しようと思ったけど、もう追加されてた……」</p>
<p><a href="https://crieit.now.sh/upload_images/1d609babc701100661b9d5e622e4462263e8b3c8770d3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1d609babc701100661b9d5e622e4462263e8b3c8770d3.png?mw=700" alt="202302_unity_12-1838--scale-with-screen-size-1.png" /></a></p>
<p>📅 2023-02-12 sun 18:39</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Scale with Screen Size</code> にしたら いいのかな?」</p>
<p><a href="https://crieit.now.sh/upload_images/091c39b5c84bb2b6ddeea074ee94e00263e8b4612bd12.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/091c39b5c84bb2b6ddeea074ee94e00263e8b4612bd12.png?mw=700" alt="202302_unity_12-1840--scale-with-screen-size-1.png" /></a></p>
<p>📅 2023-02-12 sun 18:42</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 とりあえず これで」</p>
<h2 id="ゲーム開始処理の変更"><a href="#%E3%82%B2%E3%83%BC%E3%83%A0%E9%96%8B%E5%A7%8B%E5%87%A6%E7%90%86%E3%81%AE%E5%A4%89%E6%9B%B4">ゲーム開始処理の変更</a></h2>
<p>📅 2023-02-12 sun 21:11</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ゲーム開始処理を ごっそり 変えたので説明する」</p>
<p><a href="https://crieit.now.sh/upload_images/db14f85afafb9e729ee13bdf3ab3003963e8d85354d18.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/db14f85afafb9e729ee13bdf3ab3003963e8d85354d18.png?mw=700" alt="202302_unity_12-2114--namespaces-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 大まかに、スクリプトを <code>ThinkingEngine</code> と <code>Vision</code> に分けることにする。<br />
<code>ThinkingEngine</code> というのは 画面なしで動くようなもので、<br />
<code>Vision</code> というのは 画面で動くようなゲームが入ってるところだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 その <code>Vision</code> の中は、さらに3つに分けることにする。<br />
<code>Input</code> というのは キーボードからの入力だな。<br />
<code>UserInterface</code> というのは、画面上のボタンとかだぜ。<br />
<code>World</code> は、まあ その他 ぐらいに思えだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/a1baf14cc65e410bc91d0d7211bb925963e8d94861c08.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a1baf14cc65e410bc91d0d7211bb925963e8d94861c08.png?mw=700" alt="202302_unity_12-2118--start-game-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 今までは 勝手にゲームが始まっていたが、<br />
<code>StartGame()</code> メソッドを呼び出すまで 始まらないように変更する」</p>
<p><a href="https://crieit.now.sh/upload_images/7929874c531f9d8737d7ae571172f92663e8d9ced7bec.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7929874c531f9d8737d7ae571172f92663e8d9ced7bec.png?mw=700" alt="202302_unity_12-2120--ui-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 じゃあ どこで始まるの? というと、<br />
ボタンを押したときに 始まるようにする。<br />
これらは <code>Assets.Scripts.Vision.UserInterface.Manager</code> クラスにまとめてある」</p>
<p><a href="https://crieit.now.sh/upload_images/668127cacbe38167a7afa54b308f1bd963e8dafbbe32f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/668127cacbe38167a7afa54b308f1bd963e8dafbbe32f.png?mw=700" alt="202302_unity_12-2125--on-click-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ボタンを押すと On Click() のリストに登録したメソッドが実行される仕組みは 覚えておいてくれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/a20cfc73c354dc80a7ce9e01c003cdb863e8dc14060d8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a20cfc73c354dc80a7ce9e01c003cdb863e8dc14060d8.png?mw=700" alt="202302_unity_12-2130--game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 開始時のカードも片づけたぜ」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1624749016222420993?s=20&t=99Y5KYaBck67kX1tB9qGQw">開発中画面</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 今日は ここまでだぜ」</p>
<p>📅 2023-02-12 sun 21:36 end</p>
<h1 id="📅2023-03-17 fri 21:00"><a href="#%F0%9F%93%852023-03-17+fri+21%3A00">📅2023-03-17 fri 21:00</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 おっ、1か月ぶりか。<br />
Unity の画面を見るのも嫌になってるが、<br />
既知の不具合を1つ 直そうぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/8d6cdae7f6cc77b0523831eee6efd16d641458da7041d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8d6cdae7f6cc77b0523831eee6efd16d641458da7041d.png?mw=700" alt="202303_unity_17-2109--input-1.png" /></a><br />
<a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 入力したことを そのまま実行されると<br />
おかしくなることがあるので、制約を付けたいんだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 場札が1枚のときは、左には場札は無いしな」</p>
<p><a href="https://crieit.now.sh/upload_images/5155d78be4152a279a1a32f181315d59641473f57a9ee.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5155d78be4152a279a1a32f181315d59641473f57a9ee.png?mw=700" alt="202303_unity_17-2305--constraint-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 行動に制約を付けると こんな感じだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 制約は そんなもんで いいんじゃないの?」</p>
<p><a href="https://crieit.now.sh/upload_images/f49c55cedf8ecf866bd9bfd7bf7ce9196414751f3c50b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f49c55cedf8ecf866bd9bfd7bf7ce9196414751f3c50b.png?mw=700" alt="202303_unity_17-2311--stalemate.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 👆 それより ステールメート(※置けるカードがない)したら どうすんの?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 カードを引きたくても、手札(自分の側に積んでいたカード)も 無くなってるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 スピードのルールかあ。調べるかだぜ」</p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1346665563">トランプ【スピード】のルールを教えてくだし。</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 せーの、で 場札の好きなカードを1枚 捨てれるみたいだな」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 今、ステールメートしてるかどうか判定するアルゴリズムを書いてくれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 大変なんで、また今度な」</p>
<h1 id="📅2023-03-18 sat 12:41 - Stalemate"><a href="#%F0%9F%93%852023-03-18+sat+12%3A41+-+Stalemate">📅2023-03-18 sat 12:41 - Stalemate</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 気分乗らないけど、<br />
ステールメートしてるかどうか 判定するアルゴリズムを考えるか……」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 メソッドのシグニチャーから 決めたらいいんじゃない?」</p>
<pre><code class="plaintext">入力:
1P の場札
2P の場札
右の台札
左の台札
出力:
Yes/No
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 まあ、こんなもんだろ。<br />
次は中身だな」</p>
<pre><code class="plaintext">置ける数の配列=[
(右札の台札の数+1ー1) mod 13,
(右札の台札の数ー1ー1) mod 13,
(左札の台札の数+1ー1) mod 13,
(左札の台札の数ー1ー1) mod 13]
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 👆 最小2つ~最大4つの数を、プレイヤーのどっちかが持ってれば 結果は No だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 1Pの場札、2Pの場札を 愚直に調べるしかないかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 場札は 100枚も無いでしょ。愚直で すぐよ」</p>
<p><a href="https://crieit.now.sh/upload_images/7d69bced9806f610741f86e812324478641539339b230.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7d69bced9806f610741f86e812324478641539339b230.png?mw=700" alt="202303_unity_18-1307--canPutToCenterStack-1.png" /></a></p>
<p><code>Assets/Scripts/ThinkingEngine/Model/LegalMove.cs</code>:</p>
<pre><code class="csharp">namespace Assets.Scripts.ThinkingEngine.Model
{
internal class LegalMove
{
// - メソッド
internal static bool CanPutToCenterStack(GameModel gameModel, int player, int place)
{
int index = gameModel.GetIndexOfFocusedCardOfPlayer(player);
if (index == -1)
{
return false;
}
IdOfPlayingCards topCard = gameModel.GetLastCardOfCenterStack(place);
if (topCard == IdOfPlayingCards.None)
{
return false;
}
var numberOfPickup = gameModel.GetCardsOfPlayerHand(player)[index].Number();
int numberOfTopCard = topCard.Number();
// とりあえず差分を取る。
// 負数が出ると、負数の剰余はプログラムによって結果が異なるので、面倒だ。
// 割る数を先に足しておけば、剰余をしても負数にはならない
int divisor = 13; // 法
int remainder = (numberOfTopCard - numberOfPickup + divisor) % divisor;
return remainder == 1 || remainder == divisor - 1;
}
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 台札に置けるか、というメソッドをもう作ってあった。これを使えばいいだけかも」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ使えだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/c3cb02dfbffe998f95a3dd10fc8a951964153b75b776f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c3cb02dfbffe998f95a3dd10fc8a951964153b75b776f.png?mw=700" alt="202303_unity_18-1317--inputManager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ステールメートの判定は、 インプット・マネージャーに書けばいいかな」</p>
<p><a href="https://crieit.now.sh/upload_images/f63fca79390797c934d930fd044157b464153c613c412.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f63fca79390797c934d930fd044157b464153c613c412.png?mw=700" alt="202303_unity_18-1321--stalemate.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>TODO</code> コメントを使って 日本語でプログラムのプレースホルダーを書いていくぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/8e69b82d6b3e26cea182e1ba958f4efb6415400faee2d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8e69b82d6b3e26cea182e1ba958f4efb6415400faee2d.png?mw=700" alt="202303_unity_18-1336--stalemate-1.png" /></a></p>
<p>📅 2023-03-18 sat 13:39</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 既存のコードと同じものを2回書くぐらいなら、共通化するぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 カウント・ダウン・タイマーという 新しい要素を 追加しないといけないわよ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 コルーチンで作れるかな? 大変そうだな……」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 手札があるときは、手札の天辺の札を取れよ。忘れるなよ」</p>
<h2 id="📅 2023-03-18 sat 18:10"><a href="#%F0%9F%93%85+2023-03-18+sat+18%3A10">📅 2023-03-18 sat 18:10</a></h2>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 開始と終了の位置を線形補間する <code>Lerp</code> はあるけど、<br />
カウントダウンして 時間が来たら 強制的にカードを台札に置くような<br />
仕掛けは 作ってないんだが」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 コルーチンを使えだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 カウントダウンが インプット・マネージャーの仕事とは思わん。<br />
ユーザー・インターフェース・マネージャーに カウントダウンをやらせて、<br />
インプット・マネーシャーから ユーザー・インターフェース・マネージャーへ依頼する形にしようかな」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 お互いにおけるカードがなくなったから、カードを置き直すの、名前 何かあるのかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 分かんないから 再開(Reopening)でいいんじゃないの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 じゃあ それで」</p>
<h2 id="コルーチン"><a href="#%E3%82%B3%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3">コルーチン</a></h2>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://shibuya24.info/entry/unity-coroutine">【Unity基礎】コルーチンの使い方と注意点まとめ徹底解説</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 復習しよ」</p>
<h2 id="ステールメート書き直し"><a href="#%E3%82%B9%E3%83%86%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%BC%E3%83%88%E6%9B%B8%E3%81%8D%E7%9B%B4%E3%81%97">ステールメート書き直し</a></h2>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 あれ、ステールメート判定 できてないぜ。<br />
持ってるカードだけ見て ステールメートを判定しちゃいけないんだ、<br />
場札を全部見ないといけないんだ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 書き直せだぜ」</p>
<h2 id="📅 2023-03-18 sat 20:05"><a href="#%F0%9F%93%85+2023-03-18+sat+20%3A05">📅 2023-03-18 sat 20:05</a></h2>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 プログラミングが大変になってきたので、<br />
改造するぜ」</p>
<p><code>Assets.Scripts.ThinkingEngine.Models.Player.cs</code> :</p>
<pre><code class="csharp">namespace Assets.Scripts.ThinkingEngine.Models
{
/// <summary>
/// プレイヤーの配列の添え字
///
/// - プレイヤー1 は 0
/// - プレイヤー2 は 1
/// </summary>
class Player
{
// - 演算子のオーバーロード
#region 演算子のオーバーロード(== と !=)
// 📖 [自作クラスの演算子をオーバーロードする](https://dobon.net/vb/dotnet/beginner/operator.html)
// 📖 [自作クラスのEqualsメソッドをオーバーライドして、等価の定義を変更する](https://dobon.net/vb/dotnet/beginner/equals.html)
public static bool operator ==(Player c1, Player c2)
{
// nullの確認(構造体のようにNULLにならない型では不要)
// 両方nullか(参照元が同じか)
// (c1 == c2)とすると、無限ループ
if (object.ReferenceEquals(c1, c2))
{
return true;
}
// どちらかがnullか
// (c1 == null)とすると、無限ループ
if (((object)c1 == null) || ((object)c2 == null))
{
return false;
}
return (c1.source == c2.source) && (c1.source == c2.source);
}
public static bool operator !=(Player c1, Player c2)
{
// (c1 != c2)とすると、無限ループ
return !(c1 == c2);
}
/// <summary>
/// objと自分自身が等価のときはtrueを返す
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(object obj)
{
//objがnullか、型が違うときは、等価でない
if (obj == null || this.GetType() != obj.GetType())
{
return false;
}
//この型が継承できないクラスや構造体であれば、次のようにできる
//if (!(obj is TestClass))
//Numberで比較する
Player c = (Player)obj;
return (this.source == c.source);
//または、
//return (this.Number.Equals(c.Number));
}
//Equalsがtrueを返すときに同じ値を返す
public override int GetHashCode()
{
return this.source;
}
#endregion
// - その他
internal Player(int source)
{
this.source = source;
}
// - フィールド
/// <summary>
/// 値
/// </summary>
int source;
// - プロパティー
/// <summary>
/// 整数型形式で取得
/// </summary>
internal int AsInt => source;
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 プレイヤーを int 型で表すのは 辛くなってきたので<br />
クラスを使って Player型 を作るぜ。<br />
C# に typedef は無い」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 勝手にしろだぜ」</p>
<p><code>Assets.Scripts.ThinkingEngine.Commons.cs</code> :</p>
<pre><code class="csharp">namespace Assets.Scripts.ThinkingEngine
{
using Assets.Scripts.ThinkingEngine.Models;
/// <summary>
/// よく使う不変値
/// </summary>
static class Commons
{
internal static readonly Player Player1 = new Player(0);
internal static readonly Player Player2 = new Player(1);
internal static readonly Player[] Players = new Player[]
{
Player1,
Player2,
};
}
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 よく使う値を 予め作っておくぜ」</p>
<h2 id="📅 2023-03-18 sat 22:45"><a href="#%F0%9F%93%85+2023-03-18+sat+22%3A45">📅 2023-03-18 sat 22:45</a></h2>
<p><code>Assets/Scripts/Vision/Input/Manager.cs</code> :</p>
<pre><code class="csharp"> // ステールメートしてるかどうかの判定
// ==================================
// ステールメートしているとき
bool isStalemate = true;
// 反例を探す
foreach (var playerObj in Commons.Players)
{
foreach (var centerStackPlace in Commons.CenterStacks)
{
var max = this.gameModel.GetCardsOfPlayerHand(playerObj).Count;
for (int i = 0; i < max; i++)
{
if (LegalMove.CanPutToCenterStack(
this.gameModel,
playerObj,
new HandCardIndex(i),
centerStackPlace))
{
isStalemate = false;
goto end_loop;
}
}
}
}
end_loop:
if (isStalemate)
{
// TODO ★ カウントダウン・タイマーを表示。0になったら、ピックアップ中の場札を強制的に台札へ置く
this.reopeningManager.DoIt();
}
</code></pre>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 コードの掲載は 省いていくが、雰囲気は こんな感じ」</p>
<p>📺 <a target="_blank" rel="nofollow noopener" href="https://twitter.com/muzudho1/status/1637103333709332481?s=20">開発中画面</a></p>
<p>📅 2023-03-18 sat 23:49</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 そのあと 大改造して カウントダウンは 付けたぜ。<br />
今日はここまで」</p>
<h1 id="📅 2023-03-19 sun 17:58"><a href="#%F0%9F%93%85+2023-03-19+sun+17%3A58">📅 2023-03-19 sun 17:58</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 Unity の顔を見るのも嫌になっているが 不具合の調査をするかだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 ゲームの結果を表示してくれだぜ。<br />
1Pの勝ち、2Pの勝ち、引き分け のいずれかだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 両プレイヤーが 同時に最後のカードを 捨てるの、<br />
何ミリ秒差まで 厳密に判定するの?<br />
一瞬でも速く置いた方が 勝ちなの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 レトロな 格闘ゲーマーは 1フレームの差を 文句言ってくるからな」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ 1フレームの差を区別しろだぜ。<br />
両者が 最後の1枚を残して ステールメートしてるときは 同時にカード捨てるから 引き分けになるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 カードを捨てた瞬間か、<br />
それとも カードを台札に置いた瞬間か、<br />
どっちで判定するんだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 カードを置いた瞬間よ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 カードを置いた瞬間って、どんな瞬間?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 台札の鉄板のカードに、場札が接した瞬間よ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 デジタルゲーなのに 判定は アナログ的なの つら」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 Unity は物理的な当たり判定を取れるのでは?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 物理演算を使うと、距離とか 速度とか 公平性 保たなくてはいけなくなって大変なので<br />
デジタルな判定にしたいぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 台札に投げたカードの モーションの終点で フラグ立てるか」</p>
<h1 id="📅 2023-03-22 wed 19:14"><a href="#%F0%9F%93%85+2023-03-22+wed+19%3A14">📅 2023-03-22 wed 19:14</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 これから 風呂入って ビール飲んで まだやる気があったら 開発するぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 開発ブログやる気無くなってるの わらう」</p>
<h1 id="📅 2023-03-23 thu 19:35"><a href="#%F0%9F%93%85+2023-03-23+thu+19%3A35">📅 2023-03-23 thu 19:35</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 はあ~ Unity の顔も見たくねー、起動だけ するか~」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 やる気がない時期を やりすごすのが 長く続けるには 重要なのよ」</p>
<p>📅 2023-03-23 thu 23:11</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ソースコードを掃除した。今日は終わり」</p>
<h1 id="📅 2023-03-25 sat 16:25"><a href="#%F0%9F%93%85+2023-03-25+sat+16%3A25">📅 2023-03-25 sat 16:25</a></h1>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 今日はプログラミングすんの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 待ってくれだぜ つら。<br />
ジュース飲んで 気分が上がってくれば プログラミングするぜ」</p>
<h1 id="📅 2023-03-26 sat 13:56"><a href="#%F0%9F%93%85+2023-03-26+sat+13%3A56">📅 2023-03-26 sat 13:56</a></h1>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 気分が乗ったら プログラミングするぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 起動する元気も大事だしな」</p>
<h1 id="// 書きかけ"><a href="#%2F%2F+%E6%9B%B8%E3%81%8D%E3%81%8B%E3%81%91">// 書きかけ</a></h1>
むずでょ
tag:crieit.net,2005:PublicArticle/18369
2023-01-17T23:44:33+09:00
2023-01-22T07:25:33+09:00
https://crieit.net/posts/Unity-63c6b45134197
Unityで〇×ゲームを作ろうぜ(^~^)?
<h1 id="教育目的"><a href="#%E6%95%99%E8%82%B2%E7%9B%AE%E7%9A%84">教育目的</a></h1>
<p>プログラミング・スキルの普及のために、 <strong>この記事の内容は 改変・転載許可</strong></p>
<p>成果物: 📖 <a target="_blank" rel="nofollow noopener" href="https://play.unity.com/mg/other/tic-tac-toe-19">Tic tac toe</a><br />
コード: 📖 <a target="_blank" rel="nofollow noopener" href="https://github.com/muzudho/Tic-Tac-Toe">Tic-Tac-Toe</a></p>
<h1 id="📅2023-01-17 tue"><a href="#%F0%9F%93%852023-01-17+tue">📅2023-01-17 tue</a></h1>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://diamond.jp/articles/-/293032">アマゾン創業者が部下に繰り返し続けた「過酷な一言」</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ジェフ・ペゾスは モックアップの時点で完成度高くないと 企画も通さないらしいぜ。迷惑だよな」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 どう迷惑を受けたんだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 モックアップ作りから妥協しない姿勢が Amazon の強さの秘訣だ、みたいな論調の記事を読むと<br />
だったら もう モックアップ作るの いいかな、 弱くていいや、 と なにもかも 嫌になってしまう」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 個人サークルの1人が言う モックアップ と、<br />
140万人ほどの社員がいる企業の社長が言う モックアップ を同じように扱おうとするのが 性格が意固地なのよ。<br />
モックアップに完成度を求めていないケースだってあるのだから、<br />
特定の社長に最適化せず もっと言葉を適当に使えばいいのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 これより Unity を使って 〇×ゲームの <strong>やっつけモックアップ</strong> を作る。<br />
今回の趣旨は 技術 を何も説明せず、 <strong>雰囲気</strong> で書く <strong>ヒカルの碁方式</strong> だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 Qiita と Zenn で規約違反になるから Crieit でやるのか」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 いや、思想違反」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 ガイドラインぐらい 程度は違えど どこにでもあるのだから 守ればいいのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/2e5165998982b193ab74bd431677b3c463c6786034a57.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2e5165998982b193ab74bd431677b3c463c6786034a57.png?mw=700" alt="202301_unity_17-1925-unity-hub.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これ、 Unity Hub (ユニティ ハブ)。<br />
なんか並んでる1つ1つは レッスンの残骸とか、 手指の練習の残骸とか、 まあゲーム1個分の何かだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 なるほど 画面を見せていくわけか YouTube でやれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 嫌だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/da79b837b2d1c27b0c12026ca61a4d2e63c67d1eddb14.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/da79b837b2d1c27b0c12026ca61a4d2e63c67d1eddb14.png?mw=700" alt="202301_unity_17-1948-unity-hub.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 最初は とにかく プロジェクト名 を付けろだぜ。<br />
偉いさんは SEO や name conventions を考えた いい感じの名前を 付けたいと考えるかもしれないが<br />
わたしの流儀は 『<strong>あの世に持っていけるものは何もなし</strong>』 だぜ。 ひねらず 付けて 進め」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 現世利益に興味を持てだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 墓碑銘は 『墓』 にしましょう」</p>
<p><a href="https://crieit.now.sh/upload_images/dca1d1612054eed72e65fd8edae4db9163c681aec2427.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dca1d1612054eed72e65fd8edae4db9163c681aec2427.png?mw=700" alt="202301_unity_17-2007-unity-editor-4k.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 プロジェクトを開くと Unity Editor(ユニティー・エディター)が出てくる。<br />
わたしは 4K(よんけー)ディスプレイ を使っているので 大きな添付画像になってしまうから、<br />
以降は 適当にウィンドウを縮めて スクリーンショットを貼っていくぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 そこらへんの You Tube で ゲーム開発動画が たくさんあるから 読者諸君は 詳しくは勝手にググれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/b1208b1930d629b7b0f52526f137768763c683190425b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b1208b1930d629b7b0f52526f137768763c683190425b.png?mw=700" alt="202301_unity_17-2013-unity-editor.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 〇×ゲーム作るんだったら 盤が要るだろ。 平面(へいめん;Plane プレーン)を置こうぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 ぜったい Unity Learn で 企画書を書けだの、設計を練れだの レッスン受けたのにな。<br />
プログラマー・スキル・レベル剥奪だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 設計を <strong>信じて</strong> ないのよ。 プロジェクトは <strong>崩壊</strong> すると思ってるから」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ お父んは何を信じて Unity Editor なんか開いたのか?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 あっ、そういえば 〇 も × も 素材が無いぜ!」</p>
<p><a href="https://crieit.now.sh/upload_images/56224887f1f14703631daf92c56c60c163c686aa966fd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/56224887f1f14703631daf92c56c60c163c686aa966fd.png?mw=700" alt="202301_unity_17-2029-paint.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 わたしには モデルを作るスキル無いので <strong>Windows Paint</strong> で描くぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 行き当たりばったりだな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <strong>行動してから考える人</strong> ですからね」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 お父んの頭の中に <strong>効率</strong> と <strong>戦略</strong> が無いことは 分かった」</p>
<p><a href="https://crieit.now.sh/upload_images/b245b1033bc447474657a73da8f0a3d063c689e834a76.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b245b1033bc447474657a73da8f0a3d063c689e834a76.png?mw=700" alt="202301_unity_17-2042-texture.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 画像を プレーンに ドラッグ&ドロップ すれば テクスチャーを貼るの完了だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 Unity、 3Dが得意なのに ペラペラの平面に Windows Paint の画像 貼り付けるの<br />
Unity の無駄遣いだよな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 まだ <strong>行動の途中</strong> で、 <strong>考える</strong> ところまで 行ってませんからね」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 そう言えば、盤に 黒くて太い線を引きたいけど、 黒い太線を引くのも めんどくさいんだよな。<br />
それに 盤のマスをクリックしたかどうか 範囲を調べるのも めんどくさい……」</p>
<p><a href="https://crieit.now.sh/upload_images/9421ea9d329c2b7c858cec945bf66a2463c68ea5f25ac.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9421ea9d329c2b7c858cec945bf66a2463c68ea5f25ac.png?mw=700" alt="202301_unity_17-2103-board.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 そこで プレーンを9枚 置いて、マスの代わりとしようぜ!」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 お父んの優先順位の中で、 <strong>アートワーク</strong> の順位は下の方にあることが分かった」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <strong>花より団子</strong> の人ですからね。 〇×ゲームができれば なんでもいいのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 しかし どういう感じにすりゃ 〇×ゲーム を作れるのか よく分からんな」</p>
<p><a href="https://crieit.now.sh/upload_images/e76e051e4ca0d6826bf887f00081995663c690e599bb2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e76e051e4ca0d6826bf887f00081995663c690e599bb2.png?mw=700" alt="202301_unity_17-2112-save.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ここで一旦 プロジェクトを保存して Unity Editor を終了するぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 考えるのをやめたか」</p>
<p><a href="https://crieit.now.sh/upload_images/78f8b0f0d241d331b0f871af138d71dd63c692607b16d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/78f8b0f0d241d331b0f871af138d71dd63c692607b16d.png?mw=700" alt="202301_unity_17-2118-git-hub.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 わたしの Git Hub を開くんだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 ソースを クラウドに保存するんだな」</p>
<p><a href="https://crieit.now.sh/upload_images/d7e1f433cec10e67a6fd6f7708ebb1fd63c695088d51d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d7e1f433cec10e67a6fd6f7708ebb1fd63c695088d51d.png?mw=700" alt="202301_unity_17-2130-git-hub.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 クラウド上に リポジトリを作るぜ。 リポジトリというのは ファイル置き場 ぐらいの意味だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/78c3a895040604584341ce5dea1c133f63c6958da4783.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/78c3a895040604584341ce5dea1c133f63c6958da4783.png?mw=700" alt="202301_unity_17-2132-git-hub.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 GitHub Desktop for Windows というデスクトップ・アプリケーションと連動するんで、<br />
ローカルPCの さっきの Tic-Tac-Toe のファイルを、<br />
いったんローカルPC側のリポジトリで コミットし、<br />
続いて クラウド上のリポジトリへ プッシュするぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 何を言っているか分からないが まあ がんばれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/cff3d25f89ac497217eb2149186843d063c696eab9243.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cff3d25f89ac497217eb2149186843d063c696eab9243.png?mw=700" alt="202301_unity_17-2138-git-hub.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 リモートに ファイルが置かれたな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 本当は <strong>コード・レビュー</strong> を入れて、コメントをちゃんと書いてコミットして使うものなんだけど、<br />
やらないのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 やらないだろうな」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ドカスカ プッシュしろだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 Git Hub にソースをプッシュしたから、<br />
ソースを壊してしまったときは それより前のバージョンへ 巻き戻すことが可能になったわね」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 適当に どこかに戻せれば 十分だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 <strong>戻してから考える</strong> んだろうなあ」</p>
<p><a href="https://crieit.now.sh/upload_images/36cbafb83b53d783dff08f1c43dd490063c699bc7af0c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/36cbafb83b53d783dff08f1c43dd490063c699bc7af0c.png?mw=700" alt="202301_unity_17-2148--script-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 マス(※英語でSquare スクウェア)をマウスでクリックしたときに 〇×を付けたいんだろ。<br />
とりあえず Square という名前で C#(しーしゃーぷ)スクリプトを作ろうぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 Git Hub で、いつでもリセットできるから お父んの <strong>とりあえず進もうぜ、困ったら戻ろうぜ法</strong> が完成だな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 頼りない名前の法だなあ」</p>
<p><a href="https://crieit.now.sh/upload_images/3fa88c8f92255224c570079d46754b4163c69b387964a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3fa88c8f92255224c570079d46754b4163c69b387964a.png?mw=700" alt="202301_unity_17-2156--visual-studio-2022.png" /></a></p>
<p>補足:📖<a target="_blank" rel="nofollow noopener" href="https://bluebirdofoz.hatenablog.com/entry/2021/08/06/224723">Unity 2020でスクリプトの日本語が文字化けするのを修正する</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これが Visual Studio 2022 (びじゅある すたじお にせんにじゅうに)というデスクトップ・アプリケーションだぜ。<br />
こんな画面出てきても、これから何かけばいいか分からないだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 何でも書いたらいいんじゃないか」</p>
<p><a href="https://crieit.now.sh/upload_images/24d07c88f1842294746d34bf1241343e63c69c0b46a09.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/24d07c88f1842294746d34bf1241343e63c69c0b46a09.png?mw=700" alt="202301_unity_17-2200--intellisense.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 そう!<br />
何もないところのうち いい感じのところに <code>mouse</code> と打鍵すれば、<br />
わたしが書きたいものを予測して候補が出てくる。 これが Visual Studio の利点である インテリセンス(IntelliSense) という AI だぜ。<br />
1990年代後半にはすでにあった」</p>
<p><a href="https://crieit.now.sh/upload_images/34f1000cfeb8c366f19f51b78d72ae7263c69cd4e183b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/34f1000cfeb8c366f19f51b78d72ae7263c69cd4e183b.png?mw=700" alt="202301_unity_17-2203--intellisense-and-tab-key.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 そしてその候補で合ってたら、キーボード上の <code>tab</code> キーを1回押せだぜ。<br />
スケルトン・コードを書いてくれる。<br />
スケルトンというのは、穴埋め文章の穴じゃない方だな」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 適当の達人だな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <strong>いい感じのところ</strong> がどこなのか説明してくれないから 真似するの無理よ」</p>
<p><a href="https://crieit.now.sh/upload_images/2cc0eda1e6415e062a66acb20dd3136563c69eac7f066.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2cc0eda1e6415e062a66acb20dd3136563c69eac7f066.png?mw=700" alt="202301_unity_17-2211--debug-log.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 何書けばいいか分からないから、とりあえず <code>Debug.Log("なんちゃら")</code> を書けだぜ。<br />
このテクは デバッグ・ライト(Debug write)と言う」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 <code>とりあえず</code> が多いな」</p>
<p><a href="https://crieit.now.sh/upload_images/75faac30c36ba4ba1c7bb68e4cd5e2bd63c69ff696edf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/75faac30c36ba4ba1c7bb68e4cd5e2bd63c69ff696edf.png?mw=700" alt="202301_unity_17-2216--attach-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 で、スクリプトは書いただけでは動かない。<br />
マス(※画面上では Square 0 ~ Square 8)というゲーム・オブジェクトに <code>Square</code> スクリプトを持たせる。<br />
この操作を <strong>アタッチ</strong> (Attach) と呼ぶ」</p>
<p><a href="https://crieit.now.sh/upload_images/bc791fb6d8c0f03cf281096e707aee3963c6a0e73c7bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc791fb6d8c0f03cf281096e707aee3963c6a0e73c7bc.png?mw=700" alt="202301_unity_17-2221--main-camera.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 カメラの位置も あんまりだったので、 Main Camera の位置を調整する」</p>
<p><a href="https://crieit.now.sh/upload_images/689215a1bd5999604abfd11ea9bfc47663c6a185f1a4f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/689215a1bd5999604abfd11ea9bfc47663c6a185f1a4f.png?mw=700" alt="202301_unity_17-2223--play-button-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ゲーム・ビューも好きなようにいじって、 Unity Editor の上の方に置いてある再生ボタンを押せだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/6382644361ffc4a7ca350aa1fab50dc663c6a238d65d8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6382644361ffc4a7ca350aa1fab50dc663c6a238d65d8.png?mw=700" alt="202301_unity_17-2225--game-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 するとゲーム画面になる。<br />
黄緑色のマスをクリックしたら、 Unity Editor の左下に 『マウスボタンを押しました』と出てきた。<br />
これで動作確認完了だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 マスがクリックできることまでは 分かったな。<br />
そこから どうするのか 分からんけど」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 クリックしたマスの上に <strong>〇のカード</strong> が飛んでくりゃ よくない?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ <strong>〇のカード</strong> 5枚、 <strong>×のカード</strong> 4枚を予め作っておけばいいのかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 めんどくさ……。 マスの表面のテクスチャーを貼り替えりゃよくないかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 あらゆる発想が めんどくささに 飲み込まれて 消えていくわね」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 お父ん ぜったい あらゆる企画マンと 会話 合わないよな」</p>
<p><a href="https://crieit.now.sh/upload_images/d4b0239491b633b45978aabcec182b2363c6a74939ebd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d4b0239491b633b45978aabcec182b2363c6a74939ebd.png?mw=700" alt="202301_unity_17-2247--game-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 とりあえず <code>GameManager</code> C#スクリプトをアタッチした <code>Game Manager</code> ゲーム・オブジェクトを作れだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/1a28ff9f8b864330aa2c0c1844d31bc463c6a959def75.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1a28ff9f8b864330aa2c0c1844d31bc463c6a959def75.png?mw=700" alt="202301_unity_17-2255--serialize-fields-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameManager</code> C#スクリプトの いい感じのところに、 いい感じに マテリアルを3つ書くと」</p>
<p><a href="https://crieit.now.sh/upload_images/2de173c976531d0d5cbd065508111dd463c6aaa6484d0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2de173c976531d0d5cbd065508111dd463c6aaa6484d0.png?mw=700" alt="202301_unity_17-2302--serialize-fields-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 マテリアルを ドラッグ&ドロップで 設定できる欄が できるから」</p>
<p><a href="https://crieit.now.sh/upload_images/78930db4c79978e8bdfd93c4288d523c63c6ab7a77387.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/78930db4c79978e8bdfd93c4288d523c63c6ab7a77387.png?mw=700" alt="202301_unity_17-2304--drag-and-drop-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 がんばって ドラッグ&ドロップ しろだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/53c01fd961d8da3ff7df5f03a0b95d4f63c6af8a7896d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/53c01fd961d8da3ff7df5f03a0b95d4f63c6af8a7896d.png?mw=700" alt="202301_unity_17-2323--remove-game-object.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Nought</code> ゲーム・オブジェクトと、 <code>Cross</code> ゲーム・オブジェクトは 結局使わないので 消せだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 行き当たりばったりの ひずみ ここに出るの わらう」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 バーチャル空間だから 無駄な発注を やりたい放題よ 徒労が増えるだけで」</p>
<p><a href="https://crieit.now.sh/upload_images/ec6c2c82bedb979dddb61d51a2d6262c63c6b10871287.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ec6c2c82bedb979dddb61d51a2d6262c63c6b10871287.png?mw=700" alt="202301_unity_17-2329--game-manager-script-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameObject</code> C#スクリプトに 実質5行ほど コードを書き足したぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/573b97fd7aa0321e4dcc7f9c1453660463c6b1a5dec95.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/573b97fd7aa0321e4dcc7f9c1453660463c6b1a5dec95.png?mw=700" alt="202301_unity_17-2331--square-script-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Square</code> C#スクリプトに 実質4行ほど コードを書き足したり、編集したりしたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 なんの説明もないところが 今回の記事の趣旨だな」</p>
<p><a href="https://crieit.now.sh/upload_images/b2527f32608c7e60fde65460925ede9363c6b2422a553.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b2527f32608c7e60fde65460925ede9363c6b2422a553.png?mw=700" alt="202301_unity_17-2335--game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 だが、もう ○、× を交互に置けるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/cb30c0bd6325ff2725fca14350817cb963c6b29c3e07a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cb30c0bd6325ff2725fca14350817cb963c6b29c3e07a.png?mw=700" alt="202301_unity_17-2336--illegal-move.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 👆 もう印を置いてあるところを またクリックして 印を変えることができるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 イリーガル・ムーブ(非合法手)のチェックはしてないからな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 しなきゃ いけなくない?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 プロフェッショナルなプログラマーなら 必ず 修正するし、<br />
レッスン中なら 不具合の修正は ほっといて 後回しにしろだぜ。<br />
不具合の修正は 気持ちが乗らないからな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 不具合の修正より、気持ちがノるか ノらないかが 優先されるのね」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 ぜったい わらう」</p>
<h1 id="📅2023-01-18 wed"><a href="#%F0%9F%93%852023-01-18+wed">📅2023-01-18 wed</a></h1>
<p><a href="https://crieit.now.sh/upload_images/2930527603b56f9501ba38fb6261523763c7cc6f9327f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2930527603b56f9501ba38fb6261523763c7cc6f9327f.png?mw=700" alt="202301_unity_18-1938--win.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 勝ったとき 『勝ち!』 って出てくれば 気持ちがノるだろ。<br />
まずは その前に 勝ったかどうか判定するプログラムを書こうぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 プログラムらしい話に進むな」</p>
<h1 id="📅2023-01-20 fri"><a href="#%F0%9F%93%852023-01-20+fri">📅2023-01-20 fri</a></h1>
<p><a href="https://crieit.now.sh/upload_images/58b88b80e68beab7957f71b1dfb4d09963ca6cacb9905.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/58b88b80e68beab7957f71b1dfb4d09963ca6cacb9905.png?mw=700" alt="202301_unity_20-1927--texts.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 テキストをまず作っておこうぜ。<br />
普段は非表示にしておいて、必要な時に表示すればいい」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 仕込みだな」</p>
<p><a href="https://crieit.now.sh/upload_images/453e3f50e25cc2cf71388449fffeb89863ca6e1758670.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/453e3f50e25cc2cf71388449fffeb89863ca6e1758670.png?mw=700" alt="202301_unity_20-1932--judge-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 勝敗判定を どこに どういう風に書けばいいのか分からない。<br />
分からなかったら <code>なんとかManager</code> C# スクリプトを作って、 <code>なんとか Manager</code> ゲーム・オブジェクトにアタッチすればいいぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 お父んは『いいぜ』と言うが、 ダメだったら戻ればいいスタイルだからな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 迷路をとりあえず進んでるだけよね」</p>
<p><a href="https://crieit.now.sh/upload_images/d49d8ec8fa095da5453453bc7350b1f063ca705abb1b9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d49d8ec8fa095da5453453bc7350b1f063ca705abb1b9.png?mw=700" alt="202301_unity_20-1942--position-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Position</code> (ポジション) C# スクリプトもいるかもしれない。スケルトンを置いておこう」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 要るか 要らないか 分からなくても スケルトンを置くのが お父んの開発スタイルだよな」</p>
<p><a href="https://crieit.now.sh/upload_images/ea0f4b5c750c6a4df951f955fb37922163ca73383e610.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ea0f4b5c750c6a4df951f955fb37922163ca73383e610.png?mw=700" alt="202301_unity_20-1954--piece-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Piece</code> (ピース;駒)イナム(enum;列挙)型も作っとこ。 あとで使うだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 どんどんタネを仕込んで あとで 組み合わせる やり方か」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 ちゃんと 組み合わさるか 事前に検討して 必要なものだけを洗い出すステップを やらないのよ、 ノらないから」</p>
<p><a href="https://crieit.now.sh/upload_images/023631a9ab938a649ad0429d6a39baf963ca7554bda5b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/023631a9ab938a649ad0429d6a39baf963ca7554bda5b.png?mw=700" alt="202301_unity_20-2003--position-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ポジションに <code>Piece</code> 型の配列を持たせようぜ。<br />
これ、 Unity Editor で いじれるようにしようかな、 <code>[SerializeField]</code> アノテーション付けたろ」</p>
<p><a href="https://crieit.now.sh/upload_images/252f0e41583f338fc7285b0add77b88363ca767936725.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/252f0e41583f338fc7285b0add77b88363ca767936725.png?mw=700" alt="202301_unity_20-2008--position-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 やっぱ <code>Position Manager</code> ゲーム・オブジェクトも作って <code>Position</code> C#スクリプトをアタッチしようぜ?<br />
盤を編集でけて お得だろ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 お得かどうかは関係ないんじゃないか? 損だったら戻ればいいのだから 進めば」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 最後に まとめ切れるかどうか 関係無いですからね、この開発手法」</p>
<p><a href="https://crieit.now.sh/upload_images/e59dd91012834bef3cf71adfa54745f363ca7e4bcd629.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e59dd91012834bef3cf71adfa54745f363ca7e4bcd629.png?mw=700" alt="202301_unity_20-2029--position-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Position は <code>Clear</code> 関数や、 <code>SetPiece</code> 関数を使うだろ。<br />
class の public 修飾子も消して internal アクセスにしておこうぜ。<br />
<code>Linq</code> は パフォーマンスが心配なんで使わないぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 それが 何かの説明は しないんだな」</p>
<p><a href="https://crieit.now.sh/upload_images/56780ac58daaed10cf8fbd182bf975ac63ca820f38da9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/56780ac58daaed10cf8fbd182bf975ac63ca820f38da9.png?mw=700" alt="202301_unity_20-2058--position-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameManager</code> C#スクリプトに入ってた <code>movesCount</code> フィールドは、 <code>Position</code> クラスにあった方がいいので 移動した。<br />
<code>MovesCount</code> アクセッサ―も追加したぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/8472827be429f7c7ffc143dcae62304363ca82eca337a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8472827be429f7c7ffc143dcae62304363ca82eca337a.png?mw=700" alt="202301_unity_20-2101--game-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>movesCount</code> フィールドを <code>Position</code> クラスに持っていかれた <code>GameManager</code> クラスの方には、<br />
<code>Position</code> インスタンスにアクセスできるように プロパティを用意し、参照箇所も <code>Position</code> プロパティに変更するぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 フーン」</p>
<p><a href="https://crieit.now.sh/upload_images/7e8098840e9502ddb11e5646e365036f63ca87381a010.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7e8098840e9502ddb11e5646e365036f63ca87381a010.png?mw=700" alt="202301_unity_20-2118--game-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Square 0</code> ゲーム・オブジェクトの <code>0</code> の部分だけ取るように 正規表現(せいきひょうげん;RegularExpression)を書き、<br />
Position インスタンスにセットするように書いてみた」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 へぇ」</p>
<p><a href="https://crieit.now.sh/upload_images/c083c8e49b3f50ffd18b3c5a5ec1deb563ca88abb236e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c083c8e49b3f50ffd18b3c5a5ec1deb563ca88abb236e.png?mw=700" alt="202301_unity_20-2124--game-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/964dc85dc239408d4a0659f38e97265f63ca88a20914c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/964dc85dc239408d4a0659f38e97265f63ca88a20914c.png?mw=700" alt="202301_unity_20-2126--game-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これで、マスをクリックすると、○と×が入っているのが分かるな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <code>Cross</code> (×)と <code>Nought</code> (○)が逆よ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ぬぎぎぎぎ!」</p>
<p><a href="https://crieit.now.sh/upload_images/f344f1f4be82d910dc0454a9c47e6fcf63ca8b9c02102.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f344f1f4be82d910dc0454a9c47e6fcf63ca8b9c02102.png?mw=700" alt="202301_unity_20-2138--increment-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 インクリメントは最後にやれだぜ!」</p>
<p><a href="https://crieit.now.sh/upload_images/ce8085b2de91764bfd51080dd49ddd2c63ca8de9f2a7f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ce8085b2de91764bfd51080dd49ddd2c63ca8de9f2a7f.png?mw=700" alt="202301_unity_20-2147--win-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Position</code> インスタンスが盤を表している。<br />
<code>Element 1</code> と <code>Element 4</code> と <code>Element 7</code> に <code>Nought</code> が入っていれば、3つの○が並んだということだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 タテ、ヨコ、ナナメに同じピースが3つ並んでいることを判定できる数式があるの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ○×ゲームぐらいの 盤サイズの小ささなら 全パターン網羅して ハードコーディングしたった方が早いぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/43cc4c9e0f2e90035b53dd2196093b5863ca91cb73814.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/43cc4c9e0f2e90035b53dd2196093b5863ca91cb73814.png?mw=700" alt="202301_unity_20-2205--getPiece-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Position</code> クラスに <code>GetPiece</code> メソッドが無いと 盤のマスを見れないので追加する」</p>
<p><a href="https://crieit.now.sh/upload_images/31de2697202386450ac4eabe458ab79f63ca9386479dd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31de2697202386450ac4eabe458ab79f63ca9386479dd.png?mw=700" alt="202301_unity_20-2212--winPattern-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 例えば 3つ並んだケースの一覧とか 要るだろ。<br />
要ると思ったものを 予め 作っておくんだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 要ると分かってから 作った方が良くないか?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 ノらないから そんなこと しないのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/01f51fc47fa0b9c43a35d149ff30087763ca9637d41df.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01f51fc47fa0b9c43a35d149ff30087763ca9637d41df.png?mw=700" alt="202301_unity_20-2224--gameResult-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 対局結果も要りそうだ。作っとこ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 この開発手法では 工数の見積もりを取れないのでは?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 設計してないんだから 見積もりがあるはずないじゃない」</p>
<p><a href="https://crieit.now.sh/upload_images/c922eaf9cf8969f362750b014da5bbe463ca99c66c6f4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c922eaf9cf8969f362750b014da5bbe463ca99c66c6f4.png?mw=700" alt="202301_unity_20-2239--judge-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 勝敗判定を書いている途中に思ったんだが、負けかどうかは判定してないな」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 じゃあ 『勝敗判定』ではなくて 『勝ったか判定』だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/efa76cffa229b0c955b3339c063b980e63ca9a7870fb7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/efa76cffa229b0c955b3339c063b980e63ca9a7870fb7.png?mw=700" alt="202301_unity_20-2242--game-results-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 対局結果から 負け を削除しとこ。<br />
<code>GameResult</code> も こっそり <code>GameResults</code> に変えた」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 勝ち しか無かったら、どっちが勝ったのか 分からなくない?」</p>
<p><a href="https://crieit.now.sh/upload_images/e38d41b0977e95fa77b09201bdc047d363ca9ba59be3d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e38d41b0977e95fa77b09201bdc047d363ca9ba59be3d.png?mw=700" alt="202301_unity_20-2247--nought-win-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 まさか <code>Lose</code> を使う必要がないとは 思わなかったぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 ダメだったら戻ればいい の現場だな」</p>
<p><a href="https://crieit.now.sh/upload_images/97f9d27dfc4306b493cca306fd3764e463ca9e7fbf504.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/97f9d27dfc4306b493cca306fd3764e463ca9e7fbf504.png?mw=700" alt="202301_unity_20-2259--judge-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>JudgeManager</code> で対局結果を見れたら デバッグが楽だと思ったから フィールドと プロパティ付けたろ。<br />
<code>winPatterns</code> も こっそり <code>static readonly</code> 付けたろ」</p>
<p><a href="https://crieit.now.sh/upload_images/2d95b91a7c98f4a9e2e41b73f98daa8e63ca9fc8d3c7b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2d95b91a7c98f4a9e2e41b73f98daa8e63ca9fc8d3c7b.png?mw=700" alt="202301_unity_20-2303--setup-judge-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 対局結果を返すのではなく、対局結果を フィールドに入れるように変更。<br />
名前も <code>DoJudge</code> から <code>SetupJudge</code> に変更」</p>
<p><a href="https://crieit.now.sh/upload_images/18436c094d87ab26624c5a191be8cb9a63caa24b83f92.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/18436c094d87ab26624c5a191be8cb9a63caa24b83f92.png?mw=700" alt="202301_unity_20-2313--game-manager-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameManager</code> クラスの中で <code>JudgeManager</code> インスタンスの <code>SetupJudge</code> メソッドを使ってみよう」</p>
<p><a href="https://crieit.now.sh/upload_images/fd84dfe1bd18626e80df82dede04376163caa3463b496.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fd84dfe1bd18626e80df82dede04376163caa3463b496.png?mw=700" alt="202301_unity_20-2318--game-result-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ちゃんと <code>Win</code> が入ってるな」</p>
<p><a href="https://crieit.now.sh/upload_images/0a2f8158bada9bd73f084948a5e8b6e663caa41acd392.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0a2f8158bada9bd73f084948a5e8b6e663caa41acd392.png?mw=700" alt="202301_unity_20-2323--draw-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 でも <code>Draw</code> 判定が 10手目にされたので 1 引いとこ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 10手目なんか 無いんだけどな」</p>
<p><a href="https://crieit.now.sh/upload_images/5f942bd0acf741f5c794a176c2c0d1e163caa4e697d35.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5f942bd0acf741f5c794a176c2c0d1e163caa4e697d35.png?mw=700" alt="202301_unity_20-2326--disable-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 対局結果のゲーム・オブジェクトのアクティベートのチェックを外して、存在していないことにしよ」</p>
<p><a href="https://crieit.now.sh/upload_images/eefdf7b664eaffd0cfcc579c1df18b2c63caaa83f0517.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/eefdf7b664eaffd0cfcc579c1df18b2c63caaa83f0517.png?mw=700" alt="202301_unity_20-2350--setActive-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 存在しないゲーム・オブジェクトだったら、 Unity は見つけられないので、<br />
<code>[SerializeField]</code> アノテーションを利用して ゲーム・オブジェクトにアクセスする仕組みを 仕込むぜ。<br />
ついでに <code>SetActive( )</code> メソッドを使って、ゲーム・オブジェクトのアクティベートのチェックを入れるコードも書いておくぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/b07ed7d1b7fdb61f7981e037b630889763caab93b1b6e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b07ed7d1b7fdb61f7981e037b630889763caab93b1b6e.png?mw=700" alt="202301_unity_20-2353--drag-and-drop-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ドラッグ&ドロップしておくぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/329d19ce582e5c2a630423b9b438e83763caabfa17794.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/329d19ce582e5c2a630423b9b438e83763caabfa17794.png?mw=700" alt="202301_unity_20-2357--draw.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 対局結果が出るようになったぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 配色わる」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 文字のような○×の上に 文字 出してるしな」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 他の 盤ゲームが 対局結果を どう表示しているか 見てこいだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/b4e9a03e8b2b92c2c6ac182fd0c7795d63cab0c74edd6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b4e9a03e8b2b92c2c6ac182fd0c7795d63cab0c74edd6.png?mw=700" alt="202301_unity_21-0018--front-cover.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 わたしに美術はできないので、終局時に 半透明のフロント・カバーが かかるようにしよう!」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 確かに お父んは 企画 通らなさそう」</p>
<p><a href="https://crieit.now.sh/upload_images/f92106e82b3b38ae3d71d8d5d7aa167d63cab2900a908.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f92106e82b3b38ae3d71d8d5d7aa167d63cab2900a908.png?mw=700" alt="202301_unity_21-0025--front-cover.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これで 十分 十分」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 ビデオゲームは 見た目のできが 内容のできだと 思われるのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ノらないところは やらないでおこうぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 他の人はむしろ 目に付く 見た目を いじりたがるんだけどな」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 次は リスタート・ボタン を付けようぜ?」</p>
<p>📅2023-01-21 sat 00:31 end</p>
<h1 id="📅2023-01-22 sun 01:34 start"><a href="#%F0%9F%93%852023-01-22+sun+01%3A34+start">📅2023-01-22 sun 01:34 start</a></h1>
<p><a href="https://crieit.now.sh/upload_images/78687b8432bea2b1de689b029c12b63963cc15a1e794d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/78687b8432bea2b1de689b029c12b63963cc15a1e794d.png?mw=700" alt="202301_unity_22-0139--button-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 2020年代の GUI というと Web クライアントや、 Windows デスクトップ・アプリケーションでは 進歩、淘汰の激戦区だが、<br />
Unity に付いてる GUI は 1990年代かな、というぐらいクラシックなものなので あまり気合を入れずに使うぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/50c1df4bf970fdd0d3c937f25efa6a3a63cc17061c2a3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/50c1df4bf970fdd0d3c937f25efa6a3a63cc17061c2a3.png?mw=700" alt="202301_unity_22-0149--restart-button.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 リスタート・ボタンの見た目は こんなんでいいんじゃないか?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 美術の欠如している わたしたちは これでいきましょう」</p>
<p><a href="https://crieit.now.sh/upload_images/d9e033a7f670c032b4b81c7f0c35a93e63cc18ed731c5.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d9e033a7f670c032b4b81c7f0c35a93e63cc18ed731c5.png?mw=700" alt="202301_unity_22-0153--judge-manager-clear-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>JudgeManager</code> に <code>Clear</code> メソッドを付けるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/6ddd934f79d571f7a04970139006e2e263cc1a13069dc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6ddd934f79d571f7a04970139006e2e263cc1a13069dc.png?mw=700" alt="202301_unity_22-0157--position-clear-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Position</code> の <code>Clear</code> メソッドで <code>moveCount</code> フィールドを ゼロ初期化してなかったので するぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 仕込みをしてるんだな」</p>
<p><a href="https://crieit.now.sh/upload_images/afded1cca00b5fb9e22b1de62444fbe463cc1b282c0ba.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/afded1cca00b5fb9e22b1de62444fbe463cc1b282c0ba.png?mw=700" alt="202301_unity_22-0203--game-manager-clear-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameManager</code> に <code>Clear</code> メソッドを付けるぜ。<br />
この中で <code>Position</code> インスタンスと、 <code>JudgeManager</code> インスタンスの <code>Clear</code> メソッドを呼び出すとともに、<br />
対局結果のテキストと、盤に被せた半透明の幕のアクティベートのチェックを外して、ゲーム中に存在しない扱いにするぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 また、 <code>Start</code> メソッドで <code>Clear</code> メソッドを呼び出した」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 それは要るのか?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 シーン・ビューで テキストの表示のアクティベートのチェックを外すの忘れたりしたまま リリース したくないだろ」</p>
<p><a href="https://crieit.now.sh/upload_images/75297f996e3c2b66b190d7b968f2deb163cc1d2fd0114.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/75297f996e3c2b66b190d7b968f2deb163cc1d2fd0114.png?mw=700" alt="202301_unity_22-0210--restart-button-event-listener-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ボタンを押したら、 <code>Game Manager</code> ゲーム・オブジェクトの持っている <code>GameManager</code> C#スクリプトの <code>Clear</code> メソッドが<br />
呼び出されるように マウス操作で紐づけるぜ。<br />
この技術の名前は イベント・リスナー(Event Listener)だぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/960ff4734ed2fa874c4cdf281482561963cc1f569021a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/960ff4734ed2fa874c4cdf281482561963cc1f569021a.png?mw=700" alt="202301_unity_22-0220--restart-button-activate-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 リスタート・ボタン自体のアクティベートのチェックを オン/オフする仕組みを忘れてた 追加しよ」</p>
<p><a href="https://crieit.now.sh/upload_images/cb9ad218d655d73225ba46413293bae063cc1fcf563a4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cb9ad218d655d73225ba46413293bae063cc1fcf563a4.png?mw=700" alt="202301_unity_22-0223--restart-button-attach-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 だんだん ごつく なってきたな」</p>
<p><a href="https://crieit.now.sh/upload_images/c5eda7ca58d37f30211ef5691b0570d263cc2049d4646.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c5eda7ca58d37f30211ef5691b0570d263cc2049d4646.png?mw=700" alt="202301_unity_22-0225--restart-button-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 でも リスタート・ボタンが出てきたぜ。押してみよ」</p>
<p><a href="https://crieit.now.sh/upload_images/ead782d753e02a782fb7211a04e5ce0f63cc20b97d0dc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ead782d753e02a782fb7211a04e5ce0f63cc20b97d0dc.png?mw=700" alt="202301_unity_22-0227--restart.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 👆 盤はクリアーされてないぜ? なぜだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 WPF (ダブリュー・ピー・エフ)の MVVM (エム・ブイ・ブイ・エム)の ViewModel (ビュー・モデル)に慣れた癖で忘れていたが、<br />
Unity では データをクリアーしても、 シーンは連動していないのだった」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 これは ゲーム・プログラミングなのよ。<br />
デスクトップ・アプリケーションのような 処理が重たい技術は 流行らないのよ」</p>
<p><a href="https://crieit.now.sh/upload_images/61794a1c8ab0302cca5de97aa854ca1a63cc23083bc03.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/61794a1c8ab0302cca5de97aa854ca1a63cc23083bc03.png?mw=700" alt="202301_unity_22-0237--square-texture-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 マスの材質を 緑色の素材に貼り替えたろ」</p>
<p><a href="https://crieit.now.sh/upload_images/321e17162027b27e8b09100960d878c463cc2377e299c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/321e17162027b27e8b09100960d878c463cc2377e299c.png?mw=700" alt="202301_unity_22-0239--game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 貼り替わったぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 これで ○×ゲームは 卒業かだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 まだ イリーガル・ムーブ を禁止していないわよ?」</p>
<p><a href="https://crieit.now.sh/upload_images/0f5381ee3c886ecac19851e6fbf3d06263cc287177e3f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0f5381ee3c886ecac19851e6fbf3d06263cc287177e3f.png?mw=700" alt="202301_unity_22-0255--static-validator-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 じゃあ バリデーター(Validator)を作ればいいだろ。<br />
そのマスに置けるかどうかだけ チェックすればいいのかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/92d5be737e7fabe80de4379cee1afe9863cc293aa5ac3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/92d5be737e7fabe80de4379cee1afe9863cc293aa5ac3.png?mw=700" alt="202301_unity_22-0303--square-number-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 あっ、 <code>Square 0</code> みたいなゲーム・オブジェクトの名前しか取れね。 <code>0</code> みたいなマス番号取れね」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 不便よねえ」</p>
<p><a href="https://crieit.now.sh/upload_images/1a0544f9a279f3230c1301fd39ab03e363cc2c2eefb05.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1a0544f9a279f3230c1301fd39ab03e363cc2c2eefb05.png?mw=700" alt="202301_unity_22-0316--static-helper-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 じゃあ ヘルパー関数 作ればいいんだぜ。<br />
<code>GameManager</code> で 似たようなコード前に作ったから 引っこ抜いて 共通利用できるようにするぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/25ab84d4d7a1a6cd3a9e83ddeaaab04763cc2cc39c532.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/25ab84d4d7a1a6cd3a9e83ddeaaab04763cc2cc39c532.png?mw=700" alt="202301_unity_22-0319--static-helper-using-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 既存のコードは見やすくなるし」</p>
<p><a href="https://crieit.now.sh/upload_images/dd6d8e90a9d3159a86525f8a8f0bcce163cc2d944a966.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dd6d8e90a9d3159a86525f8a8f0bcce163cc2d944a966.png?mw=700" alt="202301_unity_22-0322--validation-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 新しいコードは書きやすくなる」</p>
<p><a href="https://crieit.now.sh/upload_images/60fe586a47a2db0904567902a2c9be6563cc2e1851f76.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/60fe586a47a2db0904567902a2c9be6563cc2e1851f76.png?mw=700" alt="202301_unity_22-0325--validated.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これで 非合法手 は防げたんじゃないか?」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <code>Nought win</code> のあとに まだ <code>X</code> を置けるんじゃない?」</p>
<p><a href="https://crieit.now.sh/upload_images/45bc60ee82810b1689bd7db0acf8f17c63cc2eaa1ff2f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/45bc60ee82810b1689bd7db0acf8f17c63cc2eaa1ff2f.png?mw=700" alt="202301_unity_22-0327--front-cover-validated.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 半透明の青い膜が被っていて、 マスはクリックできないから<br />
対局終了後に マスをクリックすることは でけないぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 じゃあ いいかあ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 これで 完成か?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 コード・レビュー しようぜ?<br />
プログラミングの へたくそなところがある」</p>
<p><a href="https://crieit.now.sh/upload_images/93c46e9caa50384440e11f96be525a4863cc319c2e606.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/93c46e9caa50384440e11f96be525a4863cc319c2e606.png?mw=700" alt="202301_unity_22-0338--code-review-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 例えば 『駒を置く』は入力だが、 『対局結果を表示する』は出力だぜ。<br />
入力メソッドが 出力してるなんて <strong>イケてないぜ</strong>」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 判断基準は イケてるか イケてないか なのね」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 プログラマーの気分 を 重要視してるんだな。 その点では Ruby に似ているな。お父んのポリシーが 分かってきたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/dcf063f10bc127633a82b4ac518bdf9e63cc34196c725.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dcf063f10bc127633a82b4ac518bdf9e63cc34196c725.png?mw=700" alt="202301_unity_22-0338--code-review-2.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 『出力』の部分を <code>DoMove</code> メソッドから外に出したいが、<br />
<code>piece</code> 変数が <code>DoMove</code> メソッドに束縛されているから、 <code>piece</code> 変数を 自由変数に変える方法を考えようぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 なんだか分からないが 任せたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/c1d5e1b43dc8e561ee02ffb725bc0fab63cc35c039941.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c1d5e1b43dc8e561ee02ffb725bc0fab63cc35c039941.png?mw=700" alt="202301_unity_22-0356--turn-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Position</code> クラスに 手番(Turn)を持たせようぜ。<br />
初期値は <code>Nought</code>」</p>
<p><a href="https://crieit.now.sh/upload_images/195449b0412ed3ed8ed1bd073d34b7dd63cc382bb0e7f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/195449b0412ed3ed8ed1bd073d34b7dd63cc382bb0e7f.png?mw=700" alt="202301_unity_22-0407--next-turn-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 手番を追加する <code>NextTurn</code> メソッドもいるや。追加しとこ」</p>
<p><a href="https://crieit.now.sh/upload_images/1fa124b13275ff6cd3bd126bcad894f863cc3b47d88cc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1fa124b13275ff6cd3bd126bcad894f863cc3b47d88cc.png?mw=700" alt="202301_unity_22-0419--increment-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 インクリメントも <code>NextTurn</code> メソッドの中で やってまお。<br />
<code>MovesCount</code> プロパティーのセッター(set)も要らなくなったから、短く書いたろ」</p>
<p><a href="https://crieit.now.sh/upload_images/56a4e1c235b838654a76607f748e856463cc3c3fd58c8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/56a4e1c235b838654a76607f748e856463cc3c3fd58c8.png?mw=700" alt="202301_unity_22-0424--doMove-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これで <code>DoMove</code> の中から <code>piece</code> 変数が消えた。 代わりに <code>Position</code> に依存するようになったぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/469795d0c7599136285d74061502743a63cc3d9ab5433.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/469795d0c7599136285d74061502743a63cc3d9ab5433.png?mw=700" alt="202301_unity_22-0430--update-game-result-view-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 こうやって <code>UpdateGameResultView</code> メソッドに切り分けることがでけたな。<br />
しかし <code>DoMove</code> メソッドを実行すると <code>UpdateGameResultView</code> メソッドまで 実行されてしまうのは イケてないな」</p>
<p><a href="https://crieit.now.sh/upload_images/4f9dae601fd513d6b7b9fa01efc982b163cc3ed3d1db7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4f9dae601fd513d6b7b9fa01efc982b163cc3ed3d1db7.png?mw=700" alt="202301_unity_22-0435--increment-validation-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 あっ いけね!<br />
対局が終了しているときは <code>NextTurn</code> しないように バリデーション・チェックしようぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/cb10a1947cd056c2cd3508e5d97047c963cc43ad828ce.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cb10a1947cd056c2cd3508e5d97047c963cc43ad828ce.png?mw=700" alt="202301_unity_22-0455--setup-judge-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>JudgeManagement</code> クラスの <code>SetupJudge</code> メソッドを、<br />
変更があったかどうか返すように 変更するぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/77b0bce7e897089265c514e85b805a9b63cc459f0674d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/77b0bce7e897089265c514e85b805a9b63cc459f0674d.png?mw=700" alt="202301_unity_22-0501--dirty-judgement-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 判定に変更があれば <code>dirtyJudgement</code> フラグを立て、<br />
<code>dirtyJudgement</code> フラグが立っているときだけ <code>UpdateGameResultView</code> メソッドは働き、<br />
働いたら <code>dirtyJudgement</code> フラグは下ろす、という風に作るぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 めんどくさ」</p>
<p><a href="https://crieit.now.sh/upload_images/f05cfdfc9b70aeee067b451cbf2bd85063cc466561424.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f05cfdfc9b70aeee067b451cbf2bd85063cc466561424.png?mw=700" alt="202301_unity_22-0508--update-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これで <code>UpdateGameResultView</code> メソッドの呼び出しを<br />
<code>DoMove</code> メソッドの外に出して、<br />
<code>Update</code> メソッドの中へ 引っ越すことがでけたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e9d0130a57419ab5322235a11af424aa63cc47025acfa.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e9d0130a57419ab5322235a11af424aa63cc47025acfa.png?mw=700" alt="202301_unity_22-0511--game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 👆 そんなけ コードをいじっても ゲームは何にも変わらないじゃない。<br />
コードを イケてるようにすることに 何の意味があんの?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 ワザを安定して出せるようになると、<br />
もっと 大きなワザ を出せるようになる。大きなワザ を出せるようにするために コードを掃除してるんだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/2e593ba5feb02e0738cfa2fb4011953963cc4a0e8d1bb.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2e593ba5feb02e0738cfa2fb4011953963cc4a0e8d1bb.png?mw=700" alt="202301_unity_22-0523--clear-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 👆 <code>GameManager</code> クラスの <code>Clear</code> メソッドの中で 画面表示を切り替えているのは 掃除しないのかだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 する」</p>
<p><a href="https://crieit.now.sh/upload_images/88d97e1865734efba49ccdfa518874f963cc4b7c55a46.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/88d97e1865734efba49ccdfa518874f963cc4b7c55a46.png?mw=700" alt="202301_unity_22-0530--set-piece-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Position</code> クラスの <code>SetPiece</code> メソッドも、変更があったかどうか返すようにしようぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/e07525efd0469ebda5b7e6f539e0c0b463cc4e4c7c95e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e07525efd0469ebda5b7e6f539e0c0b463cc4e4c7c95e.png?mw=700" alt="202301_unity_22-0541--dirty-squares-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 マスをクリックして、絵柄に変化があったときだけ <code>dirtySquares</code> セットに マス番号を追加することにするぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/15a38f0fb40ec207b0a520bf537ec21e63cc51bc332de.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/15a38f0fb40ec207b0a520bf537ec21e63cc51bc332de.png?mw=700" alt="202301_unity_22-0553--update-square-view-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 これで <code>DoMove</code> メソッドの中から 表示をコントロールするコードは 消えてなくなっただろ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 入力メソッドの中では 出力はしないようにしたんだな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 <code>dirtyなんちゃら</code> フラグが 入力メソッドと 出力メソッドの 橋渡しをしているのね」</p>
<p><a href="https://crieit.now.sh/upload_images/a6fbbab7afa09885fd05604f9f33fed463cc5506f12e7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a6fbbab7afa09885fd05604f9f33fed463cc5506f12e7.png?mw=700" alt="202301_unity_22-0610--clear-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameManager</code> クラスの <code>Clear</code> メソッドの中にあったコードも、 <code>dirty</code> フラグを立てるだけで よくなったぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 これで 表示周りのコードの クリーンナップ は終わりか?」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 まだある」</p>
<p><a href="https://crieit.now.sh/upload_images/672ce92be3f8d4c0705ae7af00349f2163cc573604ecc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/672ce92be3f8d4c0705ae7af00349f2163cc573604ecc.png?mw=700" alt="202301_unity_22-0615--update-square-view-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameObject.Find</code> メソッドは 処理に時間がかかるらしい。<br />
できれば <code>Start</code> メソッドで1回使ったあとは 使わなくて済むようにしたいぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 やってくれだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/12dccad101ef2a1ddad99cb01eaf263c63cc596e3b9fc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/12dccad101ef2a1ddad99cb01eaf263c63cc596e3b9fc.png?mw=700" alt="202301_unity_22-0628--go-squares-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>GameManager</code> クラスの <code>Start</code> メソッドが呼び出された時点で、<code>GameObject.Find</code> を先にしてしまって、<br />
ゲーム・オブジェクトをメモリに入れておけばいいぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 他に どこを クリーンナップ するんだぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/2499ffd82d3fa1b280b726a28b989d2863cc5bc683af9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2499ffd82d3fa1b280b726a28b989d2863cc5bc683af9.png?mw=700" alt="202301_unity_22-0639--accessor-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 例えば <code>get</code> アクセッサ―で 変数をリターンしているだけのプロパティなんかは……」</p>
<p><a href="https://crieit.now.sh/upload_images/f48e3580044e3463bd047fb77d8aaebc63cc5c34246ca.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f48e3580044e3463bd047fb77d8aaebc63cc5c34246ca.png?mw=700" alt="202301_unity_22-0639--lambda-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ラムダ式と同じなんだったら、書き方が短いラムダ式にするとかかな。<br />
パフォーマンスに違いがでるのか 知らんけど」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 パフォーマンスの測定をするほどの 速度が必要なアプリケーションじゃないから<br />
ちょっとぐらいパフォーマンスが違っても 違いは分かんないわねえ」</p>
<p>📅2023-01-22 sun 06:45</p>
<p><a href="https://crieit.now.sh/upload_images/dd5c0611c4a2069bc403705dcec376d163cc5edf40669.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dd5c0611c4a2069bc403705dcec376d163cc5edf40669.png?mw=700" alt="202301_unity_22-0650--webgl.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 WebGL 形式で 実行ファイルを出力してみようぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/5820d70f390ed9efa99f7fc3170a006d63cc5f838f6f3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5820d70f390ed9efa99f7fc3170a006d63cc5f838f6f3.png?mw=700" alt="202301_unity_22-0655--live-server-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 Visual Studio Code に <code>Live Server</code> エクステンション入れてると ローカルWebサーバー起ちあがるんで、<br />
Tic Tac Toe の <code>index.html</code> を開いてみようぜ?」</p>
<p><a href="https://crieit.now.sh/upload_images/a02822505cb829b8b9e81b95a832c81663cc600399cb5.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a02822505cb829b8b9e81b95a832c81663cc600399cb5.png?mw=700" alt="202301_unity_22-0657--unity-webgl-player.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 開けたな」</p>
<p><a href="https://crieit.now.sh/upload_images/016f52d3015877c784babfdcf95c33e963cc603a15235.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/016f52d3015877c784babfdcf95c33e963cc603a15235.png?mw=700" alt="202301_unity_22-0659--nought-win.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 プレイできるぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 ○×ゲームできても ビデオゲームって感じ しないけどな」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 2か月 Unity Lesson でビギナーコースを受けて、○×ゲームを作るのに 3日間かかるようでは 気が遠くなるわよね」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 仕込みが なんにも無いからな。<br />
重要なのは 制作進行を覚えて 素材の発注を見積もることだぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31f0f35be3a4b6b05ce597c7aab702b763c675227892a.png?mw=700" alt="202108__character__12--ohkina-hiyoko-futsu2.png" /></a><br />
「 UI も タイトル画面も 何もかもがなくて ゲーム開発の全体像はまだ見えないわね」</p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 まあ、先に進もうぜ」</p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://play.unity.com/">Unity Play</a></p>
<p><a href="https://crieit.now.sh/upload_images/2e03353eda777c0aaef26bc50f2bc56563cc628e945c7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2e03353eda777c0aaef26bc50f2bc56563cc628e945c7.png?mw=700" alt="202301_unity_22-0708--unity-play.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 <code>Unity Play</code> という Web サイトがある」</p>
<p><a href="https://crieit.now.sh/upload_images/66f72f9e7f507940c520af0c6924c53563cc62df7e773.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/66f72f9e7f507940c520af0c6924c53563cc62df7e773.png?mw=700" alt="202301_unity_22-0710--unity-play-upload.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 ここには、作ったゲームをアップロードするページがある」</p>
<p><a href="https://crieit.now.sh/upload_images/8fea3b36e8b9abfe086af975a588a62d63cc636b45695.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8fea3b36e8b9abfe086af975a588a62d63cc636b45695.png?mw=700" alt="202301_unity_22-0711--game-file-1.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 というわけで、 WebGL のファイルが入ったフォルダーを <code>.zip</code> 圧縮し……」</p>
<p><a href="https://crieit.now.sh/upload_images/2ab88554a86131ecb1332bd9478ee12963cc64de36293.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2ab88554a86131ecb1332bd9478ee12963cc64de36293.png?mw=700" alt="202301_unity_22-0718--play-unity.png" /></a></p>
<p>📖 <a target="_blank" rel="nofollow noopener" href="https://play.unity.com/mg/other/tic-tac-toe-19">Tic tac toe</a></p>
<p><a href="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b53e954894672b36c716412a272826b63c674b756465.png?mw=700" alt="202101__character__31--ramen-tabero-futsu2.png" /></a><br />
「 👆 アップロード完了。 Play Unity に置いたぜ」</p>
<p><a href="https://crieit.now.sh/upload_images/8dac93438803f00459ce08cde74dcd2963cc658770762.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8dac93438803f00459ce08cde74dcd2963cc658770762.png?mw=700" alt="202301_unity_22-0721--play-unity-game.png" /></a></p>
<p><a href="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e846bc7782a0e037a1665e6b3d51b02463c6750a6308a.png?mw=700" alt="202101__character__28--kifuwarabe-futsu.png" /></a><br />
「 👆 まあ ○×ゲーム しかできないんだけどな」</p>
<p>📅2023-01-22 sun 07:22 end</p>
<p><おわり></p>
むずでょ
tag:crieit.net,2005:PublicArticle/16720
2021-03-06T10:10:58+09:00
2021-03-06T10:10:58+09:00
https://crieit.net/posts/Unity-6042d6a2eaa82
Unityで複数の入力方法に対応するタイピングゲームを作ろう
<h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2>
<p>はじめまして、情報系の大学に通っているプログラム初心者の大学生です。</p>
<p>2年前にゼミ内で小さなゲームジャムが開催され、タイピングゲームを作ることになったのですが、ネット上で紹介されている既存のタイピングゲームの制作方法では入力方法に以下のような問題があると思いました。</p>
<blockquote>
<p><strong>1. 単語を打つ手段があらかじめ決まっている。</strong><br />
例 : "し"と打つときに"si"と打たなければいけなく、"shi"には対応していない。</p>
<p><strong>2.単語を別々に入力できない。</strong><br />
例 : "ちゃ"と打つときに"ち"と"ゃ"を別々にタイプできない。</p>
</blockquote>
<p>そこで今回はどんな打ち方にも対応できるタイピングゲームの制作に挑戦してみました。<br />
この記事では仕組みとプログラムに関して紹介していきます、参考にしていただければ幸いです。</p>
<h2 id="参考にした作品"><a href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E4%BD%9C%E5%93%81">参考にした作品</a></h2>
<p>今回制作したプログラムでは「寿司打」のタイピングシステムを参考にしています。</p>
<blockquote>
<h5 id="寿司打"><a href="#%E5%AF%BF%E5%8F%B8%E6%89%93">寿司打</a></h5>
<p><a target="_blank" rel="nofollow noopener" href="http://typingx0.net/sushida/play.html">こちらからプレイできます。</a></p>
</blockquote>
<p>どのようなシステムかというと</p>
<blockquote>
<p><a href="https://crieit.now.sh/upload_images/fa30eaea18027ff67c2127f6331493a76041ad3275209.PNG" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fa30eaea18027ff67c2127f6331493a76041ad3275209.PNG?mw=700" alt="キャプチャ1.PNG" /></a><br />
ゲーム画面ではこのようにタイプする文字と入力方法が表示されています。<br />
<strong>この状態で"し"を"si"ではなく"shi"と入力しようとすると...</strong></p>
<p><a href="https://crieit.now.sh/upload_images/bebc0f0840b25025f197a22b24571bb26041ae559e71d.PNG" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bebc0f0840b25025f197a22b24571bb26041ae559e71d.PNG?mw=700" alt="キャプチャ3.PNG" /></a><br />
<strong>"sh"と入力した時点で1つ目の"し"の入力方法が"shi"に置き換わります。</strong><br />
(2つ目の"し"の入力方法は変わらず表示されている。)</p>
</blockquote>
<p>他にも</p>
<blockquote>
<p><a href="https://crieit.now.sh/upload_images/2f27d696448dc1a99860914e503c80d76041b0d905c92.PNG" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2f27d696448dc1a99860914e503c80d76041b0d905c92.PNG?mw=700" alt="キャプチャ4.PNG" /></a><br />
<strong>"ック"を入力する際に、"xtu"と"ku"で別々に入力しようとすると...</strong></p>
<p><a href="https://crieit.now.sh/upload_images/f414647101ae6ff6105459a3b582bd3b6041b26740466.PNG" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f414647101ae6ff6105459a3b582bd3b6041b26740466.PNG?mw=700" alt="キャプチャ5.PNG" /></a><br />
<strong>"xtu"の"x"を入力した時点で”ッ”と"ク"を別々と考えて入力方法を置き換えています。</strong></p>
</blockquote>
<h2 id="プログラム"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0">プログラム</a></h2>
<p>筆者なりに上記のシステムを再現しようとすると以下のようなプログラムになりました。</p>
<h3 id="Kanji.txt"><a href="#Kanji.txt">Kanji.txt</a></h3>
<blockquote>
<p>タイピングゲーム内で使う文章をそのまま入力します。<br />
一度のタイピングで入力する長さを決めて改行してください。</p>
</blockquote>
<pre><code>別に君を求めてないけど
横にいられると思いだす。
君のドルチェ&ガッパーナの
その香水のせいだよ。
</code></pre>
<h3 id="Japanese.txt"><a href="#Japanese.txt">Japanese.txt</a></h3>
<blockquote>
<p>Kanji.txtの内容を全てひらがなにして入力してください。</p>
</blockquote>
<pre><code>べつにきみをもとめてないけど
よこにいられるとおもいだす。
きみのどるちぇあんどがっぱーなの
そのこうすいのせいだよ。
</code></pre>
<h3 id="KanjiFuri.txt"><a href="#KanjiFuri.txt">KanjiFuri.txt</a></h3>
<blockquote>
<p>Kanji.txt内の文字をひらがなにした時、何文字になるかを入力してください(ひらがなの場合は1)</p>
</blockquote>
<pre><code>21212111111
211111121111
2111113111111
1122111112
</code></pre>
<h3 id="Dictionary.cs"><a href="#Dictionary.cs">Dictionary.cs</a></h3>
<blockquote>
<p>全ての入力方法を連想配列で整理しています。<br />
下の方にある関数はKeyかValueを渡すことで紐づけられた要素を全て取り出すことができます</p>
</blockquote>
<pre><code>using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dictionary : MonoBehaviour
{
//デフォルトの入力方法
public readonly Dictionary<string, string> dic = new Dictionary<string, string>() {
{"あ", "a"},{"い", "i"},{"う", "u"},{"え", "e"},{"お", "o"},
{"か", "ka"},{"き", "ki"},{"く", "ku"},{"け", "ke"},{"こ", "ko"},
{"さ", "sa"},{"し", "si"},{"す", "su"},{"せ", "se"},{"そ", "so"},
{"た", "ta"},{"ち", "ti"},{"つ", "tu"},{"て", "te"},{"と", "to"},
{"な", "na"},{"に", "ni"},{"ぬ", "nu"},{"ね", "ne"},{"の", "no"},
{"は", "ha"},{"ひ", "hi"},{"ふ", "hu"},{"へ", "he"},{"ほ", "ho"},
{"ま", "ma"},{"み", "mi"},{"む", "mu"},{"め", "me"},{"も", "mo"},
{"や", "ya"},{"ゆ", "yu"},{"よ", "yo"},
{"ら", "ra"},{"り", "ri"},{"る", "ru"},{"れ", "re"},{"ろ", "ro"},
{"わ", "wa"},{"を", "wo"},{"ん", "n"},
{"が", "ga"},{"ぎ", "gi"},{"ぐ", "gu"},{"げ", "ge"},{"ご", "go"},
{"ざ", "za"},{"じ", "zi"},{"ず", "zu"},{"ぜ", "ze"},{"ぞ", "zo"},
{"だ", "da"},{"ぢ", "di"},{"づ", "du"},{"で", "de"},{"ど", "do"},
{"ば", "ba"},{"び", "bi"},{"ぶ", "bu"},{"べ", "be"},{"ぼ", "bo"},
{"ぱ", "pa"},{"ぴ", "pi"},{"ぷ", "pu"},{"ぺ", "pe"},{"ぽ", "po"},
{"ぁ","xa" },{"ぃ","xi" },{"ぅ","xu" },{"ぇ","xe" },{"ぉ","xo" },
{"っ", "xtu"},
{"ゃ","xya" },{"ゅ","xyu" },{"ょ","xyo"},
{"きゃ","kya"},{"きぃ","kyi"},{"きゅ","kyu"},{"きぇ","kye"},{"きょ","kyo"},
{"しゃ","sya"},{"しぃ","syi"},{"しゅ","syu"},{"しぇ","she"},{"しょ","syo"},
{"ちゃ","tya"},{"ちぃ","tyi"},{"ちゅ","tyu"},{"ちぇ","tye"},{"ちょ","tyo"},
{"にゃ","nya"},{"にぃ","nyi"},{"にゅ","nyu"},{"にぇ","nye"},{"にょ","nyo"},
{"ひゃ","hya"},{"ひぃ","hyi"},{"ひゅ","hyu"},{"ひぇ","hye"},{"ひょ","hyo"},
{"みゃ","mya"},{"みぃ","myi"},{"みゅ","myu"},{"みぇ","mye"},{"みょ","myo"},
{"りゃ","rya"},{"りぃ","ryi"},{"りゅ","ryu"},{"りぇ","rye"},{"りょ","ryo"},
{"ぎゃ","gya"},{"ぎぃ","gyi"},{"ぎゅ","gyu"},{"ぎぇ","gye"},{"ぎょ","gyo"},
{"じゃ","zya"},{"じぃ","zhi"},{"じゅ","zyu"},{"じぇ","zye"},{"じょ","zyo"},
{"ぢゃ","dya"},{"ぢぃ","dyi"},{"ぢゅ","dyu"},{"ぢぇ","dye"},{"ぢょ","dyo"},
{"びゃ","bya"},{"びぃ","byi"},{"びゅ","byu"},{"びぇ","bye"},{"びょ","byo"},
{"てゃ","tha"},{"てぃ","thi"},{"てゅ","thu"},{"てぇ","the"},{"てょ","tho"},
{"うぁ","wha"},{"うぃ","whi"},{"うぇ","whe"},{"うぉ","who"},
{"でゃ","dha"},{"でぃ","dhi"},{"でゅ","dhu"},{"でぇ","dhe"},{"でょ","dho"},
{"くぁ","qa"},{"くぃ","qi"},{"くぇ","qe"},{"くぉ","qo"},
{"ふぁ","fa"},{"ふぃ","fi"},{"ふぇ","fe"},{"ふぉ","fo"},
{"ヴぁ","va"},{"ヴぃ","vi"},{"ヴ","vu"},{"ヴぇ","ve"},{"ヴぉ","vo"},
{"ぴゃ","pya"},{"ぴぃ","pyi"},{"ぴゅ","pyu"},{"ぴぇ","pye"},{"ぴょ","pyo"},
{"、","," },{"。","."},{"「","["},{"」","]"},
};
//デフォルトではない入力方法
public readonly Dictionary<string, string> Epicdic = new Dictionary<string, string>()
{
{"ca","か" },{"ci","し" },{"cu","く" },{"ce","せ" },{"co","こ" },
{"cha","ちゃ"},{"chi","ち"},{"chu","ちゅ"},{"che","ちぇ"},{"cho","ちょ"},
{"cya","ちゃ"},{"cyi","ちぃ"},{"cyu","ちゅ"},{"cye","ちぇ"},{"cyo","ちょ"},
{"fu","ふ"},
{"ja","じゃ"},{"ji","じ"},{"ju","じゅ"},{"je","じぇ"},{"jo","じょ"},
{"la","ぁ" },{"li","ぃ" },{"lu","ぅ" },{"le","ぇ" },{"lo","ぉ" },
{"lya","ゃ" },{"lyu","ゅ" },{"lyo","ょ" },
{"ltu", "っ"},
{"nn","ん" },
{"qu","く" },{"qyi","くぃ"},{"qye","くぇ"},
{"sha","しゃ" },{"shi","し"},{"shu","しゅ"},{"she","しぇ"},{"sho","しょ"},
{"tsu","つ"},
{"yi","い"},{"ye","え"},
};
//渡した要素と紐づいている要素をdicから探し、リストにして返します。
public KeyValuePair<string, string> SearchdicKey(string key)
{
var dicpair = new KeyValuePair<string, string>();
foreach (KeyValuePair<string, string> pair in dic)
{
if (key == pair.Key)
{
dicpair = pair;
}
}
return dicpair;
}
//渡した要素と紐づいている要素をdicから探し、リストにして返します。
public KeyValuePair<string, string> SearchdicValue(string value)
{
var dicpair = new KeyValuePair<string, string>();
foreach (KeyValuePair<string, string> pair in dic)
{
if (value == pair.Value)
{
dicpair = pair;
}
}
return dicpair;
}
//渡した要素と紐づいている要素を両方のdicから探し、リストにして返します。
public List<KeyValuePair<string, string>> SearchTotaldicKey(string key)
{
var dicpair = new List<KeyValuePair<string, string>>();
foreach (KeyValuePair<string, string> pair in Epicdic)
{
if (key == pair.Value)
{
dicpair.Add(new KeyValuePair<string, string>(pair.Value, pair.Key));
}
}
foreach (KeyValuePair<string, string> pair in dic)
{
if (key == pair.Key)
{
dicpair.Add(pair);
}
}
return dicpair;
}
//渡した要素と紐づいている要素を両方のdicから探し、リストにして返します。
public List<KeyValuePair<string, string>> SearchTotaldicValue(string value)
{
var dicpair = new List<KeyValuePair<string, string>>();
foreach (KeyValuePair<string, string> pair in Epicdic)
{
if (value == pair.Value)
{
dicpair.Add(pair);
}
}
foreach (KeyValuePair<string, string> pair in dic)
{
if (value == pair.Key)
{
dicpair.Add(new KeyValuePair<string, string>(pair.Value, pair.Key));
}
}
return dicpair;
}
}
</code></pre>
<h3 id="SetList.cs"><a href="#SetList.cs">SetList.cs</a></h3>
<blockquote>
<p>次にタイピングするKanjij.txtと同じ行にあるJapanese.txtとKanjiFuri.txtの文字列をSetLists()に渡し、それぞれを区分しながらListに要素を追加していきます。</p>
<p>・Japanese.txtは一度に入力可能でありながら、文字列が最長になるように区分し、FuriListに追加していきます。<br />
・KanjiFuri.txtは1つの数字ごとに文字列を区分しながらKanjiFuriListに追加していきます。<br />
・また、FuriListに要素を追加しながらDictionary.dicから入力方法を取得し、RomaListに追加していきます。</p>
</blockquote>
<pre><code>using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SetList : MonoBehaviour
{
private SetText ST;
private Dictionary Dic;
public List<string> RomaList;
public List<string> FuriList;
public List<int> KanjiFuriList;
void Awake()
{
ST = GetComponent<SetText>();
Dic = GetComponent<Dictionary>();
}
private string FuriStr = "";
private string RomaStr = "";
//FuriStrとRomaStrの内容をそれぞれのリストに入れて初期化する。
private void AddList()
{
FuriList.Add(FuriStr);
RomaList.Add(RomaStr);
FuriStr = "";
RomaStr = "";
}
//渡されたJapanese.txtの一行を一文字づつ仕分けるよう
public void SetLists(string Roma , string KanjiFuri)
{
for(int i = 0; i < Roma.Length - 1; i++)
{
var chr = Roma[i].ToString();
switch (chr)
{
case "っ":
FuriStr += chr;
if (i != Roma.Length - 1)
{
switch(Roma[i + 1].ToString())
{
case "あ":
case "い":
case "う":
case "え":
case "お":
case "な":
case "に":
case "ぬ":
case "ね":
case "の":
case "ん":
RomaStr += Dic.SearchdicKey(Roma[i + 1].ToString()).Value;
AddList();
break;
default:
RomaStr += Dic.SearchdicKey(Roma[i + 1].ToString()).Value.Substring(0,1);
break;
}
}
else
{
FuriStr += chr;
AddList();
}
break;
case "ぁ":
case "ぃ":
case "ぅ":
case "ぇ":
case "ぉ":
case "ゃ":
case "ゅ":
case "ょ":
if (i != 0 && FuriStr != "")
{
if (Dic.dic.ContainsKey(FuriStr + chr))
{
FuriStr += chr;
RomaStr += Dic.SearchdicKey(Roma[i - 1].ToString() + chr).Value;
AddList();
}
else
{
AddList();
FuriStr += chr;
RomaStr += Dic.SearchdicKey(chr).Value;
AddList();
}
}
else
{
FuriStr += chr;
RomaStr += Dic.SearchdicKey(chr).Value;
AddList();
}
break;
case "ん":
FuriStr += chr;
RomaStr += Dic.SearchdicKey(chr).Value;
if (i != Roma.Length - 1)
{
switch(Roma[i + 1].ToString())
{
case "あ":
case "い":
case "う":
case "え":
case "お":
case "な":
case "に":
case "ぬ":
case "ね":
case "の":
case "ん":
case "や":
case "ゆ":
case "よ":
case "ゃ":
case "ゅ":
case "ょ":
RomaStr += "n";
break;
}
}
else
{
RomaStr += "n";
}
AddList();
break;
default:
if (i != Roma.Length - 1)
{
switch (Roma[i + 1].ToString())
{
case "ぁ":
case "ぃ":
case "ぅ":
case "ぇ":
case "ぉ":
case "ゃ":
case "ゅ":
case "ょ":
FuriStr += chr;
break;
default:
FuriStr += chr;
RomaStr += Dic.SearchdicKey(chr).Value;
AddList();
break;
}
}
else
{
FuriStr += chr;
RomaStr += Dic.SearchdicKey(chr).Value;
AddList();
}
break;
}
}
int num = 0;
for(int i = 0; i < KanjiFuri.Length - 1; i++)
{
num += KanjiFuri[i] - '0';
KanjiFuriList.Add(num);
}
}
}
</code></pre>
<h3 id="SetText.cs"><a href="#SetText.cs">SetText.cs</a></h3>
<blockquote>
<p>txtファイルや表示中の文字列の行数、打ち終わった字数などを管理しています。</p>
</blockquote>
<pre><code>using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SetText : MonoBehaviour
{
private SetList SL;
private TypingSystem TS;
[SerializeField] private TextAsset Furigana = null; //ここにKanjiFuri.txtを入れる
[SerializeField] private TextAsset Hiragana = null; //ここにJapanese.txtを入れる
[SerializeField] private TextAsset Kanji = null; //ここにKanji.txtを入れる
[SerializeField] private List<string> FuriList = new List<string>();
[SerializeField] private List<string> HiraList = new List<string>();
[SerializeField] private List<string> KanjiList = new List<string>();
[SerializeField] private Text RomaText = null; //ここにKanjiFuri.txtの内容を表示するためのテキストを入れる
[SerializeField] private Text FuriText = null; //ここにJapanese.txtの内容を表示するためのテキストを入れる
[SerializeField] private Text KanjiText = null; //ここにKanji.txtの内容を表示するためのテキストを入れる
[SerializeField] private int ColumunNum = -1; //現在打っている文字列の行数、最初に+1するため最初は-1にする
private int SetColumunNum
{
get { return ColumunNum; }
set
{
ColumunNum = value;
SL.SetLists(HiraList[ColumunNum],FuriList[ColumunNum]);
KanjiProp = 0;
ListProp = 0;
FuriProp = 0;
RomaProp = 0;
}
}
public int Romanum { get; private set; }
public int Furinum { get; private set; }
public int Kanjinum { get; private set; }
public int Listnum { get; private set; }
//メインの文字の設定
private int KanjiProp
{
get { return Kanjinum; }
set
{
Kanjinum = value;
var kanjifuristr = "<color=\"red\">";
kanjifuristr += KanjiList[ColumunNum].Insert(Kanjinum, "</color>");
KanjiText.text = kanjifuristr;
}
}
//フリガナの文字の設定
private int FuriProp
{
get { return Furinum; }
set
{
Furinum = value;
var furistr = "<color=\"red\">";
furistr += HiraList[ColumunNum].Insert(Furinum, "</color>");
FuriText.text = furistr;
while (Furinum >= SL.KanjiFuriList[Kanjinum])
{
KanjiProp++;
}
}
}
//SetList.FuriListの何個目の要素を打っているか
private int ListProp
{
get { return Listnum; }
set
{
if(value == SL.FuriList.Count)
{
ResetText();
return;
}
else if(value != 0)
{
FuriProp += SL.FuriList[Listnum].Length;
}
Listnum = value;
}
}
//ローマ字の設定
public int RomaProp
{
get { return Romanum; }
set
{
Romanum = value;
if (Romanum == SL.RomaList[Listnum].Length)
{
ListProp++;
TS.ResetTypedStr();
RomaProp = 0;
}
else
{
var romastr = "<color=\"red\">";
for (int i = 0; i < SL.RomaList.Count; i++)
{
var str = SL.RomaList[i];
if (i != Listnum)
{
romastr += str;
}
else
{
romastr += str.Insert(Romanum, "</color>");
}
}
RomaText.text = romastr;
}
}
}
private void Start()
{
SL = GetComponent<SetList>();
TS = GetComponent<TypingSystem>();
SetStrList(Hiragana, HiraList);
SetStrList(Furigana, FuriList);
SetStrList(Kanji, KanjiList);
ResetText();
void SetStrList(TextAsset textAsset, List<string> list)
{
var array = textAsset.text.Split('\n');
list.AddRange(array);
}
}
//テキストを初期化する
private void ResetText()
{
SL.FuriList.Clear();
SL.RomaList.Clear();
SL.KanjiFuriList.Clear();
SetColumunNum++;
}
}
</code></pre>
<h3 id="TypingSystem.cs"><a href="#TypingSystem.cs">TypingSystem.cs</a></h3>
<blockquote>
<p>txtファイルや表示中の文字列の行数、打ち終わった字数などを管理しています。</p>
</blockquote>
<pre><code>using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TypingSystem : MonoBehaviour
{
private SetList SL;
private SetText ST;
private Dictionary Dic;
private string Typedstr;
public void ResetTypedStr()
{
Typedstr = "";
}
private void Awake()
{
ST = GetComponent<SetText>();
SL = GetComponent<SetList>();
Dic = GetComponent<Dictionary>();
}
string[] keys = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "-", ",",".","[","]"};
//keys内にあるキーを打った時
void Update()
{
foreach (string key in keys)
{
if (Input.GetKeyDown(key))
{
TypeJudge(key);
}
}
}
public void TypeJudge(string type)
{
//打っている途中の文字と現在打った文字をつなげる
var JudgeStr = Typedstr + type;
bool jud = false;
//打った文字が n で 前の文字が nn じゃない場合
if (type == "n" && SL.RomaList[ST.Listnum] == "n")
{
SL.RomaList[ST.Listnum] = "nn";
RightEnter();
return;
}
//正しく打てている場合
if (type == SL.RomaList[ST.Listnum][ST.RomaProp].ToString())
{
RightEnter();
}
else
{
//Dictionaryの中のEpicDic内の文字を打とうとしている場合
for (int i = SL.FuriList[ST.Listnum].Length; i != 0 && !jud ; i--)
{
var SearchStr = SL.FuriList[ST.Listnum].Substring(0,i);
if (i != 1 && SL.FuriList[ST.Listnum][0].ToString() == "っ")
{
SearchStr = SearchStr.Substring(1, SearchStr.Length-1);
}
var list = Dic.SearchTotaldicKey(SearchStr);
foreach (var d in list)
{
var MatchStr = "";
if (i != 1 && SL.FuriList[ST.Listnum][0].ToString() == "っ")
{
MatchStr += d.Value.Substring(0, 1);
}
if (JudgeStr.Length <= MatchStr.Length + d.Value.Length && !jud)
{
MatchStr += d.Value;
if (JudgeStr == MatchStr.Substring(0, JudgeStr.Length))
{
//print(MatchStr + "で見つかりました");
TypeMatch(i , MatchStr);
}
}
}
}
//該当した文字が無い場合(ミスタイプしている場合)
if(!jud)
{
MissEnter();
}
}
//EpicDic内にある文字が正しく打てている時に呼び出される
//打った文字とまだ打っていない文字を切り分ける作業をする
void TypeMatch(int num, string MatchStr)
{
jud = true;
var Furistr = SL.FuriList[ST.Listnum];
SL.FuriList[ST.Listnum] = Furistr.Substring(0, num);
SL.RomaList[ST.Listnum] = MatchStr;
if(Furistr.Length != num)
{
SL.FuriList.Insert(ST.Listnum + 1, Furistr.Substring(num));
SL.RomaList.Insert(ST.Listnum + 1, Dic.SearchdicKey(SL.FuriList[ST.Listnum + 1]).Value);
}
Typedstr = JudgeStr;
RightEnter();
}
//ミスタイプしたとき
void MissEnter()
{
print("ミスしました!");
}
//正しく打てているとき
void RightEnter()
{
Typedstr = JudgeStr;
ST.Romanum++;
}
}
}
</code></pre>
<h2 id="実際に動かしてみる"><a href="#%E5%AE%9F%E9%9A%9B%E3%81%AB%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">実際に動かしてみる</a></h2>
<p>上にあるプログラムを全て同じオブジェクトにアタッチし、以下の画像のように設定すると動きます。<br />
<a href="https://crieit.now.sh/upload_images/003fafc46d6d8a6b98c5c0b37c69efcc6042d4410d2b1.PNG" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/003fafc46d6d8a6b98c5c0b37c69efcc6042d4410d2b1.PNG?mw=700" alt="キャプチャ.PNG" /></a></p>
<h2 id="完成した作品"><a href="#%E5%AE%8C%E6%88%90%E3%81%97%E3%81%9F%E4%BD%9C%E5%93%81">完成した作品</a></h2>
<p>そしてこのプログラムを組み込んで実際に完成した作品がこちらになります。</p>
<blockquote>
<h5 id="ケロツグ -雨乞いタイピング-"><a href="#%E3%82%B1%E3%83%AD%E3%83%84%E3%82%B0+-%E9%9B%A8%E4%B9%9E%E3%81%84%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0-">ケロツグ -雨乞いタイピング-</a></h5>
<p><a target="_blank" rel="nofollow noopener" href="https://game.nicovideo.jp/atsumaru/games/gm13342">Webからのプレイはこちらから。</a><br />
<a target="_blank" rel="nofollow noopener" href="https://drive.google.com/drive/folders/1rJD0wXc3cIBas-bnDUSY_-UlANOCqGbo?usp=sharing">プロジェクトのダウンロードはこちらから</a></p>
</blockquote>
<p>芥川龍之介の「蛙」の文をひたすら打つタイピングゲームです。<br />
文字を打つたびに蛙が増えていき、正確なタイピングを続けると制限時間が増えたりします。</p>
<h2 id="最後に"><a href="#%E6%9C%80%E5%BE%8C%E3%81%AB">最後に</a></h2>
<p>作るのは苦戦しましたが内容は結構シンプルな構造になっていると思います。<br />
この方法で作っていると対応していないキーが出てくると思います。<br />
見つけた場合はDisctionary.csの方に書き足して頂けると対応されると思います。</p>
<p>最後まで読んでいただきありがとうございました。</p>
かの
tag:crieit.net,2005:PublicArticle/15062
2019-06-06T02:40:29+09:00
2019-06-06T02:42:32+09:00
https://crieit.net/posts/1-5cf7fe8d65c49
アニメーションについて1
<h2 id="前置き"><a href="#%E5%89%8D%E7%BD%AE%E3%81%8D">前置き</a></h2>
<p>Unityを触る上でアニメーションはとても大事。らしい。<br />
<strong>ま僕アニメーション部分担当した事ないですがw</strong><br />
なので先ずはアニメーションの基礎知識を学ぶのが必要らしいので↓のサンプルを元に勉強して行く。<br />
(動作させた動画も撮ったけどどこにあげていいものかよく分からんので一旦保留。)</p>
<h2 id="3DRunゲーム"><a href="#3DRun%E3%82%B2%E3%83%BC%E3%83%A0">3DRunゲーム</a></h2>
<p><a href="https://crieit.now.sh/upload_images/51c1291d585b4555565f2d721e894d975cf7f6d608113.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/51c1291d585b4555565f2d721e894d975cf7f6d608113.png?mw=700" alt="スクリーンショット 2019-06-06 1.56.00.png" /></a><br />
(これ画像サイズ調節できる機能ないんか・・?)</p>
<p>障害物をぴょんぴょん乗り越えて行くオートスクロール系の3Drun。<br />
これにはどんな技術が使われてるんだろうか。</p>
<h2 id="Unityアニメーション基礎知識"><a href="#Unity%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98">Unityアニメーション基礎知識</a></h2>
<h3 id="Mecanim(メカニム)"><a href="#Mecanim%EF%BC%88%E3%83%A1%E3%82%AB%E3%83%8B%E3%83%A0%EF%BC%89">Mecanim(メカニム)</a></h3>
<p>・UnityにはMecanimと呼ばれるアニメーションシステムがある。<br />
・Unity 4.0から導入されたアニメーションの機能。(ちなみに今はUnityの最新は2019)<br />
・これ、スクリプト書かずにアニメーションが作れる(!?)らしい。</p>
<h2 id="閑話"><a href="#%E9%96%91%E8%A9%B1">閑話</a></h2>
<p>という事でMecanimを利用する事でプログラマーに頼らずアニメーション担当のスタッフだけでアニメーション部分の作成が可能なのだ!素晴らしい。分担って最高。</p>
<p>という事で<strong>アニメーションについて</strong>では基本的にコードは書かず、<br />
Unityの機能Mecanimと仲良くなって行こうと思います。<br />
本格的にUnityのAnimetorコンポーネントとか触って行くのはまた次回。</p>
<p>Mecanimについての詳しい説明は<a target="_blank" rel="nofollow noopener" href="https://shade3d.jp/training/unity/tips_2.html">参考サイト</a>の方を見てください。ここに限らずググれば色々出てきます。多分触って覚えた方が分かりやすい感じですが。<br />
<strong>ってあれ?この参考サイトにアニメーションの作り方書いてある?w</strong></p>
<p>^o^・・・</p>
<p>ま、まぁ僕の方でもある程度掻い摘んで載せて行きます。<br />
了</p>
<h3 id="参考サイト"><a href="#%E5%8F%82%E8%80%83%E3%82%B5%E3%82%A4%E3%83%88">参考サイト</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://shade3d.jp/training/unity/tips_2.html">Mecanimについて</a></p>
じょんむる
tag:crieit.net,2005:PublicArticle/15060
2019-06-05T02:03:50+09:00
2019-06-05T02:14:48+09:00
https://crieit.net/posts/Unity-5cf6a4765192f
Unityでゲーム作る(方針のみ)
<h2 id="Unityでゲーム作りたい"><a href="#Unity%E3%81%A7%E3%82%B2%E3%83%BC%E3%83%A0%E4%BD%9C%E3%82%8A%E3%81%9F%E3%81%84">Unityでゲーム作りたい</a></h2>
<p>「ゲーム作るかー」と思ってても中々やらんし、ゲーム案件最近触ってないんで勉強がてらやっていきます。<br />
先ずは記事だけ。明日から触って行く。<br />
暇があったら別記事でhtml5ゲームの方も作ります。今はunity。</p>
<h2 id="技術とか知見になる予定のもの"><a href="#%E6%8A%80%E8%A1%93%E3%81%A8%E3%81%8B%E7%9F%A5%E8%A6%8B%E3%81%AB%E3%81%AA%E3%82%8B%E4%BA%88%E5%AE%9A%E3%81%AE%E3%82%82%E3%81%AE">技術とか知見になる予定のもの</a></h2>
<ul>
<li>Unity</li>
<li>UniRx</li>
<li>2D/3D</li>
<li>AR/VR</li>
</ul>
<h2 id="閑話"><a href="#%E9%96%91%E8%A9%B1">閑話</a></h2>
<blockquote>
<p><strong>俺の考えてるゲーム絶対面白いのに作る時間ないが?</strong><br />
<strong>作り方わからんが?</strong></p>
</blockquote>
<p>と多少プログラム触ってきたけど「おし、作るか!」から「はい完成!」とはいかないゲーム。<br />
WebGL?iOS?Android?Steam?とかプラットフォーム選別から始めちゃうと「あ、だり」となってやらない事も多い。<br />
<strong>「Unityのチュートリアル一通りやったぞwふんw」</strong><br />
って人には不要な記事かもしれない。</p>
<p>基本参考書の順番で作って行く。<br />
2Dアクションゲームが本当は作りたいけど参考書の順番で作って行く。</p>
<h2 id="参考書"><a href="#%E5%8F%82%E8%80%83%E6%9B%B8">参考書</a></h2>
<p><a target="_blank" rel="nofollow noopener" href="https://www.borndigital.co.jp/book/6633.html">Unityゲーム プログラミング・バイブル</a></p>
じょんむる