B 45-プレイヤーの物理的な問題を修復する


//出所はゴールドメタルの講座!
//了解:最初から対象物のfreeze positionをチェックすると、
重力は適用されません.

To do List
  • の外部衝突でプレイヤーが回転していることが分かった.
    今日はこの問題を改めましょう.
  • ハンマーは、総vsプレイヤーの衝突を防止するが、取得しなければならない.
  • 弾殻vsプレイヤーの物理処理をキャンセルします.
  • 壁衝突防止:rayを使用します.
  • 自動回転防止

  • FreezeRotation関数を作成します.
    物理回転数をゼロにして、自転現象を解消します.
    =>リチャードボディを設置して回転も防いでいるのではないかと思います.
    実験をしましょう.
    これは車にぶつかって回転したときに転んだ様子です.
  • コードを適用して再実行して実験を行う.

    -適用されたとしても、転ぶ…上のフリーサイクルに設定するようです.

    	void FreezeRotation()
        {
            //물리 회전속도를 0으로 만들어서 스스로 도는 현상을 제거함.
            rigid.angularVelocity = Vector3.zero;
        }
    
        //0311 추가함.
        void FixedUpdate()
        {
    		FreezeRotation();
        }

    コンフリクトレイヤーの設定


    :プレイヤーが弾壳などにぶつかると、プレイヤーは回転します.
    弾殻とプレイヤーが衝突しないように物理層を設定します!

  • 競合を設定するレイヤーを追加します.



  • 上に設置された4つのフリーカーにlayerを設置
    プレイヤーはプレイヤー/床は床/弾殻は弾殻/弾は弾

  • そしてプロジェクト設定で物理に行きましょう~
    ≪レイヤー競合リスト|Layer Collision List|oem_src≫:レイヤー間の競合を設定します.

    上は私が直接設定した値が衝突しているかどうかの設定です.
    だから、「BulletCase」/「弾殻」なら、
    残りは衝突を処理しないという意味だ.

    =>再度運転し、発砲し、その後弾殻を通過し、以前とは異なる衝突処理が行われていないことが確認できます!

  • 遊ぶときに知っていることレイヤーを銃にセットし、プレイヤーと
    衝突を起こさせないようにしてみました.でもそうすると銃も持てない.
    トリガ動作自体が物理的な動作であるため,レイヤ設定の影響を受ける可能性がある.
    海達問題は異なる程度の解決が必要らしい.

  • 壁の衝突を防ぐ


  • プレイヤーが壁に突き進むと、壁を突き刺すという問題があります.

  • Debug.DrawRay関数を使用して...コードを追加し、実行後に確認します.
    //3番目のパラメータのデフォルト値は白です.


  • こうやって出てきました!このレーザーを利用しましょう.


  • Physics.Raycast関数を使用します.


  • move関数がここで使用されている場合...問題が発生する.
    壁にぶつかると、キャラクタが回転できないという問題が発生します.


  • どこにいるの??ここに追加して、回転台に回転して、移動を阻止します!


  • 壁レイヤを追加して実行すると、壁の前から前に伸びます.
  • アイテム競合の削除


    =>プレイヤーと衝突するたびに更新されるのではなく、重力処理後の物理効果
    不要なので、床とぶつかるときは、物理的効果を消すようにしましょう!

  • プレイヤーがアイテムを取得せずに衝突すると、プレイヤーは回転し、
    道具が倒れそうだ!

  • コードを追加します.

  • 物理を担当する衝突機アセンブリはisTriggerが検査した衝突機の上にある必要があります.

  • MoveUpを押して上に置きますこのときOpenPrefabモードで行いましょう


  • なぜ2つの変数を使用しますか?
    is運動学は物理を使用しないことを示す(trueでなければならない).
    衝突とは、衝突ポートを使用しないことです.
    collision.enabledがfalseでない場合、競合する相手は物理的に処理され、処理も必要です.
    =>地面に衝突すると重力の効果が完了するので、物の物理は不要になります.