スフィアウォーズ:古典的なゲームプログラミングのユニティ

著作権:

  • :ブログパーク「あなたはメーカーの文化を夢、」ブログのスペース(URLに掲載された記事http://www.cnblogs.com/raymondking123/とマイクロチャネル公共番号「夢のメイカーズムーブメント」)
  • あなたは転載は自由ですが、完全な著作権表示を含めなければなりません!

まず第一に:

  • ALT +マウスドラッグビューの回転
  • マウスの中央ボタンを押したままマウスを移動し、ビューをパンすることができます
  • 押して、マウスの右ボタンを押したままにすると、wasdqe 6は方向に移動させることができます

  • 階層ビューでは、マウスの左ボタンは、複数のオブジェクト、動作を選択するために、別のオブジェクトを選択するオブジェクト、Shiftキーを押し、その後、マウスの左ボタンを選択します。コンポーネントはすべて、右側のインスペクタは、コンポーネントを追加するため、この時点で添加することができるゲームオブジェクト

  • メートルで統一のデフォルトのゲーム
  • デフォルトでは、10メートルの長さおよび幅面デフォルトカプセル1 m 2のプラス半球シリンダの1M組成キューブ球であります
  • 団結スカイボックスはまた、いくつかの(すべての方向に弱い光)天窓を提供します

  • グローバル座標系とのシーンは(世界のようなシステムの選択座標)座標系は常に一貫しています
  • ローカル座標系は、常にオブジェクト自体の方向に平行のままで

  • パースビューは、はるかに小さいの近くに、透視モードであります
  • ISOは、平行投影であります

  • 材料の材質

  • 色によって得られた物体光として色が最終的にユーザに表示(色成分が乗算され、オブジェクトが赤色である理由は、赤色光を反射するため)

  • Time.timeScale //時間の経過のサイズ。これは、スローモーション効果のために使用することができます
  • タイムスケールは、リアルタイムとして1.0倍の速さであるとき。ときにタイムスケールは、実際の時間よりも2倍遅く、0.5です。
  • タイムスケールは、ゼロに設定されている場合、すべての機能は、フレームレートから独立している場合、ゲームは基本的に懸濁しました。
  • さらにrealtimeSinceStartupでは、タイムスケールは、時間の時間とデルタ時間測定変数のすべてのクラスに影響を与えます。
  • あなたはタイムスケールを減らす場合は、Time.fixedDeltaTimeは同じ量だけ低減されます。ゼロに設定すると、呼び出していません - fixedupdate

  • 小さなボールが移動します。
    private void FixedUpdate()
    {
        Time.timeScale =0.5f;      //子弹时间,加速减速均可用该值实现
        if (Input.GetKey(KeyCode.LeftArrow))            //unity事先就检测到了所有按键,所以在这可以直接判断按键是否按下,用if判断就可以同时施加不同方向上的力   //GetKey是检测按键的持续情况,GetKeyUp和GetKeyDown是只有在按键的上、下边缘才会检测,可以做触发器,但不宜实时控制运动
        {
            rigidbody.AddForce(-moveForce * Time.fixedDeltaTime, 0, 0);   //乘以FixedDeltaTime的意义就在于时间可以缩放,加了个权重
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            rigidbody.AddForce(moveForce * Time.fixedDeltaTime, 0, 0);
        }
        if (Input.GetKey(KeyCode.UpArrow))
        {
            rigidbody.AddForce(0, 0, moveForce * Time.fixedDeltaTime);
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            rigidbody.AddForce(0, 0, -moveForce * Time.fixedDeltaTime);
        }
        if (Input.GetKey(KeyCode.Space))
        {
            rigidbody.AddForce(0, jumpForce * Time.fixedDeltaTime, 0);
        }
    }
  • フィジック材質//物理学材料は、摩擦や衝突オブジェクトのリバウンド効果を調整するために使用されます。//プロパティ属するコライダー
  • プロパティ:機能:
  • 摩擦力の移動動摩擦が使用されてきました。0から1への通常値。ゼロの値は氷のように感じて、1の値は、重力の大量または押し出しオブジェクトがない限り、停止することが非常に速くなります。
  • 表面上の摩擦力用いる静摩擦静止物体。典型的には0と1の間の値。ゼロの値は氷のように感じて、1の値は、オブジェクトが非常に困難に移動する原因となります。
  • どのように弾力性の表面リバウンド?0の値は、リバウンドしません。エネルギーを失うことなく1リバウンドの値が、あなたは、いくつかの近似値を期待することができますが、これは、エネルギーシミュレーションがわずかに増加することがあります。
  • どのように2つの衝突オブジェクトの摩擦の摩擦組み合わせ。
    -平均値は、2つの摩擦の平均です。
    -最小のいずれかで、これらの2つの値の最小使用。
    -最大のもので、これらの2つの値の最大使用。
    -乗算摩擦値は、互いに乗算されます。
  • どのように二つの物体の弾性衝突の組み合わせをバウンスします。これは、摩擦パターンの同じ組み合わせパターンを持っています
  • 表面摩擦の量が互いに脱落することが防止されます。あなたがオブジェクトをスタックしようとすると、この値は非常に重要です。静と動摩擦の2つの形態があります。静止摩擦は、静止オブジェクトを使用する場合。これは、オブジェクトが移動し始め防ぐことができます。十分な力がオブジェクトに適用されている場合は、それが移動を開始します。この時、動摩擦が役割を果たします。動摩擦は現在、他のオブジェクトと接触した物体の速度を遅くしようとします。
  • 2つのオブジェクトがそれらの両方の弾性と摩擦に同じ効果を適用する選択されたモードに応じて、接触したとき。衝突がモード設定の二つの異なる組み合わせと接触しているとき、特別な場合があります。この特定のケースでは、最も優先順位の高い機能を持ちます。優先順位の次の順序:平均<Minが<<最大値を掛けました。材料は平均値を有するが、他方が最大値を有する場合、それは、より高い優先順位を有するので、例えば、合成関数が最大値で使用する必要があります。//力は、相互になるように2つの方法は異なるオブジェクト、異なる摩擦計算であるが、等しくかつ反対の摩擦力の二つの物体に適用される摩擦係数

  • カメラは、我々はロータリーの影響を受けることを望まない子のように、小さなボールの動きと回転の影響を受ける場合には、移動するボールをたどるので、我々はちょうどすることができ、ボールの位置を追跡するためにカメラを移動する必要がありましょう://平行四辺形はモバイル

public class MainCamera : MonoBehaviour
{
    public Transform player;

    private Vector3 offset;
    private Vector3 playerStartPosition;
    private Vector3 cameraStartPosition;
    // Start is called before the first frame update
    void Start()
    {
        playerStartPosition = player.position;
        cameraStartPosition = this.transform.position;

        offset = this.transform.position - player.position;
    }

    // Update is called once per frame
    void Update()
    {
   //     this.transform.position = cameraStartPosition + (player.position - playerStartPosition);            //用Offset和相机起始位置偏移均可,因为是个平行四边形
        this.transform.position = player.position + offset;
    }
}
  • 小道具を食べたときにボールの速度に影響を与えないようにするために、小道具をトリガーに設定する必要があります

  • 衝突性能の最適化:すべての静的オブジェクトの衝突の影響を計算するためにメッシュに対応//衝突メッシュモデルではなく、描画するためだが、動的オブジェクトが衝突静的オブジェクトである場合、静的メッシュを生成します反応は、グリッドに基づいてどのように動的なオブジェクトを行いました
  • すべての静的および移動衝突体が各フレーム算出された衝突の体のために保存することができないように計算され、静的なユニティ・インパクターとインパクターシーンのすべてが団結にオーバーヘッドバッファを保存//、バッファに保持した後、ではありません各フレームは再び静的衝突体を算出します
  • 私たちの間違いは、小道具の回転を可能にすることです
  • 私たちは、移動、回転、静的インパクターを拡張するたびに、団結は再びすべての静的インパクターを再計算し、キャッシュ静的インパクターを更新し、キャッシュは、コスト再計算されます
  • 私たちは、任意のインパクター衝突体//動的な衝突をリアルタイムで計算され、再キャッシュではなく、移動、回転または動的衝撃と団結を拡張することができます
  • 我々は、動的に移動する前に、コライダーを宣言する限り、統一衝突体の移動を促します
  • これを行うために、私たちは剛体コンポーネントを使用し、衝突剛体との任意のゲームオブジェクトは、衝突の持つすべてのゲームオブジェクトとコンポーネントが静的であると考えられていない剛体で、ダイナミックであると考えられているが、我々小道具は、静的であると考えられるので、Unityは各フレームバッファ静的インパクターを再計算します
  • ソリューション:
  • 、実際には、小道具として剛体を追加し、動的衝突デバイスになり、
  • ない重力が、どのコースが物理的な力の他の種類によって影響を受けるものの、このキューブにキューブを落下キューブを防止する、剛体重力があるので、我々は偽= rigidbody.useGravityを設定することができ、落下したが、今回ますそして物理的なオーバーヘッドをもたらすでしょう
  • よりよい解決策を設定することです:Rigidbody.IsKinemaitcを=はtrue。
  • 動剛体は、物理的な力によって影響を受けるが、唯一の影響を受けたグラフィック変換(例えばアニメーションおよびアセンブリが変換など)されていない
    優れたトリガまたはインパクターと、オブジェクト上で使用される、又は昇降台の自動移動でありますグラフィックアニメーション(ない物理計算)を達成します

  • 要約:
    • 静的オブジェクトは、剛体を持つべきではありません
    • 動的オブジェクトは、剛体必要があります
    • 物理的な力によって影響を受ける剛体は、デフォルトの設定を使用する必要があります(falseにキネマティック)
    • パターンによって影響を受ける剛体trueにキネマティック変換を設定しなければなりません。

おすすめ

転載: www.cnblogs.com/raymondking123/p/11314972.html