手写摇杆
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
/// <summary>
/// 写的是一个摇杆的代码
/// 步骤和使用
/// 1.因为代码使用了锚点坐标 所以要调节锚点 (使用的是固定为左下角)
/// 2.代码是要挂在摇杆后面哪个背景图上的
/// 3.背景图要直接在canvas下,不能在他上面套其他的东西,空对象也不行
/// </summary>
public class Rocker : MonoBehaviour,IDragHandler,IEndDragHandler
{
    public GameObject player;
    //鼠标拖拽遥感的偏移值 (偏移值是一个静态变量 可供外部获取,做移动等需求)
    public static Vector2 offset;
    //摇杆后的一个图片   和   摇杆
    RectTransform backGround, rock;
    //半径 (可拖拽的距离范围)
    float r;
    bool isdrag;
    Vector2 pos;
    void Start()
    {
        rock = transform.GetChild(0).GetComponent<RectTransform>();
        backGround = GetComponent<RectTransform>();
        //取宽高比较小的一个作为可拖拽的圆半径范围
        r = backGround.rect.width < backGround.rect.height ? backGround.rect.width / 2 : backGround.rect.height / 2;
    }
    public void OnDrag(PointerEventData eventData)
    {
        //一个v2上的距离
         pos = eventData.position - backGround.anchoredPosition;
        //设置摇杆的位置
        rock.anchoredPosition = Vector2.ClampMagnitude(pos, r);
        //偏移值的计算  
        offset = rock.anchoredPosition / r;
        isdrag = true;
    }
    public void OnEndDrag(PointerEventData eventData)
    {
        //清除摇杆的位置
        rock.anchoredPosition = Vector2.zero;
        //清除偏移值
        offset = Vector2.zero;
        isdrag = false;
    }
    private void Update()
    {
        if (isdrag)
        {
            player.transform.LookAt(new Vector3(pos.x, 0, pos.y) + player.transform.position);
            player.transform.Translate(Vector3.forward*Time.deltaTime*5);
        }
    }
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号