間違っているかもしれないので、あんまり参考にしないこと。
自身を動かす
transformを使って、Updateでマイフレームごと動かす?
いろいろ方法はありそう。
Unity - スクリプトリファレンス: Transform
物体を出現させる(オブジェクトの動的生成)
Instantiate(prefab, 位置, 向き)
GetComponentってなんだ?
たぶんInspectorの情報をとってくるのではないだろうか。
後々コード上で、使う必要があるならば、Start関数でpublic変数にぶっこんでおくと楽できそう。
OnControllerColliderHit関数
移動中にコントローラーがコライダーにヒットしたときに呼び出される関数。
なにそれすごい。
他にもOnhogehoge関数はいっぱいあるので見ておくといいかも。
定石
void OnControllerColliderHit(ControllerColliderHit hit) // 当たった相手が引数になる { if(hit.gameObject.tag == "Enemy") // 相手にtagをつけておくと、簡単に判別できる { Destroy(hit.gameObject); } }
効かないんだけど!!!
上のwikiにも書いてあるけど、OnControllerColliderHitは「物体が動いている間だけ」呼び出しが発生する 。
つまり、objectが静止状態のときには呼ばれない。
とりあえず何でもいいから当たったら動け!としたい場合は、
void OnControllerColliderHit(ControllerColliderHit hit)
と
void OnCollisionEnter(Collision hit)
と
void OnTriggerEnter(Collider hit)
の中で同じ動きしとけばOK.
感覚的には静止状態時はOnCollisionEnterに入ることが多い。
いやー、ハマったね
別objectにくっついている関数を使いたい
結構癖があってむずい。
以下の記事の下の方を参照するといい。
[Unity]他のスクリプトを参照する | CHO DESIGN LAB
もうちょい汎用的な使い方をするなら、
publicでrefObjを作っておいて、GetComponentはStartでやっておく。
その際、GetComponentを代入する変数はclassのメンバーとして作っておくと、いろんなところで使える。
重力を変えたい
「Edit」→「Project Settings」→「Physics」
重力のせいであらぬ方向にいっちゃうんだけど
RigidbodyのConstraintsの中にあるFreeze Positionで、動かしたくない座標にチェック