Unityの研究ノート--PanelUIはタコメーターを作成します

まず、レンダリングを
ここに画像の説明を挿入
アップロードしましょう:(写真はBaiduによって何気なく検索され、単にぼやけていました)

  1. 平面平面をシーンに配置します。平面を気軽に配置したり、色を変更したり、床としてテクスチャを追加したりできます。
  2. 新しいキューブを作成します。色を自由に変更して、目を引くようにすることもできます。素敵なレインボーバーを見つけて投稿しました。忘れずに、Rigibodyコンポーネントを追加してください。
  3. カメラの角度と位置を調整します。オブジェクトの後ろに配置するのが最適です。次のコードを追加します。
    カメラ補間フォロー以前の投稿「カメラ補間フォロー」を参照できます。
  4. ウィンドウの2D表示を調整し、階層に新しいUI→Canvasコンポーネントを作成し、適切な位置に調整し
    ここに画像の説明を挿入
    ます。Canvasで新しいPanelコンポーネントを右クリックし、[ソース画像]でダウンロードしたタコメーター画像を選択します。パネルプロパティの画像コンポーネント、必要に応じて位置、サイズなどを調整します
    (ここの画像はJPG形式に変更するのが最適です。つまり、プロジェクトにドロップダウン矢印が表示されるため、パネルで使用できること)
    ここに画像の説明を挿入

ここに画像の説明を挿入
5.パネルの下に空のGameObjectコンポーネントを作成し、下にImageコンポーネントを作成し、色と形状を調整して大まかにポインタを作成し、親子関係の位置を調整して、GameObjectがの中心を中心に回転できるようにします。 dial;
ここに画像の説明を挿入
6. GameObjectコードを追加します。モーションコードで呼び出すことができるように、ShowSpeed()はパブリックである必要があります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotate : MonoBehaviour
{
    
    
    static float minAngle = 0.0f;
    static float maxAngle = -180f;   //0-180代表表盘旋转的角度
   static Rotate thisSpeed0;
    // Start is called before the first frame update
    void Start()
    {
    
    
        thisSpeed0 = this;
    }
    // Update is called once per frame
    public static void ShowSpeed(float speed, float min, float max)
    {
    
    
        //将速度与指针转动角度对应起来
        float ang = Mathf.Lerp(minAngle, maxAngle, Mathf.InverseLerp(min, max, speed));
        //添加旋转   可以在ang后乘以个常数用来调节转动效果
        thisSpeed0.transform.eulerAngles = new Vector3(0, 0, ang*10f);
    }
}

  1. モーションコードをCubeに追加します(上部のShowSpeed()関数を呼び出す必要があります)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class move : MonoBehaviour
{
    
    
   public float speed=0;
    float h = 0;
    Rigidbody rg;
    
    // Start is called before the first frame update
    void Start()
    {
    
    
        rg = this.GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
    
    
        float v = Input.GetAxis("Vertical")*0.3f;//垂直轴
        h = Input.GetAxis("Horizontal");//水平轴
        for (int i = 0 ; i < 10; i++)
        {
    
    
            speed *= v;
            movetion();
            speed++;
        }
        movetion();
        Rotate.ShowSpeed(rg.velocity.magnitude, 0, 100);
    }
   private void movetion ()
    {
    
    
       rg.AddForce(h, 0, 2* speed);
    }
}

制御コードでは「垂直および水平」が使用されているため、上、下、左、右、またはW、S、A、Dを使用して制御できます。

注:
キューブ内のリジボディコンポーネントの場合、Y軸の垂直方向の動きを制限することをお勧めします。そうしないと、制御できなくなります。

おすすめ

転載: blog.csdn.net/qq_42434073/article/details/111941068