Unity Endless Runner の要点を記録する

 1. Array.IndexOf() は、配列内の指定された項目のインデックスを検索します。見つからない場合は、-1 を返します。

2. パーティクルがループで再生されていない場合は、パーティクルの再生が終了した後にパーティクルを破棄します。


if (!m_ParticleSpawned.main.loop)
    Destroy(m_ParticleSpawned.gameObject, m_ParticleSpawned.main.duration);

 

 

3. 左右にスライドするか、上下にスライドするかを検出 異なるモデルの画面比率を容易にするために、スライド距離と画面比率を使用して規格を統一します 


if (Input.touchCount == 1)
{
  //表示滑动
  if(m_IsSwiping)
  {
                //当前手指的位置-开始触碰的位置,得到一个当前滑动的距离
                Vector2 diff = Input.GetTouch(0).position - m_StartingTouch;
      
                //为了防止每个机型的分辨率不同,所以我们用到的是滑动距离与屏幕距离的宽高比例
                //这个效果非常好,大多数都能用到
                diff = new Vector2(diff.x/Screen.width, diff.y/Screen.width);
                if(diff.magnitude > 0.01f) 
                {
                    //如果y>x说明是竖直滑动
                    if(Mathf.Abs(diff.y) > Mathf.Abs(diff.x))
                    {
                        //屏幕坐标是左下角为(0,0),<0说明是往下滑
                        if(diff.y < 0)
                        {
                            Slide();
                        }
                        else//否则是往上跳
                        {
                            Jump();
                        }
                    }
                    else
                    {
                        //说明往左滑,切换跑道
                        if(diff.x < 0)
                        {
                            ChangeLane(-1);
                        }
                        else
                        {
                            ChangeLane(1);
                        }
                    }
                        
                    m_IsSwiping = false;
                }
   }
         
            if (Input.GetTouch(0).phase == TouchPhase.Began)
            {
                m_StartingTouch = Input.GetTouch(0).position;
                m_IsSwiping = true;
            }
            else if(Input.GetTouch(0).phase == TouchPhase.Ended)
            {
                m_IsSwiping = false;
            }
}

 

4. キャラクターに影を付ける ジャンプやスライディングをしている場合はキャラクターの位置から下方向に光線が放射され、衝突オブジェクトがある場合は衝突オブジェクトに影が生成されます。 


        RaycastHit hit;

        if(Physics.Raycast(characterCollider.transform.position + Vector3.up, Vector3.down, out hit, k_ShadowRaycastDistance, m_ObstacleLayer))
        {

            blobShadow.transform.position = hit.point + Vector3.up * k_ShadowGroundOffset;

        }
        else
        {

            Vector3 shadowPosition = characterCollider.transform.position;
            shadowPosition.y = k_ShadowGroundOffset;
            blobShadow.transform.position = shadowPosition;

        }

 

 5. カスタム パラメータを使用してアニメーションの再生速度を表現します

​​​​​

6.

将来、位置に新しい値を割り当て、その x 値のみを変更し、y 値と z 値を変更しない場合は、position=position+Vector3.left*0.5 を使用できます。これにより、新しくなり、コードがより簡潔になります。

 

 7. 指定されたボックスに接触する、または指定されたボックスに含まれるすべてのコライダーを検索し、結果キャッシュに保存し、その番号を返します。


public static int OverlapBoxNonAlloc(Vector3 center, Vector3 halfExtents, Collider[] results, Quaternion orientation = Quaternion.identity, int mask = AllLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

​
  • 中心
  • ボックスの中心。衝突体の重心を与えます。
  • 半分の範囲
  • 各次元のボックスのサイズの半分 衝突ボディのサイズの半分
  • 結果
  • 結果を保存するバッファ。衝突または接触衝突ボディのサイズを保存するバッファ
  • オリエンテーション
  • ボックスの回転 ボックスの回転
  • レイヤーマスク
  • レイをキャストするときにコライダーを選択的に無視するために使用されるレイヤー マスク。どのレイヤーのオブジェクトとも相互作用しませ
  • クエリトリガーインタラクション
  • このクエリがトリガーにヒットするかどうかを指定します。トリガーと衝突するかどうかを指定します。

 

8.

 リストと同様に、配列も Unity で追加および削除できますが、リストよりも時間がかかります

ArrayUtility クラスは配列の追加、削除、検索を行う

 

9. 二分検索 list.BinarySearch(T item) は、順序付きリスト内の項目を検索します。見つかった場合は、その位置のインデックスを返します。見つからなかった場合は、負の数を返します。


	public int GetScorePlace(int score)
	{
		HighscoreEntry entry = new HighscoreEntry();
		entry.score = score;
		entry.name = "";

		int index = highscores.BinarySearch(entry);
       
		return index < 0 ? (~index) : index;
	}

 

 10. 

Random.InitState(int seed) は乱数の状態を初期化します。数値をランダムに選択します。それを取得するたびに、それは順列と組み合わせの方法とみなすことができます。取得するたびに、順列の方法が変更されます。したがって、並べ替えたり組み合わせたりする方法はたくさんあるため、毎回ランダムに取得される数値は異なる可能性があります。

Random.InitState(int seed) は、順列と組み合わせのメソッドを対応するシードに格納するもので、たとえば 132 という数字を 3 つランダムに選択するという取り方で、つまりこのメソッドはシードに相当します。配列方法がシードである限り、取り出される数は132個です。シードを毎回異なるものに変更することもできます。つまり、毎回取られる順列と組み合わせが異なり、乱数も異なります。

乱数の初期化に使用できます。たとえば、多くのシーンがあります。異なるプレイヤーが同じシーンに入りますが、シーン内のいくつかの小さなオブジェクトは異なります。毎回シードを変更することで、異なるオブジェクトを実装できます。

一般に、system.DataTime.Now.Ticks はシードを表すために使用されます。

Random.range(float a, float b) には a と b を含めることができます

Random.range(int a, int b) a は含まれますが b は含まれません

  • 半径 1 の円内のランダムな点を返します (読み取り専用)。
  • 半径 1 の球内のランダムな点を返します (読み取り専用)。
  • 半径 1 の球の表面上のランダムな点を返します (読み取り専用)。
  • ランダムな回転を返します (読み取り専用)。
  • 一様分布のランダムな回転を返します (読み取り専用)。
  • 乱数発生器の完全な内部状態を取得/設定します。
  • 0.0 [両端を含む] ~ 1.0 [両端を含む] の範囲の乱数を返します (読み取り専用)。

静的メソッド

  • HSV およびアルファ範囲からランダムな色を生成します。
  • シードを使用して乱数ジェネレーターの状態を初期化します。
  • min (両端を含む) と max (両端を含む) の間のランダムな浮動小数点数を返します (読み取り専用)。

 

 11.

RenderSetting クラスは、アンビエント ライト、フォグの色、フォグがオンかどうか、スカイ ボックスなど、Unity のグローバル レンダリングのプロパティを設定するために使用されます。

おすすめ

転載: blog.csdn.net/qq_37672438/article/details/105047027