マガジンのカバー画像

[Unity Blocks]UnityでBlocks作った

15
UnityでBlocksを作ったときの記事です。 コード https://github.com/ktokTs/Blocks/tree/main
運営しているクリエイター

記事一覧

[Unity Blocks]作ってみたのまとめ

[Unity Blocks]作ってみたのまとめ

UnityでBlocksというゲームを作りましたって話のまとめ

コード
https://github.com/ktokTs/Blocks/tree/main

なぜつくったか以前実家に帰ったときに家族でやったゲームです。ちょうどそのときぐらいにモンテカルロ法を使ったCPUの実装を知りました。Blocksでもなんとかできるのでは?と思って始めました。

作り始めのとき基本題材はUnityでBloc

もっとみる
[Unity Blocks 14]シミュ―レーションを軽くした結果

[Unity Blocks 14]シミュ―レーションを軽くした結果

モンテカルロ法の処理を軽くするGetAllInstructionsの処理を軽くするために、反転、回転しても形状が変わらないピースの場合はスキップするようにしました。(正方形のピースは回転した場合の判定は回転前と変わらないみたいなところ)

もちろんピースの使用状況にもよりますが、平均して3sぐらいかかっていた部分は1sぐらいになりました。ですが、ゲーム最後までこの関数を使うにはかなりきつそうです。

もっとみる
[Unity Blocks 13]もう少し考えておくCPUを作る

[Unity Blocks 13]もう少し考えておくCPUを作る

次はランダムにピースを置いている部分をもう少し考えて置くようにしてみます。(さすがにスクリプト全部書けなくなった)

今回は二つの処理を追加してみます。
軽い処理と重い処理を使い分けてより良い場所にピースを置けるようにします。

結構スクリプトを変えました前回との変更点として、ボードやピースの情報の複製が必要になってきました。

Boardクラスにコピーコンストラクタを実装するだけでよいかと思いき

もっとみる
[Unity Blocks 12]ランダムにピースを置く

[Unity Blocks 12]ランダムにピースを置く

次にピースがこれ以上置けるか、置けないかの判定をし、どこにどのピースがどの向きで置けるかの情報リストを取得、ランダムに実行をしていきます。

置けるピースをとりあえず全探索するやることとしてはまず、ボードの全ての点において、順に各ピースを当てはめることができるかを見ていく、全探索でやっていきます。

各ピースを当てはめていきますが、本当に置いてしまったり、試している途中でピースの回転があっても面倒

もっとみる
[Unity Blocks 11]ブロックスのルールに則ってピースを置く。反転・回転を実装する

[Unity Blocks 11]ブロックスのルールに則ってピースを置く。反転・回転を実装する

次はブロックスのルールである、「ピースの辺同士が接触してはいけない」「頂点のどこかが自分のピースと接していなければならない」部分を実装します。

ボードのスクリプトに追加するBoardのSetPieceでの確認事項を増やす形にしています。

using System.Collections;using System.Collections.Generic;using UnityEngine;pub

もっとみる
[Unity Blocks 10]ボード上に重ならないようにピースを置く

[Unity Blocks 10]ボード上に重ならないようにピースを置く

視覚的に好きなピースをボードに置くことができたので、ピースが重なる場合は置けないようにしたいと思います。

ボード用のスクリプトを作成する14×14のintの2重配列をボードに見立てていきます。全ての位置を0に初期化しておき、ピースを置いたときにその場所の値をプレイヤー番号にします。

もしピースを置こうとしている場所の値が0でなければそこにはピースが置かれており、もうピースは置けないという感じで

もっとみる
[Unity Blocks 9]任意のピースをおけるようにする

[Unity Blocks 9]任意のピースをおけるようにする

次に様々なピースをボードにおけるようにしていきます。

スクリプトを改良する前回ドットのスクリプトを改良してピースのコントローラーとします。

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class PieceController :

もっとみる
[Unity Blocks 8]ピースの形をプログラムに記憶させる

