Unity ゲームオブジェクトの親子関係
JSで書いた場合、この処理ではclone(コピーしたパーティクル)情報は、死なない。
コピーのタイミングで親子関係が解除される。
->親子関係はtransform.parentで持っているので当たり前だけど。
var particle : GameObject;
function OnCollisionEnter ( collisionInfo : Collision ) {
GameObject.DestroyObject ( gameObject );
var clone : GameObject = Instantiate ( particle, transform.position, transform.rotation ) as GameObject;
}
ただ、似たような処理をC#で描く場合、Instantiateの呼び出しが
Instantiate (particle, gameObject.transform)
transform直渡しになり、parentもコピーされているようで、クローンが子供として生成される。
だから、親を殺すと子供も死ぬ。
JSと同様の流れにしたいなら、
// パーティクルプロパティをコピー
GameObject clone = Instantiate (particle, gameObject.transform) as GameObject;
// 親子関係を解除
clone.transform.parent = null;
// 親を殺す
GameObject.DestroyObject (gameObject);
// 子供の死ぬタイミングを予約
DestroyObject (clone,2f);
こんな感じ。
PHP拡張 EXCEPTIONでcoreをはいたとき。。。
PHP拡張機能の開発をしていて、情報があまりに少なくつまずいた箇所その1です。
状況
・PHP拡張機能にてエクセプションを利用
・コンパイル後、実行すると不定期にcoreダンプで落ちる。
※特にapache経由での実行ではほぼ100%
原因
・zend_exception.hのインクルード漏れ
コンパイル中にもワーニングが出ていたんですが、
・スケルトンツールで作ったmakeファイルの出力が多かった
・テストスクリプトがなんとなく動いてた
為見逃していました。。。
ワーニングメッセージをちゃんと読んでたら怪しいとわかったはずなのに。。。
警告: passing argument 2 of ‘zend_register_internal_class_ex’ makes pointer from integer without a cast
結局はgdbでcoreを解析。
問題解決に至りました。
解決のネタになったバックトレースは以下です。
zend_register_internal_class_ex( &tmpExp_ce,zend_exception_get_default(TSRMLS_C), NULL TSRMLS_CC)
zend_error(E_COMPILE_ERROR, "Interface %s may not inherit from class (%s)", ce->name, parent_ce->name);
これを見て、結局zend*.hをいろいろのぞいたり*.cを見ていてあっと。。。