GOSUKE FACTORY

何かの記録

2021/07/12 - 
MSC



 NSR50 を組み立て分解できるように作業をしています。Fredrik さんの PartMagnet System を改良して使ってたのですが、負荷がかかった時のパーツが外れる動作で問題が発生したので、Joint を使わない方法でやってみました。上記の動画は、Joint を使ってパーツ同士を接続した方の動画です。

 Joint で接続しているので各パーツに Rigidbody があるわけですが、これのせいで各パーツのコリジョンが重なっていると、オブジェクト同士が反発しあってふっとんでいったりしてしまいます。Rigidbody の is Kinematic を 変更してみたりしても変わらず、レイヤーで除外すればすんなり解決しそうですが、MOD でそれをいじると他で影響がでそうなのでいじれません。Unity Editor 上ではコリジョンが重なってても問題ないのになぁ、なんでだろう。

 そういうわけで Joint を使わないで外部からの衝撃でパーツがちゃんと外れるようにしてみましたが、これができるまで結構大変でした。

 親に Rigidbody をつけて、子に各パーツを配置してそれにコリジョンをつけるわけですが、子に OnCollisionEnter をつけて当たり判定をとると、その子を取得するのではなく親が取得されるという仕様。OnTriggerEnter こちらの方はちゃんと子を取得できますが、どれくらいの力で互いに衝突したのかが必要なのでこちらは使えません。子のパーツに Rigidbody をつければちゃんとその子が取得されますが、そうするとコリジョンが重なっていると挙動が不安定になってしまう。

 そこでどうしたものかと調べたら、Collision.contacts なるもの使うといいらしく


foreach (ContactPoint col in collision.contacts)
{
	ModConsole.Print(col);
}


collision.contacts[0].thisCollider.transform.gameObject

 こんな感じで取得できるそうで、下の方がすっきりしてるのでそちらを使う事にしました。ぶつかった時の衝撃力の取得方法は下記の通り。共に、OnCollisionEnter 内に書きます。


collision.relativeVelocity.magnitude


参考リンク
  • onCollisionEnter does not work on a child colider - Unity Forum (Unity Forum)
  • Unity: how to detect collision occuring on child object, from a parent script? - Game Development Stack Exchange (Game Development Stack Exchange)



  • 2021/05/18 - 
    MSC
     GetComponentsInChildren() の引数を true にする。

    
    ignore_collList.AddRange(gameObject.GetComponentsInChildren<Collider>(true));
    

    2021/05/15 - 
    MSC
     ハンドモードとツールモードのキーを変更できるようにしました。左手でマウス・右手でテンキーを使っているので、デフォの設定の数字キーだと非常に使い辛い。

    keybind for tool mode
    2021/05/02 - 
    MSC


     NSR50 をオフ車に改造するパーツのモデリングが終了したので、ゲーム内で確認。動作に問題はなさそうなので、次は NSR50 を分解できるようにパーツを作り直す作業です。交換するパーツの個所だけをばらせるようにするか、全部ばらせろるようにするか、悩む。

     理想は、SATSUMA みたく全部ばらばらにして、組み立てる作業からとしたいところですが、完成までにすごく時間がかかりそうで途中で断念しそうな気がする。それにどうせそこまでやるのなら、NSR50 よりカワサキの Z 系バイクを作成したいしなぁ。

    2021/05/02 - 
    MSC
     自分のサイトの更新をするのを、すっかりと忘れていた。

    BOX for My Summer Car
    • 蓋付きの箱を追加


    2021/04/16 - 
    MSC
    
    GameObject[] targetObjects = GameObject.FindGameObjectsWithTag("Untagged");
    

     こういう感じで、Untagged の GameObject を検索しようとしたら動作しなかった。何故か Untagged だと無視されてしまう。なので、以下の様にする。

    
    var gameObjects = Object.FindObjectsOfType<GameObject>();
    
    foreach (GameObject gameObject in gameObjects)
    {
        if (gameObject.CompareTag("Untagged"))
        {
    
        }
    }
    

     [1]・23 次5最後


    RSS 1.0 Youtube Twitter



     当サイトはPC版ゲームのMODを中心に取り扱うなか、私gosukeのたわ言をつらつらと記録しています。(MODとはModification、元のゲームに様々な要素を追加・改変する事で、オリジナルのゲームよりさらに楽しめる幅が広がります。)

     また、リンクフリーではありますが、ファイルへの直リンクは出来ればご遠慮お願い致します。バナーでリンクする場合は下にあるバナーを使用して下さい。

    管理者:gosuke

    banner

    意見、要望、感想、叱咤、激励、などなどありましたら下の意見箱からメッセージをどうぞ。
    意見箱