UGUI实现的变速摇杆

去年刚刚结束UGUI,想做个贪吃蛇小游戏~

结果当然是跟大多数程序猿一样,实现了核心操作逻辑,后面就不了了之了。

但是昨天网上看到个跟我这个demo一模一样的帖子,我贪吃蛇的蛇头还被抄袭了,这真是不能忍了,还是把原版放出来好了~

---效果图点这里---

这么朴实的中文+拼音的编程风格恐怕就我好意思用了。

using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class JoyPlayerCtrl : MonoBehaviour
{
    public enum AxisOption
    {
        Both, // Use both
        OnlyHorizontal, // Only horizontal
        OnlyVertical // Only vertical
    }

    public JoystickInput mJoystick;
    public int 距离Max = 100;
    public AxisOption axesToUse = AxisOption.Both;
    bool m_UseX; // Toggle for using the x axis
    bool m_UseY; // Toggle for using the Y axis

    Vector3 StartPos;
    Vector3 FirstPos;

    Image IMGBG;
    public Image IMGCheck;

    public static JoyPlayerCtrl Instance;
    void Awake()
    {
        Instance = this;

        IMGBG = GetComponent<Image>();
        m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
        m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);

        mJoystick = new JoystickInput();
        mJoystick.距离Max = 距离Max;
        StartPos = transform.localPosition;
        OnPointerUp();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            OnPointerDown(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
        }
        if (Input.GetKey(KeyCode.Mouse0))
        {
            OnDragDuan(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
        }
        if (Input.GetKeyUp(KeyCode.Mouse0))
        {
            OnPointerUp();
        }
    }

    /// <summary>
    /// 首次按下
    /// </summary>
    /// <param name="mousePos"></param>
    public void OnPointerDown(Vector2 mousePos)
    {
        IMGBG.enabled = true;
        IMGCheck.enabled = true;
        mJoystick.isUser = true;
        IMGCheck.transform.localPosition = Vector3.zero;

        FirstPos = mousePos;
        transform.localPosition = new Vector3(mousePos.x - Screen.width / 2, mousePos.y - Screen.height / 2, StartPos.z);
    }

    /// <summary>
    /// 弹起
    /// </summary>
    public void OnPointerUp()
    {
        IMGBG.enabled = false;
        IMGCheck.enabled = false;
        mJoystick.isUser = false;
    }

    /// <summary>
    /// 拖动
    /// </summary>
    /// <param name="DragPos"></param>
    void OnDragDuan(Vector3 DragPos)
    {
        Vector3 方向v3 = (DragPos - FirstPos).normalized;
        if (方向v3 != Vector3.zero)
        {
            mJoystick.方向 = Quaternion.LookRotation(方向v3, new Vector3(0, 0, -1));
            mJoystick.距离 = Mathf.Clamp(Vector3.Distance(DragPos, FirstPos), 0, mJoystick.距离Max);
            IMGCheck.transform.localPosition = mJoystick.方向 * Vector3.forward * mJoystick.距离;
        }
    }

    public class JoystickInput
    {
        public bool isUser;
        public Quaternion 方向;
        public float 距离;
        public float 距离Max;

        public float get力度()
        {
            return 距离 / 距离Max;
        }
        public Quaternion getY方向()
        {
            Quaternion temp = JoyPlayerCtrl.Instance.mJoystick.方向 * Quaternion.Euler(90,0,0);
            return Quaternion.Euler(0, -temp.eulerAngles.z, 0);
        }
    }

    void OnGUI()
    {
        if (mJoystick.isUser)
        {
            GUI.Label(new Rect(10, 10, 200, 30), "方向" + mJoystick.方向.eulerAngles.ToString());
            GUI.Label(new Rect(10, 50, 200, 30), "距离" + mJoystick.距离);
            GUI.Label(new Rect(10, 90, 200, 30), "力度" + mJoystick.get力度());
        }
    }
}

场景布置结构如下:

时间: 2024-08-28 00:22:54

UGUI实现的变速摇杆的相关文章

UGUI实现的虚拟摇杆,可改变摇杆位置

