- 運営しているクリエイター
#Unityゲーム開発
[Unity Blocks]作ってみたのまとめ
UnityでBlocksというゲームを作りましたって話のまとめ
コード
https://github.com/ktokTs/Blocks/tree/main
なぜつくったか以前実家に帰ったときに家族でやったゲームです。ちょうどそのときぐらいにモンテカルロ法を使ったCPUの実装を知りました。Blocksでもなんとかできるのでは?と思って始めました。
作り始めのとき基本題材はUnityでBloc
[Unity Blocks 14]シミュ―レーションを軽くした結果
モンテカルロ法の処理を軽くするGetAllInstructionsの処理を軽くするために、反転、回転しても形状が変わらないピースの場合はスキップするようにしました。(正方形のピースは回転した場合の判定は回転前と変わらないみたいなところ)
もちろんピースの使用状況にもよりますが、平均して3sぐらいかかっていた部分は1sぐらいになりました。ですが、ゲーム最後までこの関数を使うにはかなりきつそうです。
[Unity Blocks 13]もう少し考えておくCPUを作る
次はランダムにピースを置いている部分をもう少し考えて置くようにしてみます。(さすがにスクリプト全部書けなくなった)
今回は二つの処理を追加してみます。
軽い処理と重い処理を使い分けてより良い場所にピースを置けるようにします。
結構スクリプトを変えました前回との変更点として、ボードやピースの情報の複製が必要になってきました。
Boardクラスにコピーコンストラクタを実装するだけでよいかと思いき
[Unity Blocks 12]ランダムにピースを置く
次にピースがこれ以上置けるか、置けないかの判定をし、どこにどのピースがどの向きで置けるかの情報リストを取得、ランダムに実行をしていきます。
置けるピースをとりあえず全探索するやることとしてはまず、ボードの全ての点において、順に各ピースを当てはめることができるかを見ていく、全探索でやっていきます。
各ピースを当てはめていきますが、本当に置いてしまったり、試している途中でピースの回転があっても面倒
[Unity Blocks 11]ブロックスのルールに則ってピースを置く。反転・回転を実装する
次はブロックスのルールである、「ピースの辺同士が接触してはいけない」「頂点のどこかが自分のピースと接していなければならない」部分を実装します。
ボードのスクリプトに追加するBoardのSetPieceでの確認事項を増やす形にしています。
using System.Collections;using System.Collections.Generic;using UnityEngine;pub
[Unity Blocks 10]ボード上に重ならないようにピースを置く
視覚的に好きなピースをボードに置くことができたので、ピースが重なる場合は置けないようにしたいと思います。
ボード用のスクリプトを作成する14×14のintの2重配列をボードに見立てていきます。全ての位置を0に初期化しておき、ピースを置いたときにその場所の値をプレイヤー番号にします。
もしピースを置こうとしている場所の値が0でなければそこにはピースが置かれており、もうピースは置けないという感じで
[Unity Blocks 8]ピースの形をプログラムに記憶させる
一旦スクリプトによって置きたい場所にピースを置くことができました。
後はルールに則ってピースを置けるようにします。
基本的にはピースの位置関係からどこに置けるかを判定するのではなく、どこにどのピースを置いたかをプログラムで記憶し、判定していきます。その方がバグも少ないと思っています。
ピースの形をプログラムに記憶させる各ピースはスクリプトを持っている設計にします。また、そのスクリプトの中にピ
[Unity Blocks 6]ピースの色を変える
二人のプレイヤーに合わせてピースの色を2種類に変えたいと思います。
2種類の色を扱うには2種類のマテリアルを使用する必要があります。まずはマテリアルを2種類作ります。
マテリアルを作る作るマテリアルは
透明な赤色、青色を作ります。
赤色のマテリアルの設定です。
Rendering ModeはFade、ソースはAlbedo Alphaにしておきます。色がそれっぽい。色の設定は
アルファ値(
[Unity Blocks 5]プレハブを作る
ブロックスのピースは小さなピースがつながったものがあります。
それらを作るため、プレハブを作ります。
プレハブとはプレハブはざっくりいうと、いくつかのオブジェクトの集まりや細かく設定したオブジェクトを1つのオブジェクトとして扱うものです。
例えばメッセージウインドウとして装飾の凝ったウインドウを一度作成してプレハブ化してしまえば、以降そのプレハブを複製するだけで良くなります。また、プレハブの
[Unity Blocks 3]ポインターとなる画像を置く
(スクリプトのために)ピースをおくポインターをつくるどこの位置を選択しているかを分かりやすくするために、ドットの画像を作ります。
この画像を使っています。
黒点以外は透明にしています。
Imgのフォルダーを作成して保存しておきます。
平面を作成し、その平面に画像をドラッグ&ドロップすると、平面の色が変わり、Imgフォルダー配下にMaterialsフォルダーができると思います。しかし、今のと
[Unity Blocks 1]Unityでボードゲームを作ってCPUを動かす[未完成、いろいろ変わるかも]
はじめにブロックスってゲームをUnityで作ります。
ついでにCPUみたいなものも実装します。
簡単なブログみたいな扱いのつもりですが、初めてUnityを使う人にも何となく分かるような説明を心がけていきます。
(作りながら書いているので、ちょこちょこ時間軸が飛んでるかもしれないです。)
ルール
今回は2人プレイのルールで作っていきます。ピースは全21ピース。盤面は14×14です。
Unit