前提
C#
1 void Update() ← Controllerクラス 2 { 3... 4 RayCollisionGetTarget();
C#
1 2void Start() ← Managerクラス 3{ 4 FPSController Cont = Player.GetComponent<FPSController>(); 5 Cont.RayCollisionGetTarget(); 6 if(Cont.RayTargetGameObject != null) 7 { 8 Destroy(Cont.RayTargetGameObject); 9 }
しかしManagerクラスのCont.RayCollisionGetTarget();が呼ばれ処理を終えた後
if(Cont.RayTargetGameObject != null)にいかず(ブレークポイントが止まらない)
コントローラークラスのUpdateに呼び出し先が変わっていました。
※RayCollisionGetTarget()を抜けるまでは呼び出し先はManagerクラスになっております
使用IDE : visualstudio 2022
気になったこと
コントローラークラスのStartが呼ばれる前にManagerクラスのStartが呼ばれていたので
そこら辺もしかしたら関係があるのかなと思いましたが根本的に仕様の理解不足ですので
理解ある方いればご教授お願い致します。
(当方C++の経験しかありません)
Managerクラスの5行目の
Cont.RayCollisionGetTarget();
と6行目の
if(Cont.RayTargetGameObject != null)
にブレークポイントを設定して
5行目で停止した後F5で続行しても6行目で停止しないとおっしゃっていますか?
はいそうです
FPSController Cont = Player.GetComponent<FPSController>();
にてコンポーネントが取得できずContがnullとなっていて
Cont.RayCollisionGetTarget();
が実行できずにエラーとなりStartを抜けているとか
もしくはRayCollisionGetTargetで例外が発生しているとかありませんかね?
例外をcatchして確認するなりしてみてはどうでしょうか?
FPSController Cont = Player.GetComponent<FPSController>();
if (Cont != null)
{
Cont.RayCollisionGetTarget();
if (Cont.RayTargetGameObject != null)
{
Destroy(Cont.RayTargetGameObject);
}
}
nullチェックを行いましたがnullではないようです。
記載したとおり関数も実行できております
Cont.RayCollisionGetTarget();
にブレークポイントを設定してステップ実行していっても
if (Cont.RayTargetGameObject != null)
にはたどり着かないんですかね?
念のためですが下記のように例外をcatchして確認してみてはどうでしょう?
私は呼び出し元の次の行にブレークポイントを設定したにも関わらず停止しないといった現象で思いつくのが例外時くらいしかないので・・・
void Start()
{
try
{
FPSController Cont = Player.GetComponent<FPSController>();
Cont.RayCollisionGetTarget();
if (Cont.RayTargetGameObject != null)
{
Destroy(Cont.RayTargetGameObject);
}
}
catch (Exception ex) {
Debug.Log(ex.Message);
}
キャッチに入ってました
入ってる = 例外判定であってますよね?
catch (Exception ex)
{
Debug.Log(ex.Message);
}
エラーメッセージから下記リンクをたどったところおそらく生成できていないことによる例外なのかなというところです
https://csharpprogram.com/%e3%80%90c%e3%80%91nullreferenceexception%e3%81%ae%e5%af%be%e5%87%a6%e6%96%b9%e6%b3%95%e3%80%805%e3%81%a4%e3%81%ae%e4%ba%8b%e4%be%8b%e3%81%a8%e5%af%be%e5%87%a6%e6%96%b9%e6%b3%95%e3%82%92%e7%a2%ba/#%E3%82%B1%E3%83%BC%E3%82%B91_%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8C%E3%81%BE%E3%81%A0%E4%BD%9C%E6%88%90%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84
これC++で遭遇したことないんですけど実行せずに抜けるなんてあるんですね
勉強不足でした。。。
catch = 例外という認識相似なければスレッド閉じたいと思います
ご協力ありがとうございました
NullReferenceExceptionであれば、try・catchを使わずともUnityエディタ(VisualStudioではない)のConsoleに表示されるはずですが、確認はしましたか?
(Unityの場合、エラーはVisualStudioに表示されず(Unityエディタに表示される)、また実行時の場合は中断もされません)
> これC++で遭遇したことないんですけど実行せずに抜けるなんてあるんですね
C++も例外やtry・catchはあるのでは?
C++も例外やtry・catchはあるのでは?
↑ありますよ
ただ抜ける処理は今まで遭遇したことがありませんでした...
(nullの時点で止まるので)
回答2件
あなたの回答
tips
プレビュー