スタジオおふとん

プログラミング系

Unityの話(コード系)

間違っているかもしれないので、あんまり参考にしないこと。

自身を動かす

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);
        }
    }

衝突判定 - unity学習帳

効かないんだけど!!!

上の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」

[Unity] 重力についてあれこれ | ftvlog

重力のせいであらぬ方向にいっちゃうんだけど

RigidbodyのConstraintsの中にあるFreeze Positionで、動かしたくない座標にチェック