unityやDirectXなどで多くのオブジェクトを短時間で
生成したり削除するという状況が必要な場合、おそらくほとんどの人がオブジェクトプールを使って早いうちに処理を軽くすると思う。
(私の認識としては生成したオブジェクトを管理し、削除するのではなく次に同じ属性のオブジェクトが必要となるまで非表示にし、生成コストを下げる方法だと思ってる)
で、思ったのが管理するとは関係なく、そのオブジェクトが他のオブジェクトと干渉する場合、
特に自身の管理下とは違う管理下に置かれたオブジェクトと干渉する場合そのオブジェクトの呼び出しってどうすりゃいいんだろうって思った訳です。
void OnTriggerEnter2D(Collider2D col) {
var tag = col.tag;
if (tag == "Item") // item取得:
{
ItemObjectManager.Instance.ItemGet(col.gameObject.GetComponent
return;
}
}
上記はunityで実際に今やっている判定だが簡単に言うと
ItemObjectというオブジェクトをItemObjectManagerでプール管理させており
プレイヤーはOnTriggerEnter2Dを使ってItemObjectに設定したタグからManagerに当たった命令を送ってるということだ。
で、これを書いて思ったのが……
PoolしてるのにGetComponent使う?ということである。
私個人として、PoolしてるのであればGetComponentでわざわざ
Component引っ張ってくるのもおかしいんじゃね?って思ったからだ。(しかも遅い)
オブジェクトが使いまわせるのになんでGetComponentするのか?それが違和感であり
何とかする方法はないのかなとこの仕組みで3カ月ちょっと悩んでたり……。
(勿論ItemObject以外もこの方法を使っているから余計に悩んでる)
そして、結果的にこれに対して私なりに考えた方法は二つ。
1.GetComponentを使用しないように全てのオブジェクトにEnterを使う。
Activeの判定などやるならこの方法でもいいのかとか思ったのだが、
じゃあ別のオブジェクトの値を引っ張る必要がある場合は?というので断念。
そもそもEnterの順番が分からないため、数回に一度バグるなどが起きそうなのでそもそもこの考えは
論外にも近い(そもそもunityのイベント関数をあまり信用していない)
2.ComponentのGetInstanceID()を使用する。
要するにManager側はIDを受け取り、そこからどのオブジェクトが当たったかを判定し
そのオブジェクトに命令を与えるということだ。これならGetComponentを使用せず
ComponentにあるIDを使用しているので平気なのではと考えた。
これはそもそもUnityを信用していないためにCollider2DでのGetInstanceID()が
ItemObjectのIDと一致するのだろうかとは思っているせいで
今までやっていなかったので試してみる必要はあると思う。
とくに2.に関してはうまく言った場合、その速度を改めて確認する必要がある。
なぜなら扱い方をこれに統一した場合。
GetComponentを行って値を引っ張るのと、GetInstanceIDからオブジェクトを探し、見つけたものの値を返すという選択肢が増えるからだ。
ここまで考えてふと思う。
これに悩むのに時間かけるならとりあえず作れよ……
はい。本当にすいませんです。
なんとか素材を作って頑張るのでよろしくお願いします。
後上記以外で、私はこんなことしてるよーっていうのがあれば教えてもらえればなぁと思ってます。お礼はできませんのであしからず。
PR
COMMENT
カレンダー
最新記事
(02/05)
(01/22)
(06/01)
(12/18)
(12/18)
最新コメント
プロフィール
HN:
あい。
年齢:
30
性別:
非公開
誕生日:
1994/01/09
自己紹介:
仕事でunityしつつ、3Dとかやるので
そろそろどこに向かってるのか分からなくなってきた人
めーるあどれす:
nokutan_aiあっとyahoo.co.jp
このブログはリンクフリーです。
バナーのURL
"https://blog.cnobi.jp/v1/blog/user/ffb3f4a3a70931da92ac361f9c87596b/1408110435"
になってると思います。
@AI_nohito からのツイート
そろそろどこに向かってるのか分からなくなってきた人
めーるあどれす:
nokutan_aiあっとyahoo.co.jp
このブログはリンクフリーです。
バナーのURL
"https://blog.cnobi.jp/v1/blog/user/ffb3f4a3a70931da92ac361f9c87596b/1408110435"
になってると思います。
@AI_nohito からのツイート
カウンター