1

ここ StackOverflow で質問するのはこれが初めてです。

Unity 3D 公式の「Roguelike 2D」チュートリアルを終了し、それを自分で拡張しようとしています。がPlayer壁に足を踏み入れようとすると、代わりに壁にダメージを与え、最終的に突破します。

わかりやすくするために、サウンドとアニメーター コマンドを削除しました。

protected override void OnCantMove<T> (T component)
{
    Wall hitWall = component as Wall;
    hitWall.DamageWall (wallDamage);
}

そして、 が にEnemy歩み寄ろうとするとPlayer、代わりにダメージを与え、彼を傷つけます。

protected override void OnCantMove <T> (T component)
{
    Player hitPlayer = component as Player;
    hitPlayer.LoseFood (playerDamage);
}

playerDamageEnemy スクリプトによってwallDamage設定され、Player スクリプトによって設定されます (つまり、どちらもダメージを与えるスクリプトによって設定されます)。LoseFoodまたDamageWall、Player スクリプトと Wall スクリプトによって設定されます (どちらも、ダメージを受けるスクリプトによって設定されます)。

Enemyのように壁にダメージを与えられるようにしてほしいPlayer。そこで、Enemy スクリプトのOnCantMove部分を次のように変更してみました。

protected override void OnCantMove<T> (T component)
{
    Wall hitWall = component as Wall;
    hitWall.DamageWall (wallDamage);
    Player hitPlayer = component as Player;
    hitPlayer.LoseFood (playerDamage);
}

この:

protected override void OnCantMove<T> (T component)
{
    Wall hitWall = component as Wall;
    Player hitPlayer = component as Player;
    if (hitWall) {hitWall.DamageWall (wallDamage);}
    else if (hitPlayer) {hitPlayer.LoseFood (playerDamage);}
}

どちらも私が望んでいたようには機能しませんでした。OnCantMoveの機能を が壁にぶつかったEnemyときと同じになるように置き換えようとしたことさえありましたが、それは が壁にぶつかるのを可能にすることなく、を殴らなければならなかっPlayerた機能を削除しただけでした。この問題を解決できるかどうかを確認するために、次に何を試すべきですか?EnemyPlayer

これがうまくいけば、他の方法でもこのゲームを拡張し続けることができると期待していますが、私はこれについて非常に新しいです。助けとアドバイスをありがとう。

4

2 に答える 2

1

問題は、敵スクリプトの MoveEnemy メソッドにあります。を呼び出すAttemptMove<Player>ため、プレーヤー オブジェクトのみを OnCantMove メソッドに送信します。どのように解決するかはわかりませんが、必要な動作を得るには、おそらく少し再構築する必要があります。

于 2015-07-13T09:42:08.650 に答える