Unity学习笔记--PanelUI制作一个转速表

先上一下效果图:

(图片是百度随便搜的,简单糊了一下)

  1. 场景里放置Plane平面 自己可以随便放置,改改颜色,或者加个贴图当作地板就好了;
  2. 新建一个Cube,也可以随便改改颜色,醒目一点,我是看到个好看的彩虹条就贴上去了,记得添加Rigibody组件;
  3. 调整摄像机角度与位置,最好在物体后方,并且添加跟随代码:
    相机的插值跟随可以参考我之前的帖子:《摄像机的插值跟随》
  4. 调整窗口2D显示,并在Hierarchy中新建UI→Canvas组件,调整其到合适位置:
    Unity学习笔记--PanelUI制作一个转速表_第1张图片
    在Canvas里右击新建Panel组件,然后在panel属性中得Image组件里得Source Image中选择我们下载的转速表图片,根据需要调整位置、尺寸等;
    (注意,这里的图片最好改成JPG格式,也就是在Project中会看到个下拉箭头,这样才可以被panel使用)
    在这里插入图片描述

Unity学习笔记--PanelUI制作一个转速表_第2张图片
5. 在Panel下新建一个空的GameObject组件,并在下方新建Image组件,调整颜色与形状大致成指针状,调整其父子关系的位置,使GameObject可以绕着表盘的中心转动;
Unity学习笔记--PanelUI制作一个转速表_第3张图片
6. 为GameObject添加代码:其中ShowSpeed()要为public,方便我们在运动代码中调用;

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);
    }
}

因为控制代码中使用了“Vertical与Horizontal”,所以可以用上、下、左、右,或W、S、A、D进行控制了;

注意:
Cube中的Rigibody组件,最好限制下Y轴的垂直运动,要不然会不受你控制的。

你可能感兴趣的:(unity,游戏开发,unity,canvas,unity3d)