エラーの様子
####指定されているファイル
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の中身を引数なしの関数に変更することで、エラーを解消できました。
修正前
修正後
原因
同じ名前だけど引数を指定する関数と指定しない関数があって、今回は引数がないため、指定しない関数にしなければいけなかったのに、指定ありを選んでしまっていたため値が足りずエラーを吐いていました。