LoginSignup
1
0

More than 3 years have passed since last update.

ArgumentException: Object of type 'UnityEngine.Object' cannot be converted to type 'UnityEngine.Collider'. の解決例

Last updated at Posted at 2020-12-28

エラーの様子

エラー文

スクリーンショット 2020-12-28 14.04.50.png

指定されているファイル

using System;
using UnityEngine;
using UnityEngine.Events;

[RequireComponent(typeof(Collider))]
public class CollisionDetector : MonoBehaviour
{
  [SerializeField] private TriggerEvent onTriggerEnter = new TriggerEvent();
  [SerializeField] private TriggerEvent onTriggerStay = new TriggerEvent();

  /// <summary>
  /// Is TriggerがONで他のColliderと重なっているときは、このメソッドが常にコールされる
  /// </summary>
  /// <param name="other"></param>

  private void OnTriggerStay(Collider other)
  {
    onTriggerStay.Invoke(other);
  }

  [Serializable]
  public class TriggerEvent : UnityEvent<Collider>
  {
  }
}

試行錯誤したこと

ArgumentException. UnityEngine.Object型のオブジェクトをUnityEngine.Collider型に変換できない。とのことで型指定間違ってるのかなと思ってみてみましたが間違っていませんでした。
googleで調べると明示的な記述をすれば直るみたいなアドバイスがありましたが、すでに明示的になっていて対処に詰まりました。
結局検索では解決策に至れなかったので、参考にしていた本を最初から読み直してみたところ指示と違うことをしていることがわかりました。

解決方法

下記のように、prefabに付与したcomponentのOntriggerStayの中身を引数なしの関数に変更することで、エラーを解消できました。

修正前

スクリーンショット 2020-12-28 14.05.11.png

修正後

スクリーンショット 2020-12-28 14.19.00.png

原因

同じ名前だけど引数を指定する関数と指定しない関数があって、今回は引数がないため、指定しない関数にしなければいけなかったのに、指定ありを選んでしまっていたため値が足りずエラーを吐いていました。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0