https://youtu.be/sPiVz1k-fEs
を参考にオンラインゲームを作っています。
Playerスクリプトに、
cs
1 2void Attack() 3 { 4 Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, attackRadius, enemyLayer); 5 foreach(Collider2D hitenemy in hitEnemies) 6 { 7 hitenemy.GetComponent<Player>().OnDamage(14); 8 } 9 }
で攻撃するメゾットと、
cs
1public void OnDamage(int damagePower) 2 { 3 healthPoint -= damagePower; 4 }
を用意して、Attack()を利用し、オンライン上の敵に攻撃したところ、
NullReferenceException: Object reference not set to an instance of an object>
と、public void OnDamage(int damagePower)
の行にエラーが起きました。
調べたところ hitenemy.GetComponent<Player>().OnDamage(14);
の記述が問題とか、いつの間にか治るとかありますが、解決策と原因を教えてください
単純にPlayer.csをアタッチしているオブジェクトがないだけではないのでしょうか?
あります
ではhitenemy.GetComponent<Player>().OnDamage(14);をコメントアウトして,Debug.log(hitenemy.GetComponent<Player>())とかでnullかどうかを確かめてみてください
Debug.Logしたら、
GamePlayer(Clone) (Player)
UnityEngine.Debug:Log(Object)
と出てきました。
GamePlayerはPlayerに設定してるUnity上での名前です
では,そのDebugLogとエラー文のどうなっていますか?
DebugLogが確認できる場合はPlayer.csはあるということになります
同じ感じでOnDamage()を呼び出してください
同じ感じとはどういうことですか?
エラー文は出ませんでしたが、.OnDamage(14);を追加すると最初と同じエラーがそのままでます
言葉足らずでした.
GetComponentでPlayerが呼べていて,OnDamageのみが呼び出せないということはOnDamageの中がおかしいことになると思います.
その関数が正常に呼べているのかを確認してみてください
foreach(Collider2D hitenemy in hitEnemies)
{
OnDamage(16);
}
で相手にじゃなく、攻撃したら自分にくらうようにしたら自殺攻撃できます
やはりGetComponent<>().ondamege()が無理なようで....
怪しそうなところがわかったので,その辺で原因を探してみてください
さすがにこれ以上は上記のコード等からでは私にはわかりかねます..申し訳ないです
回答2件
あなたの回答
tips
プレビュー