【Unity】ゾンビゲー作成(敵キャラクター)
今回は敵キャラの作成です。
使った3Dモデルは
まだちゃんと中身は見れていませんがかなりいろいろ揃っている模様です。
今回は敵キャラの移動条件を明記したいと思います。
・追いかけるときは障害物をちゃんと避ける(プレイヤーに向かって移動するとき壁に向かって歩いてほしくない)
・プレイヤーを見つけていないときはうろうろする
・プレイヤーを見つけたら死ぬまで追いかけてくる
倒したとかの判定は今後やるとしてとりあえず移動に関してはこれで終わらせようと思います。
上記に関しては
・追いかけるときは障害物をちゃんと避ける
→ナビゲーション機能で移動させると障害物を避けるらしい
・プレイヤーを見つけていないときはうろうろする
→発見・未発見のトリガーをつくり未発見はランダムに目的地設定して移動
・プレイヤーを見つけたら死ぬまで追いかけてくる
→発見時はプレイヤー(目的地)にあたるまで追いかける
こんな感じで何とかなりそうです。
まずナビゲーションなのですが他でも記事は多くあると思いますので簡単に説明します。
これを使うとなんと指定した目的地に向かって指定した範囲を、障害物を避けながら移動させることができます。
ゲームで例えるとlolとかでプレイヤーを壁の向こうに移動させるとき目的地にむかって壁を避けつつ最短距離を移動しますよね?そんなイメージだと思います。
目的地やスピードはスクリプトで設定できるのですが、移動できる範囲は指定しないといけません。
①window→AI→Navigationを押してナビゲーションタブを出す
②マップのstaticをすべてNavigationStaticにしましょう。
マップ類のオブジェクトをFieldという空のオブジェクトに入れていたのでこれですべてをNavigationStaticにできました。(ナビゲーションの計算のみ行うという意味ですかね?)
③移動できる範囲を指定
それができたら次はインスペクターのタブのとこに追加Navigationというタブが追加されているのでそれを押して次にBake→Bakeを押します。
すると上の写真のように水色の部分が出てくると思います。それが移動範囲となります。
細かなパラメータに関しては他の人が説明してたりするので割愛しますが、Agentの半径や高さは動かしたいキャラのことを表しているようです。そして移動できる勾配、高さも設定できるようです。行ってほしくないところが範囲になっているようでしたらここらへんのパラメータをいじると改善すると思います。
これで一通りの設定が終わっているはずなのでスクリプトを作成していきます。
書くのが面倒になってきたのでどういうことをしたか書いときます。
ナビゲーションは目標地点設定してうごかす方法になります。
したがって場合を分けて目標を設定することで敵キャラの移動条件を満たして意向と思います。
未発見時
・Ramdom関数で目標座標をつくって移動
・近づいたら新たな目標地点を作成
これでループして永遠にうろうろしてます
発見時
・目的座標をplayerに設定
これで動き自体はいいのですが、発見と未発見を変更する必要があります。
そのために発見用トリガーを作成します。
・検知範囲として敵キャラにShereを追加(メッシュレンダーを切る、Colliderをつける+IsTriggerをチェック)
・衝突判定をつけて範囲内にプレイヤーがいるとトリガーオン(findtrigger というのをbool型で作成しtrueにする)
移動にはNavigationAgentのコンポーネントを追加しておいてくださいね
これで敵キャラクターを当初目標のように動かすことが出来たと思います。
次回は空爆を作っていこうと思います。
【Unity】ゾンビゲー作成(自プレイヤー作成)
マップが出来たのでプレイヤーと敵キャラを作成していきたいと思います。
キャラクターの移動方法は既に様々なブログでやり方が記載されていますので特に説明は要らないと思います。
使ったアセットだけ紹介しておきます。
そういえば私は練習で開発をしているので有料のものは使う予定は現状なしです。
このアセットだと走る・歩く・倒れるとアニメーションもそろっているので最低限そろい大好きです。
ちなみにこのキャラ移動にはRigidBodyとvelocityで動かせるものを自身で作成したため、もともとついているcharactercontroller・スクリプトとかははずしています。
メインカメラはいい感じに位置・角度を調整して
public class CameraController : MonoBehaviour
{
private GameObject player;
private Vector3 offset;
// Start is called before the first frame update
void Start()
{
player = GameObject.Find("Player");
offset = player.transform.position - transform.position;
}
// Update is called once per frame
void Update()
{
transform.position = player.transform.position - offset;
}
}
こんなスクリプトを作成しておけばプレイヤーを最初の位置に捕らえながら一緒にいじょうしてくれます。
真ん中よりチョイ下に映っているのがプレイヤーです。
【Unity】ゾンビゲー作成(マップ編)
ゾンビを空襲によって倒すゲームを作成しようと思います。
作成案としては最低限
・プレイヤー自体は移動のみ、攻撃しない
・ゾンビはプレイヤーを追いかけるのみ
・プレイヤーがゾンビに触れるとゲームオーバー
・攻撃は空爆、空爆ボタン作成しX秒後にプレイヤーがいた場所に範囲攻撃的な
・空爆の種類を複数作成
・レベル機能を作成し、レベルアップで攻撃のパラメーターが上昇
を実装していこうと思います。
思いついたらまた新しい機能を入れたいと思います。
ということで最初にマップを作成しました。
特に技術的に何かしたわけではありませんが、
作成手順としては
①土台の作成
画像では緑色で表示されている部分です。
ヒエラルキー→Create→Cube
・インスペクタでスケールを調整
・Add ComponentでBoxCollider追加、IsTriggerはチェックしない(チェックすると通り抜けてしまうので、マップ作成では全部チェックははずします)
で完成
②建物・道路の配置
これはアセットをインポートして配置していきます。
今回使ったアセットは
こんな感じです。
適当に配置してもそれっぽくなりました。
スケールや座標をインスペクタでいじって密集感を出したり、あえてスキマを作ったりして抜け道等をつくると面白いかもしれません。
③コライダーの設定
配置しただけではプレイヤーが建物をすり抜けてマップ外に出られます。それでは困りますのであたり判定を持った見えない壁を作っていきます。
建物にコライダーを設定してもいいのですが、もしスキマがあってマップ外に出てしまっては困るので外堀は写真のように①みたくキューブを作成して完全に遮断してしまいます。
作成したら壁用のCubeのインスペクタでBoxColliderを追加して(既にあればいらない)、MeshRendererのチェックをはずすと最初の写真のように見えないようにできます。
島になっている部分は私は抜け道を作りたかったのでそれぞれの建物にBoxColliderを追加しています。
抜け道が必要なければCube+BoxColliderで囲んでしまえばいいと思います。
マップは今後作りこみが必要だとは思うのですが、とりあえずこれから作っていくのに必要なので一旦はこのマップを使って作成していこうと思います。
プライバシーポリシー
MARUFUJI(以下、「当方」といいます。)は、当方が提供するアプリケーション(以下、「本アプリ」といいます。)におけるプライバシー情報の取扱いについて、以下のとおりアプリケーション・プライバシーポリシー(以下、「本ポリシー」といいます。)を定め、公表しております。内容をご理解の上で本アプリをご利用下さい。
1. 本アプリが取得する利用者情報
- 端末の情報(言語設定,OS,OSバージョン,回線種別,メーカー名,機種名,画面解像度,画面サイズ,位置情報,端末にインストールされているパッケージの情報,Android広告ID(GAID),iOS広告ID(IDFA),等)
2. 利用目的
- 広告の配信のため
- 本アプリの利用状況を分析するため
3. 利用制限
取得した利用者情報については、以下のいずれかに該当する場合を除き、上記の利用目的の達成に必要な範囲内で取り扱います。
- 法令に基づく場合
- 人の生命、身体又は財産の保護のために必要がある場合であって、本人の同意を得ることが困難であるとき。
- 公衆衛生の向上又は児童の健全な育成の推進のために特に必要がある場合であって本人の同意を得ることが困難であるとき。
- 国の機関若しくは地方公共団体又はその委託を受けた者が法令の定める事務を遂行することに対して協力する必要がある場合であって、本人の同意を得ることにより当該事務の遂行に支障を及ぼすおそれがあるとき。
4. 利用者情報の第三者への提供
取得した利用者情報については、法令等に定める場合を除き、本人の同意なく第三者に提供することはありません。
5. プライバシーポリシーの変更について
当方は、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。修正された最新のプライバシーポリシーは常に本ページにて開示されます。