[Unity Blocks 8]ピースの形をプログラムに記憶させる

一旦スクリプトによって置きたい場所にピースを置くことができました。

後はルールに則ってピースを置けるようにします。

基本的にはピースの位置関係からどこに置けるかを判定するのではなく、どこにどのピースを置いたかをプログラムで記憶し、判定していきます。その方がバグも少ないと思っています。

ピースの形をプログラムに記憶させる各ピースはスクリプトを持っている設計にします。また、そのスクリプトの中にピ

もっとみる
[Unity Blocks 7]RigidBodyを必要最低限の設定にする

[Unity Blocks 7]RigidBodyを必要最低限の設定にする

ゲームに要らない物理法則常にゲームのオブジェクトは完全に物理に則った動きをする必要はありません。

今回で言えば、ピースに回転がある必要はありませんし、衝突判定も完全にピースの形をしていなくても、とりあえずボードにのればどんな形でもかまいません。必要最低限の動きができることを目標にして設定しておくと、バグっぽい動きをなくすことができます。(メッシュコライダー同士が重なってるとガクガクするような動き

もっとみる
[Unity Blocks 6]ピースの色を変える

[Unity Blocks 6]ピースの色を変える

二人のプレイヤーに合わせてピースの色を2種類に変えたいと思います。

2種類の色を扱うには2種類のマテリアルを使用する必要があります。まずはマテリアルを2種類作ります。

マテリアルを作る作るマテリアルは
透明な赤色、青色を作ります。

赤色のマテリアルの設定です。

Rendering ModeはFade、ソースはAlbedo Alphaにしておきます。色がそれっぽい。色の設定は

アルファ値(

もっとみる
[Unity Blocks 5]プレハブを作る

[Unity Blocks 5]プレハブを作る

ブロックスのピースは小さなピースがつながったものがあります。

それらを作るため、プレハブを作ります。

プレハブとはプレハブはざっくりいうと、いくつかのオブジェクトの集まりや細かく設定したオブジェクトを1つのオブジェクトとして扱うものです。

例えばメッセージウインドウとして装飾の凝ったウインドウを一度作成してプレハブ化してしまえば、以降そのプレハブを複製するだけで良くなります。また、プレハブの

もっとみる
[Unity Blocks 4]スクリプトを書いてオブジェクトを動的に置く

[Unity Blocks 4]スクリプトを書いてオブジェクトを動的に置く

※先に次回のものを見た方がいいかもしれません・・・

スクリプトを書くスクリプトのフォルダーを作成して、フォルダー内で作成→C#スクリプトを選択すると少しのコードが書かれているスクリプトファイルができると思います。

この少し書かれているコードの説明を簡単にすると

void Start():プログラムの最初に1回だけ呼び出す関数。(最初にアクティブになったときでも)基本的には初期設定用で使ってま

もっとみる
[Unity Blocks 3]ポインターとなる画像を置く

[Unity Blocks 3]ポインターとなる画像を置く

(スクリプトのために)ピースをおくポインターをつくるどこの位置を選択しているかを分かりやすくするために、ドットの画像を作ります。

この画像を使っています。

黒点以外は透明にしています。

Imgのフォルダーを作成して保存しておきます。

平面を作成し、その平面に画像をドラッグ&ドロップすると、平面の色が変わり、Imgフォルダー配下にMaterialsフォルダーができると思います。しかし、今のと

もっとみる
[Unity Blocks 2]物理エンジンを付けてみる

[Unity Blocks 2]物理エンジンを付けてみる

前回の続きからです。

ピースを"置いて"みるUnityの物理エンジンを使ってピースを置いてみます。

ピースをシーンにドラッグ&ドロップし、位置を(0,0.1,0)に置きます。
原点から10cmの高さの位置になります。

次にピースを選択後、インスペクタービューからコンポーネントを追加をクリックします。

追加するのはRigidBodyです。これが物理的な動きをしてくれます。
ボードは動く必要が

もっとみる