【UnityC#】例外クラスを自作する
C#には例外処理があらかじめ色々定義されています。なんとかExceptionとか、ほにゃららExceptionとか。
特定のシチュエーションでの例外を自分で定義したい!となった時のために例外クラスの自作について調べました。
以下のコードではボールオブジェクトの重力を切る処理をRigidBodyを参照して行います。
RigidBodyの参照がされない主なパターンとして、
(1)用意したRigidbodyの参照がnull
(2)そもそもRigidbodyがアタッチされていない
があるので、その時に例外処理をします。
この2つのパターンを新たな例外としてクラスを作成します。
Ball.cs
using UnityEngine; public class Ball : MonoBehaviour { [SerializeField] private Rigidbody _rigidbody; private void Start () { InactivateGravity(); } /// <summary> /// 重力を切る /// </summary> private void InactivateGravity () { try { if(!GetComponent<Rigidbody>()) { throw new UnattachedComponentException("RigidBodyがアタッチされていません。"); } if(!_rigidbody) { throw new UnreferencedComponentException("_righdbodyが参照できませんでした。"); } } catch(UnattachedComponentException e) { Debug.LogError(e); _rigidbody = gameObject.AddComponent<Rigidbody>(); Debug.Log(_rigidbody + " をアタッチしました"); } catch(UnreferencedComponentException e) { Debug.LogError(e); _rigidbody = GetComponent<Rigidbody>(); Debug.Log(_rigidbody + " を参照しました"); } finally { _rigidbody.useGravity = false; } } }
UnattachedComponentException
using System; public class UnattachedComponentException : Exception { public UnattachedComponentException () : base() { } public UnattachedComponentException (string message) : base(message) { } }
UnreferencedComponentException
using System; public class UnreferencedComponentException : Exception { public UnreferencedComponentException () : base() { } public UnreferencedComponentException (string message) : base(message) { } }
おわりに
必要に応じて拡張するといい感じに使えそうです。