AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

斬撃

Unityちゃんに剣をもたせる
剣にコライダーを付ける
斬撃アニメーションで剣を振る
ターゲットに衝突して、OnTriggerEnter()で、
衝突箇所に赤いキューブを配置して、アニメーションを一時停止する

けっこう剣が突き刺さってからEnterが発生してますね。
f:id:yasu9780:20161106231742p:plain

    void OnTriggerEnter(Collider other)
    {
        if (other.name == "Sword")
        {
            Instantiate(ato, other.transform.position, other.transform.rotation);
            GameObject.Find("unitychan").GetComponent<animeTest>().stopAnime();
        }
    }

わかりやすいようにターゲットを非表示にする
f:id:yasu9780:20161106231751p:plain

剣のコライダーはこんな感じ
f:id:yasu9780:20161106231756p:plain

実際は当たった場所ではなくて、当たってきたオブジェクトの座標なので、剣の重心位置に赤いキューブができている。
厳密に当たった場所を特定するなら、剣のコライダーを細かく分割するか、ターゲットのコライダーを細かく分割する必要がありますね。


剣のコライダーを分割したら、先っぽがまず当たってますね。
実際はターゲット側を分割して、部位によってダメージを変えたり、防御の判定をしたりって感じですね。
今回はtriggerですが、rigidbodyにしてcolliderにすると、打突でものを吹っ飛ばしたり物理エンジンらしい遊びができますが、
剣を右手にFixedJointで接続したり、いろいろと必要なことが増えますね。
f:id:yasu9780:20161106233344p:plain

衝突の精度を上げようと思って、InterpolateやCollisionDetectionをいじったら、
IsKinematicなのに、コライダーが剣からはがれますね。謎。
右手にrigidbodyつけてFixedJointしたけど変わらない。謎。