忍者ブログ

素人ゲーム開発を垂れ流しつつ、覚醒に至るまでの記録や役立ち情報、愚痴を書くブログ。ちなみに前立腺の開発もやっている。

また一つ解決。
 


一瞬ですが、ロックオン中のオブジェクトが消えると
エラーを吐く組み方を変更しました。

Listで管理していた為、.AllRemoveだったかな?
追尾対象を消すと自動的に配列が詰めなおされるので
その弾頭が担当する対象が変わってしまったり
又は不在(NULL)にエラーとなっていました。



1,クリックで「見せかけロケットインスタンス生成」
2,見せかけロケットにアタッチしてるスクリプトの変数を参照しGameObjectを渡す
3,見せかけロケットが消えると同時に本命ロケット生成
4,そのロケットにアタッチしたスクリプトの変数を参照し同じくたらいまわす
5,本命ロケットのスクリプトでif(targetObj != NULL)みたいな感じで
入っている時のみターゲットを追尾するように変更


どうやって渡すのか?


あらかじめアタッチするスクリプトにメンバ関数を作っておく。
例えば、

public class DammyRocket : MonoBehaviour
{
    private GameObject targetObj;
    public void SetupRocketTarget(GameObject target)
    {
          targetObj = target;
    }
}

この様に仕組んでおく。
そして撃つ側のスクリプトで撃った時にメンバ関数を
呼ぶ。


public class Shot : MonoBehaviour
{
 Update()
 {
         if(撃つ)
         {
                GameObject obj = Instantiate(生成したいオブジェ);
                obj.GetComponents<DammyRocket>().SetupRocketTarget(ターゲットオブジェ);
         }
   }

}


これを繰り返す。僕はダミーと本命、クリック操作があるので
ダミー、本命の2つにメンバ関数を作る。
「obj」には生成されたプレハブ(左のヒエラルキーのオブジェそのもの)
が代入されるので、そこから右のインスペクター
(アタッチしてるすべてのコンポーネント)を取得できる。
TransformならばGetcomponent<Transform>();と書く。


obj = ロケット なのでロケットにアタッチしたスクリプトを
参照する。この場合<DammyRocket>()。撃つたびに
ロケットが生成されるのでこのShotクラスはそれぞれのロケット
に独立して作られる。これでforやfoeachなど使わずにすむ、と言う方法。
PR
COMMENT
NAME
TITLE
MAIL (非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS (コメント編集に必須です)
SECRET
管理人のみ閲覧できます
 
  
ブログ内検索
最新コメント
[01/01 FrankSeita]
[10/06 ダージリン]
[10/03 ゼン]
[10/01 ダージリン]
[09/25 ゼン]
プロフィール
HN:
kawaハギ
年齢:
36
性別:
男性
誕生日:
1989/07/03
職業:
無職
趣味:
ゲーム 音楽
自己紹介:
人類を5次元意識へ押しあげる為のゲームを
開発しています。

小学生3年頃から鬱を発症。対人恐怖症、醜形恐怖等で引きこもり。
生きる意味を長らく探し求め、ようやく答えを見つけスピリチュアル
にたどり着く。覚醒を数段階体験し現在は”もう一度”物理的な自立を目指しています。
カウンター
Copyright ©  -- 覚醒できるゲームを作るブログ --  All Rights Reserved

Design by CriCri / Material by petit sozai emi / powered by NINJA TOOLS / 忍者ブログ / [PR]