何か参考にしてもらえそうな簡単な物…という事でメダルプッシャーをささっと作ってみてる今日この頃。

しかしプッシャーの上に乗ったコインがプッシャーの動きに合わせて動いてくれないので以下のようなコードを書いてみた。
void Update ()
{
// 落ちたコインを消す
if (this.transform.position.y < -10) Destroy(this.gameObject);
}
void OnCollisionEnter(Collision c)
{
if (this.transform.position.y < 6) // 2.3<Y<6の時、床に合わせて動いてもらう
{
if (this.transform.position.y < 2.3f)
{
this.transform.parent = null;
}
else
{
// parentに動く床をセット。this.ParentPusherは動く床(GameObject)
this.transform.parent = this.ParentPusher.transform;
}
}
}
OnCollisionEnterを用いているのは、コインが投入されてからプッシャーの上に乗る前に
コインが床に合わせて動かないようにするため。
で、これを実行すると…遅い!
150枚くらいで一気に処理落ちを始めました。。
OnCollisionEnterがダメなんかなあという事で以下のコードを実行
void Update ()
{
// 落ちたコインを消す
if (this.transform.position.y < -10) Destroy(this.gameObject);
}
void OnCollisionEnter(Collision c)
{
}
実行結果…ほんの少し良くなった気がするが相変わらず遅い!
というか、これだけでも遅くなる事を知りませんでした。めらんは50の経験値を得た。
それはさておきOnCollisionEnterが使えないので、以下のように騙しを入れることに・・・
void Update()
{
if (this.transform.position.y < 6)
{
if (this.transform.position.y < 2.3f)
{
if (this.transform.position.y < -10)
{
// 落ちたコインを消す
Destroy(this.gameObject);
}
else
{
this.transform.parent = null;
}
}
else
{
// parentに動く床をセット。this.ParentPusherは動く床(GameObject)
this.transform.parent = this.ParentPusher.transform;
}
}
}
ちょっと書き方がアレかも知れませんが、なんのことはない、Updateに処理を移動しただけです。
空中でコインが移動してしまいますが、実際にやってみると意外と気にならなかったのでこれでよし。
で、実行結果・・・多少改善されたけど250枚くらいで一気に処理落ち・・・orz
・・・まあ思いつく事はやろうという事で以下のように修正して実行。
void Update()
{
if (this.transform.position.y < 6)
{
if (this.transform.position.y < 2.3f)
{
if (this.transform.position.y < -10)
{
// 落ちたコインを消す
Destroy(this.gameObject);
}
else
{
if (this.transform.parent != null) this.transform.parent = null;
}
}
else
{
// parentに動く床をセット。this.ParentPusherは動く床(GameObject)
if (this.transform.parent == null) this.transform.parent = this.ParentPusher.transform;
}
}
}
parentを設定する前に、ifで確認するようにしました。
で、実行結果・・・約650枚投入しても大丈夫!キタ━(゚∀゚)━!
※何故650かと言いますと、今の仕様上コインをガンガン投入しても溜まるのは650枚ほどになる為デス。
というわけで、
・OnCollisionEnterなどはやはり重い。メソッドを記述しただけで重い。
・Transform.parentに何かを代入するのは意外と時間を食う。
という結論。そんなメモでした。
なお、null以外の代入(↑の20行目)に結構な時間がかかるようですが、
nullを代入(↑の14行目)する時も少し時間がかかるようです。(nullが入ってる時にnullを入れる場合も同様)
それと余談ですがこれのコインは1枚につきBoxCollider1個しかついてません。
最初はCylinderに合わせて10個付けてたりしましたが…重い以前に滑りが悪い…
(2個しか接地しないようにしてもやはり滑りが悪かった)
やっぱり物量ある方がきっと楽しいですよね。ゲーセン行きたくなってきた・・・!