実行したいこと
Unityで敵AIを作っていて、敵がプレイヤーを見たら敵の視界から外れるまでずっと見続けるというものを作りたいのですが、自分が使っているBehaviorDesignerというアセットの都合上、見えたオブジェクトをスクリプトに渡してくる時には絶対にobject型で渡されるようです。
C#
1{ 2 public BehaviorTree tree; 3 void Update() 4 { 5 // 引数は必ず明示的にobject型に 6 tree.RegisterEvent<object>("seeobject",seeing);//seeingに続く 7 } 8 // 引数は必ずobject型 9 public void seeing(object seeingobject)//seeingobjectに見えたオブジェクトが代入される 10 { 11 //ここで見えたオブジェクトのtransformを参照できるようにしたい 12 } 13}
この後に敵の視線を見えたオブジェクトに合わせるために「transform.LookAt」などを使おうと考えているため、どうにかしてtransformを参照できるようにしたいのですが、どうにもobject型をどう変換したらいいのか全く分かりません。
初歩的な質問かもしれませんが、どういう風に変換したらいいか教えていただきたいです。
試したこと
C#
1 //省略 2 public void seeing(object seeingobject) 3 { 4 Debug.Log(seeingobject.transform.position); 5 //もちろんエラー。 6 //'object' does not contain a definition for 'transform' and no accessible extension method 'transform' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) 7 }
そもそも「object型」がよくわかっていなかったので、ネットで調べたのですが「どの型にも対応できる万能な奴」みたいなこと書いているサイトしか見つかりませんでした。
追記:解決しました!
回答者さんに教えてもらったようにダウンキャストを使用したところ、ビックリするくらいうまく解決しました!
C#
1 //省略 2 public void seeing(object seeingobject) 3 { 4 GameObject obj = (GameObject)seeingobject;//ダウンキャスト 5 }
この答えに数日悩んでいたわけだし、もっと早くに質問すればよかったなぁ...
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/20 08:55