[Unity3D]簡單的UGUI滑條控制物體移動
阿新 • • 發佈:2018-12-26
滑條控制物體移動
在做作業的時候需要用滑條控制物體的直線滑動,簡單寫了一下,在這裡分享一下
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;
}
}
}