UNITYで「たまあつめ」というゲームを作った時の開発説明
Unityroomで遊べる、主観視点のホラーゲーム。
https://unityroom.com/games/tamaatsume
主人公はゾンビから逃げつつ青い「タマ」を20個集める。
Outlastとかホラーゲーム的な要素、走ると息があがりゾンビに見つかりやすくなるとか趣味をいれてみました。
1.「たまあつめ」とは?
Unityroomで遊べる、主観視点のホラーゲーム。
https://unityroom.com/games/tamaatsume
主人公はゾンビから逃げつつ青い「タマ」を20個集める。
Outlastとかホラーゲーム的な要素、走ると息があがりゾンビに見つかりやすくなるとか趣味をいれてみました。
2.開発要素
(1)FPS視点
Unityのスタンダードアセット、FPSControllerを入れて調整するだけ
(2)ミニマップ
FPSControllerの中に、ミニマップ用カメラを置き、プレイヤーの頭上から下を向ける。カメラの設定を変更。ミニマップ用のいレイヤーを作り、カメラの表示をそのレイヤーだけにする。メインカメラはミニマップ用レイヤーだけ表示しなくすれば、マークはメインカメラに映りません。
プレイヤーや敵の頭上にマークを付けれ、レイヤーを設定すればそのレイヤーだけ表示されます。
プレイヤーや敵の頭上にマークを付けれ、レイヤーを設定すればそのレイヤーだけ表示されます。
(3)敵が近くなるとノイズが強くなる
ゾンビごとにプレイヤーとの距離と角度によって、プレイヤーに気づくかどうかを決定
プレイヤーとの距離。
Vector3 targetDir = player.transform.position - transform.position;
プレイヤーとの角度。後ろにいたらみつからないようにした。
float angle = Vector3.Angle(targetDir, transform.forward);
これに走るっているshiftキー押しの場合は二倍見つかりやすいとか追加
if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
敵とプレイヤーの間に障害物があれば無視するようRayを飛ばしてチェック
if (Physics.Raycast(ray, out hit, searchDistance))
{
if (hit.collider.tag != "Player") isSearch = false;
}
プレイヤーとの距離。
Vector3 targetDir = player.transform.position - transform.position;
プレイヤーとの角度。後ろにいたらみつからないようにした。
float angle = Vector3.Angle(targetDir, transform.forward);
これに走るっているshiftキー押しの場合は二倍見つかりやすいとか追加
if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
敵とプレイヤーの間に障害物があれば無視するようRayを飛ばしてチェック
if (Physics.Raycast(ray, out hit, searchDistance))
{
if (hit.collider.tag != "Player") isSearch = false;
}
(5)地形が重い!
Gaia(地形エディタアセット:設定ればそれっぽいTerrainを作ってくれる)をそのまま使うととても重かった。PCで開発中気づかず。webGLやスマホを考えるとそれなりの加工が必要でした。
やったこと
・動かないオブジェクトはstatic
・草をやめた。悲しい。Gaiaで最初に作ったものは草があって素敵でした。
開発初期の草あり
できるだけ軽量したかったのでカット。そういえばスマホゲームで草茫々ってあまりない。寂しい感じ。
・Terrain To MeshでGaiaが作ったTerrainをメッシュ化。このアセットはメッシュ化とテクスチャを出力してくれるので軽量化に成功。
コメント
コメントを投稿