Advanced Search
Search Results
65 total results found
自動的にブロックを配置しよう~
お試しで手動でいくつかのブロックを配置したが、なかなか面倒な作業なので、自動的に配置しましょう。 スクリプト まず、手動で配置したブロックのすべてを消しましょう。その後、新しいスクリプト「BlockManager」を作成しましょう。このスクリプトは: 実行中にプレハブからブロックを生成する Inspectorで「行数」と「列数」を設定できるようにする BlockManager の位置から始め、連続にブロックを配置して行く まずは、変数から始めましょう: スクリプトの変数 using UnityEngine; ...
ボール跳ね返す角度をコントロールする
目的 今の作りだと、ボールがパドルを当たると、入射角を反転し、外向角になるだけで、プレーヤーがボール行かせたい方位を変えることができない。ある程度、ボールを行き先をコントロールできるように、パドルの「当たる部分」によって、跳ね返す向きを調整する処理を入れましょう。 これで、ボールがパドルの左側に当たると、ボールが左に行く。真ん中を当たると、真上に返す。右側を当たると、右に行くようにする。 解決のアイディア ボールとパドルの相対位置がポイント。ボールが衝突したら、パドルの位置とボールの位置を使い、その向きに返せば良...
ゲーム終了処理
次、「ゲームクリア」と「ゲームオーバー」の処理を追加しましょう。 ゲームオーバー このゲームでは、残機3つがあり、ボールが失ったら残機1つが減る。残機がゼロになった場合は「ゲームオーバー」にする。すでに「ボールが失ったら…」(BallDestroy)という処理があるので、これを活用できる。 ゲーム監督クラス「GameManager」を作成し、残機の数を追跡しましょう。BallDestroyのとき、GameManagerを呼び出し、残機を減らす処理を実装してみましょう: // ゲーム監督 public class G...
UIを作成
ゲームが動くが、画面になにも情報がなく、Canvas を使い、ゲームの状況を可視化しましょう。 Canvasの準備 まず、Canvas を作成し、残機とスコアの表示場所を作りましょう。 スコア スコアは画面の右上に表示しよう。テキストをを表示するので「TextMeshPro」で良いでしょう。必ず右上に出したいので、アンカーが画面の右上を追跡するようにしてください。位置を文字のサイズを調整し、とりあえず、「SCORE: 00000」を表示するようにしてください: 残機 残機は、スプライトの表示・非...
ゲームオーバー UI
現状、ゲームが終わるとき、Debug.Log でメッセージを表示しているが、その代わりに Canvas で「ゲームオーバー」を表示し、「さいかい」と「おわり」のボタンを実装しましょう! シーンの準備 スプライト分割 まず、ブロックと同様に、画像を分解しないといけない。ただし、行列ではないので、きれいに縦横で分割できない。この場合は、マウスを使い、各スプライトの領域を定義しましょう: 3つのスクリプトを分割したら、「Apply」ボタンを押し、シーンを編集しましょう Canvasの準備 すでに作ったゲーム用の Can...
サウンドを追加
ボールが何かと衝突、またはボールが失ったらサウンドを再生するようにしましょう。 ボールとパドル 新しい「BallHitSound」のスクリプトを作成し、以下の処理しましょう: サウンドファイルを Inspector で設定する 衝突の時 ( OnCollisionEnter2D )、ボールのタグを確認する ボールだったら、設定したサウンドを AudioSource.PlayClipAtPoint() で再生する。 // ボールが衝突したら、サウンドを再生 public class BallHitSound : ...
プロジェクト設定
まず、新規プロジェクトを作成しましょう。2Dゲームであるため「Universal 3D」を選んでください。プロジェクト名は「legend」にしましょう。 素材を追加 3Dモデル 主人公(Timmy)とゾンビのモデル(Mixamo) キャラクターのアニメーション ステージ作成のパーツ(Kenney) 画像、テクスチャ プロトタイプ用のテクスチャ UIのスプライト フォント(Google Fonts) すべての素材をプロジェクトに追加しましょう。 プロトタイプ用のシーンを構築 本番のシーンを作る前、各...
Timmyの移動を実装
主人公のゲームオブジェクトを作成 主人公のキャラクターの移動を実装しましょう。まず、空のゲームオブジェクトを作成し、「Player」という名前を付けてください。このゲームオブジェクトはプレーヤーの役割にする。 3Dモデルを追加 Characters/Timmy/Models から Timmy のモデルを追加してください。Player の子オブジェクトとして追加しましょう: よく見ると、色が多少おかしい。これはノーマルマップ(※)の問題であるので、解決しましょう。Characters/Timmy/Textures ...
主人公を追いかけるカメラ
Timmyの移動できたとしても、操作が確認しにくいので、プレーヤーを追いかけるカメラ(三人称視点)を作りましょう 単純なアプローチ 一番簡単なのは「カメラの位置を主人公の位置にしろ!」の仕組みである。これをすぐ試せるので、「CameraController」スクリプトを作成してみましょう: スクリプト // 主人公を追いかけるカメラ public class CameraController : MonoBehaviour { // 追いかけるオブジェクトのTransform [SerializeF...
Timmyがカメラに相対的に移動する
これでカメラが自由に回転できるようになったが、今度何かおかしい現象が発生。 カメラが主人公の後ろにある場合は、何とか正しく動きますが、真横、または正面から見ると入力する、主人公の動きが変に感じる。なぜなら、キャラクターがカメラの位置を関係なく、世界のXZ軸に沿って動くので、カメラの向きが変わったら、おかしく感じる。 この問題を解決するには、世界に絶対的に動くのではなく、カメラの向きに合わせて相対的に移動すること。 この場合は、カメラ前方(青い矢印)が世界のZ軸と並行になっているので、「W」キーを...
ジャンプを実装
ジャンプは前後左右の移動とは関係ないため、別のスクリプトとして実装ができる。同じPlayerMoveでも実装できるが、「一つのスクリプト=1つの責任」の考えを従い、今回はジャンプ専用の「PlayerJump」スクリプトを作成しましょう。 このスクリプトは「Jump」という入力(プロジェクト設定→入力マネージャーを確認)が発動したら、一旦Y軸の速度を変えて、上がるようにしましょう。また、ジャンプ力をUnityで変えられるようにしましょう。 スクリプト using UnityEngine; // ジャンプ機能を追加す...
アニメーションを追加
Timmy がずっと「T-ポース」でなかなか面白くないので、走るときとジャンプの時もアニメーションを再生しましょう。このため「アニメーションコントローラー」(Animation Controller)および「アニメーター」(Animator) コンポーネントを使用し、条件でアニメーションを切り替えて、主人公を適切に動かしましょう。 シーン設定 動くのは Timmy なので、Timmy (Playerではなく) に Animator コンポーネントを追加してください。 ここで、「Controller」と「Avata...
アイテムを拾う
3D シーンの配置できるコインと鍵を拾って、Timmy が持っているアイテムを追跡しましょう。 コイン シーンにコインを一つ作ろう(後ほどプレハブにして、何個も配置できるようにする)。まず、「Coin」の名前で空のオブジェクトを作成する。拾う処理を確認しやしくするため、Timmyの近くに配置してください。 次、「Coin」の子オブジェクトとして、3Dモデルを追加しましょう。Meshes の中にある「coin-gold」を「Coin」の中に挿入し、位置は 0, 0, 0 にしてください。 最後、3Dモデルとの接触を確...
宝箱を作成
このステップで、宝箱のアニメーションを作成し、開く。ただし、主人公が事前に鍵を持っていることを確認しなければならない。また、遷移のないアニメーションの切り替えも紹介する。 宝箱の準備 シーンに宝箱のモデルをシーンに追加しましょう。Coin と Key と同様に、空のゲームオブジェクトを作成し、3Dモデルを子オブジェクトとして追加した方がおすすめ。 サイズが多少小さいので3Dモデル(子オブジェクト)のサイズは 2倍ぐらい大きくしましょう。 なお、ちゃんとぶつかるように、宝箱はコライダーが必要。3Dモデルの子オブジェ...
UIを作成
インベントリの中にあるアイテム(コイン、鍵)を画面上で表示し、主人公の体力も可視化しましょう。 Canvas作成 ヒエラルキーに新しい Canvas を追加してください。 Canvas Scaler を紹介 Canvas を作成するときに、同時に「Canvas Scaler」のコンポーネントを作成される。このコンポーネントは想定する画面のサイズに合わせて、自動的にCanvasを拡大縮小する。 例えば、UIを開発したときに、想定していた画面サイズは FullHD (1920 x 1080) だった。ただ、プレーヤーは...
ゾンビを実装
主人公を追いかける「ゾンビ」を実現しましょう! シーンの設定 ゲームオブジェクトと3Dモデル Timmyと同様に、ゾンビのゲームオブジェクトを作成しましょう。空のゲームオブジェクトを作成し、その下に子オブジェクトとしてZombieのモデルを追加する: ただし、ゾンビは物理的に動かないので、コライダーとリジッドボディが要らない。ゾンビの動かした方については、下記で説明する。 アニメーション 今回は、アニメーションは1つしかなくて、ずっと歩くようにしましょう。ただし、Timmy と同様に「アバター」の設定が必要。 ...
課題
Timmyの伝説に新たな機能を追加し、よりも面白くする! 例えば… HP回復アイテムを実装 罠を作成(消えるプラットフォーム→穴に落ちる) ドアを実装 定めたコインの数がないと開かない また、レバーを引くと開く HPゼロのときに、倒れるアニメーションを再生し、ゲームオーバーする 宝箱を開くと、コイン10個が飛んで出てくる サウンドを追加(アイテムを拾うとき、宝箱を開くとき) 移動プラットフォームを実装 ボールを投げ、ゾンビを倒す その他の好きな機能(自由) ルール 1つの機能を実装すると:合格(最低限)...
本番のシーンを作成
今まで、作業用のシーンでゲームに必要な各部品を開発してきた。これで、本番のステージを作れるので、まず、再利用するもを1つのグループにし、プレハブ化にしましょう 共通のゲームオブジェクト(Player、Base(カメラ)、Canvas(UI)と EventSystem)をグループ化し、再利用できるプレハブにする。Zombieは別のプレハブとして保存。 つぎ、新し「Game」シーンを作成し、「Meshes/PlatformKit」から好きなパーツを選んで、ステージを作成してください。「Common」プレハブを挿入し、...