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を見ていてあっと。。。