1. 程式人生 > >[Unity3D]簡單的UGUI滑條控制物體移動

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