【ゲームプログラミング】お前らがもしゲームを作るとして
■ このスレッドは過去ログ倉庫に格納されています
普段はプレイヤーの周囲をぐるぐる回るだけだがたまにプレイヤーによって攻撃するスクリプト作るならどうする? 攻撃イベントの終わりにAttackTimeを作って
AttackTimeが0になったら近寄るとかするの? 敵のことか
たまになんだからランダムで攻撃に入るんじゃないの プレイヤーのキー入力が一方向のまま一定時間が流れたなら
プレイヤーはスクリプトを舐めて放置してる証拠だし、そこで攻撃する ちなみに
if(AttackTime<=0)
{攻撃する処理}
else
{周囲を回る}
とかにした場合ずっと攻撃してる ちなみに使ってるのはUnityのNavmeshです 「寄って」か
乱数か何かを引き金にグルグルか攻撃か分岐させる 基本的なAIはパターンの繰り返し
パターン選別はランダムが簡単
NavmeshはAIじゃなくて経路探索アルゴリズムじゃね
AIの中の移動の所に組み込む 今こんな感じ
メイン処理
~MainClass~
else if(distance<3)←敵キャラとプレイヤーが3m以下なら
{
_attackTime = _enemyAttack.CheckAttackTime();←AttackClassのattackTimeを参照
if(_attackTime<=0 )
{
_agent.destination = _playerPosition;←プレイヤーに近づいて攻撃(攻撃はコライダー使ってる)
}
else
{
_agent.destination = _enemyMove.PlayerRound(_playerPosition, _position);←ぐるぐる回る処理
}
}
~AttackClass~
public float CheckAttackTime()←メインのCheckAttackTime関数が呼び出されるたびAttackTimeを減算してる
{
attackTime -= 1;
return attackTime;
}
public void OnAttackFinished()←攻撃が終わったらランダムなAttackTimeを再度追加する
{
attackTime = Random.Range(10, maxAttackTime);
attackCollider.enabled = false;
StartCoroutine(CooldownCorutine());
} >>11
移動系のみNavMeshだな
敵キャラにコライダーつけてそれがプレイヤーに触れたら攻撃って感じなんだがプレイヤーに寄る必要がある。
そのときランダムに近づいてほしい。 マリオみたいなただのアクションなら普通に三角関数+距離で絶対位置移動でやるだけ
移動量が重要な場合はチェックポイントを振ってちゃんとつくるしかなし >>14
モンハンみたいな感じ
NaviMesh使ってる
近寄るのもプレイヤーの現在地を目的の場所として自動で動いてくれる
ただ、攻撃した後Runaround状態にならずずっと攻撃してる Attackクラスって気持ち悪すぎだろw
何その設計 >>13
何に詰まってるんだ?
単純に一つのループに全部書くのが面倒とか?
確かに基本的なAIは待機モードや索敵モード、攻撃モードと切り替えるのが楽で基本だけど >>17
Attack状態からRunaround状態にならない
Elseじゃだめなのか? え?日本語が意味わかんないの俺だけ?wwww
>>1に描いている意味が分からなwww 攻撃した後どうやってOnAttackFinished()呼んでるの? 単純なミスで常に3M以内の処理がされてただけとかそんなんかな >>22
アニメーションクリップに直接StartイベントとFinishedイベントをつけてる
汎用性ないけどコライダーのオンオフ作業とかこっちの方が簡単だと思う
https://i.imgur.com/rFsZZ13.png >>25
スクリプトの方でデフォルト値100にしてたけどエディターのインスペクターで5が入力されてて5フレーム毎とかで近寄る処理が実行されてたみたい 毎フレームデスティネーションいじるのすげええぐいことになってそう
移動の分解能がどのくらいか知らないけど円じゃなくて8箇所で十分だろ >>28
なるほど一理ある
ただ結局NaviMeshってUpdateで処理するしプレイヤーが移動した時のこと考えるとあんまり変わらないような気がするなぁ ________
/ _ .:::::::::::::::. _ \
// °ヽ_ヽv /:/ °ヽ \
./  ̄ ̄ ´ 人 `  ̄ ̄ ヽ
l::. /oヽ、 |
|:::. // ハヽヽ |
|:::::::. (( / ヽ)) |
|::::::::. ヽヽ/ i .|
ヽ::::::.____ヽ( (_______ノ
_____/  ̄ 。 `――ヽ___
.〈 \
\ ゜○ 。 ゜ ○ ゜__,,ノ
 ̄\________/ ̄ ̄ ̄
./''7___/(_) ) /'''7 /'''7 /__7 ./''7/''7''7 / ̄/ /'''7
/ .___/.'ー" /__/ / / /__7 / ./ ー'ー'  ̄ / ./
/ /___.. ___ノ / ___.ノ / ____.ノ ./
i___/ /____,./ /____,../ /______./
ピリジン (pyridine) −膣分泌液の主な成分
・極めて不快な悪臭を放つ液体
・消防法による危険物に指定されており一定量以上の貯蔵には消防署への届出が必要
・皮膚と接触するとメラニン細胞を活性化し黒く色素沈着を残す
・吸入すると有害(気体、蒸気、ミスト)
・発がんのおそれの疑い
・生殖能又は胎児への悪影響のおそれの疑い
・経口摂取すると眠気又はめまいのおそれ
・長期にわたる、又は反復ばく露による臓器の障害
・水生生物に非常に強い毒性 ■ このスレッドは過去ログ倉庫に格納されています