unity制作动态摇杆

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


public class YAOGAN : MonoBehaviour {
    private Vector2 firstPos;//点击时候的位置  
    private Vector2 lastPos;//上一个位置  
    private Vector2 currentPos;//下一个位置  
    public Image img;//
    public Image img2;//
    float timer;
    // Use this for initialization
    void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
	      
	}


    void OnGUI()
    {
        if (Event.current.type == EventType.MouseDown)
        {//滑动开始  
            firstPos = Event.current.mousePosition;//这个位置就是负责产生摇杆的
            lastPos = Event.current.mousePosition;
            currentPos = Event.current.mousePosition;
            timer = 0;
            //TODO click event  
            Debug.Log("Click begin && Drag begin");
        }
        if (Event.current.type == EventType.MouseDrag)
        {//滑动过程  
            currentPos = Event.current.mousePosition;
           // Debug.Log(currentPos+"点击的当前位置  屏幕高度" + Screen.height);
            if (timer == 0)
            {
                img.gameObject.SetActive(true);
                img2.gameObject.SetActive(true);
                currentPos.y = Screen.height - currentPos.y;//位移位置
                img.transform.position = currentPos;//位移位置
            }
            timer += Time.deltaTime;


            Vector3 offset;
            offset = currentPos - firstPos;//当前位置-第一次位置
            offset.y = -offset.y;//取负数
            offset /= 3f;
            if (offset.magnitude > 100f)
            {
                Debug.Log("大于100");
                img2.transform.position = img.transform.position + offset / offset.magnitude * 100f;
            }
            else
               img2.transform.position = img.transform.position + offset;
            
           lastPos = currentPos;
        }
        if (Event.current.type == EventType.MouseUp)
        {//滑动结束  
           // currentVector = slideVector.nullVector;
            Debug.Log("Click over && Drag over");
            firstPos = Vector2.zero;
            timer = 0;


            img2.transform.position = img.transform.position;


            img.gameObject.SetActive(false);
            img2.gameObject.SetActive(false);


        }
    }
}

被控制的对象通过获取ui位置差进行相关移动

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

public class PlayerTransform : MonoBehaviour {

  public   Transform pos1, pos2;
	// Use this for initialization
	void Start () {
	     
	}
	
	// Update is called once per frame
	void Update () {
        if (pos1.position.x - pos2.position.x == 0 || pos1.position.y - pos2.position.y == 0)
        {
            return;
        }
      this.transform.position += new Vector3((pos2.position.x - pos1.position.x)/20,0f,( pos2.position.y - pos1.position.y)/20);
    }
}

上面的摇杆放到手机上炸了。重新写了一个。已经考虑到屏幕适配

猜你喜欢

转载自blog.csdn.net/qq_22012149/article/details/54914182