实现方式主要参考这篇文章:http://www.cnblogs.com/plateFace/p/4687896.html. 主要代码如下: 1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.UI; 4 using UnityEngine.EventSystems; 5 6 7 public delegate void JoystickMoveDelegate(JoystickData data); 8 9 p

【转】UGUI实现unity摇杆

http://blog.csdn.net/onafioo/article/details/46403801 http://www.winig.cc/archives/348 好久没有写文章了,最近在做项目是用的unity最新的ui系统UGUI,项目需要做一个摇杆,网上大部分都是用的插件和NGUI做的摇杆,unity自带的摇杆也不怎么好用,而最新的unity4.6.x来了,加入了最新的UI系统"UGUI",那我们怎么用UGUI来制作摇杆呢~大神勿喷,本人是技术渣渣. 比较出色的摇杆插件&

UGUI实现摇杆(模仿太极熊猫)

核心代码: using UnityEngine; using System.Collections; using UnityEngine.UI; public delegate void JoystickMoveDelegate(JoystickData data); public class Joystick : MonoBehaviour { public GameObject joystickUI; //摇杆整体UI,方便Active public RectTransform joysti

UGUI实现摇杆

效果图 立方体好比角色.可以利用右下角的摇杆控制角色移动 看看结构图 Image1:是外面圆圈 Image2:是蓝色圈 创建JoyStickScript.cs代码挂载在Image2上.这里没有实现控制立方体移动.有待改进 1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.UI; 4 using UnityEngine.EventSystems; 5 6 /// <summary> 7 /// 摇杆 8 //

Unity用UGUI做虚拟摇杆

一.首先点击UI创建两个Image,将Image的Source Image改成自己想要的Texture即可,然后在Canvas下创建一空物体,将两个Image放在空物体下作为他的子对象: 然后为可以拖动的Image编写脚本,脚本如下:(有注释,就不多说了) using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; public class JoyStick 

ugui自制摇杆。

珍爱生命,远离插件. 以上8个字,好好理解. 反正我是这么觉得. 我说的是unity,不是魔兽世界. 总有一天,我会一句一句写出属于自己的东西. 可以开始主题了.         如图所示,建立一个画布,添加两个image即可(注意父子关系,父亲为摇杆外面的那个圆圈),然后调整位置到左下角,调节锚点,选左下角那个. 接下来编辑脚本 using UnityEngine;using System.Collections;using UnityEngine.EventSystems; public c

DoTween学习笔记(二) UGUI结合使用(实现一些简单效果)

UGUI官方实例中是使用Animation来控制UI的移动,放大缩小动画等等, Animation来控制UI的动画工作量实在是太多了, 所以我们一般使用itween,DoTween. 来控制动画, 这样工作量大大减少. 那今天我们来学习下UGUI + DoTween吧   UGUI进行简单的移动,放大,旋转 public class MyClass : MonoBehaviour { void Start () { Image image = transform.GetComponent<Ima

DoTween学习笔记(二) UGUI结合使用

UGUI官方实例中是使用Animation来控制UI的移动,放大缩小动画等等, Animation来控制UI的动画工作量实在是太多了, 所以我们一般使用itween,DoTween. 来控制动画, 这样工作量大大减少. 那今天我们来学习下UGUI + DoTween吧   UGUI进行简单的移动,放大,旋转 public class MyClass : MonoBehaviour { void Start () { Image image = transform.GetComponent<Ima

unity5.3+Easytouch4.3——EasyTouch及摇杆控件介绍

一.EasyTouch插件介绍 本文总结时,目前网上可以很方便的下载到EasyTouch4.3版本(额--你懂什么叫很方便的),由于某些版本和版本之间还是有很多改动,在此特意声明一下该文使用的版本是4.3,但插件的大体框架不会变动很多,也可以参考一下.有能力购买正版的童鞋也可以到官网支持一下EasyTouch. EasyTouch4.3版本开始已经支持UGUI,所以unity版本低于4.6的话是将不能使用这个版本EasyTouch,目前EasyTouch4.3亲测可以结合unity4.6~5.3