[Unity3D]简单的UGUI滑条控制物体移动

滑条控制物体移动

在做作业的时候需要用滑条控制物体的直线滑动,简单写了一下,在这里分享一下

1、效果

[Unity3D]简单的UGUI滑条控制物体移动_第1张图片

2、用法

  • 创建一个canvas
  • 在canvas上创建一个slider,命名为Mslider
  • 给Mslider加上MySlider脚本
  • 将目标物体赋给target
  • 将Mslider的slider组件拖动赋给MySlider脚本的slider
  • 选择移动方向,目前有X、Y、Z三格方向可选择
  • 设定left_bottom_back和right_top_forward变量,控制移动的范围,left

3、脚本

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

public enum Axis
{
    X,
    Y,
    Z
}
public class MySlider : MonoBehaviour {
    public GameObject target;//要移动的物体
    public Slider slider;//slider组件
    public Axis axis = Axis.X;//按照此轴进行移动
    public float left_bottom_back = 0;//左边界
    public float right_up_forward = 1;//右边界
    private float D_value;//左右边界的差值

    void Start () {
        D_value = right_up_forward - left_bottom_back;
        //以下是将物体的初始位置设为slider的初始位置
        switch(axis)
        {
            case Axis.X:
                target.transform.position += new Vector3(-target.transform.position.x + left_bottom_back + D_value * slider.value, 0, 0);
                break;
            case Axis.Y:
                target.transform.position += new Vector3(0, -target.transform.position.y + left_bottom_back + D_value * slider.value, 0);
                break;
            case Axis.Z:
                target.transform.position += new Vector3(0, 0, -target.transform.position.z + left_bottom_back + D_value * slider.value);
                break;
        }

        slider.onValueChanged.AddListener(delegate{ this.handleValuChange(); });
        if(!target)
        {
            Debug.Log("missing target!");
        }
        if (!slider)
        {
            Debug.Log("missing slider!");
        }
    }

    public void handleValuChange()
    {
        //当slider的value改变时,调用这个函数,并改变物体的位置
        switch(axis)
        {
            case Axis.X:
                float Xpos = left_bottom_back + D_value * slider.value;
                target.transform.position += new Vector3(-target.transform.position.x + Xpos, 0, 0);
                break;
            case Axis.Y:
                float Ypos = left_bottom_back + D_value * slider.value;
                target.transform.position += new Vector3(0, -target.transform.position.y + Ypos, 0);
                break;
            case Axis.Z:
                float Zpos = left_bottom_back + D_value * slider.value;
                target.transform.position += new Vector3(0, 0, -target.transform.position.z + Zpos);
                break;
        }
    }
}

你可能感兴趣的:(Unity学习)