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 joystickCenter;            //摇杆重心
    public RectTransform joystickBackground;        //摇杆背景

    private float halfScreenWidth;
    private float halfScreenHeight;
    private RectTransform joystickRect;
    private float radius;
    private Vector3 lastMousePosition;

    public static event JoystickMoveDelegate JoystickMoveEvent;

    // Use this for initialization
    void Start () {
        halfScreenWidth = Screen.width / 2;
        halfScreenHeight = Screen.height / 2;
        joystickRect = this.gameObject.GetComponent<RectTransform>();
        radius = 71;

    }

    // Update is called once per frame
    void Update () {
        JoystickController();
    }

    public void JoystickController()
    {
        //鼠标一直按下
        if (Input.GetMouseButton(0))
        {
            float distance = Vector2.Distance(new Vector2(Input.mousePosition.x, Input.mousePosition.y), joystickRect.anchoredPosition);

            if (distance < radius)
            {
                //当距离小于半径就开始移动 摇杆重心
                joystickCenter.anchoredPosition = new Vector2(Input.mousePosition.x - joystickRect.anchoredPosition.x, Input.mousePosition.y - joystickRect.anchoredPosition.y);
            }
            else
            {
                //求圆上的一点:(目标点-原点) * 半径/原点到目标点的距离
                Vector2 endPosition = (new Vector2(Input.mousePosition.x, Input.mousePosition.y) - joystickRect.anchoredPosition) * radius / distance;
                joystickCenter.anchoredPosition = endPosition;
            }

            if (JoystickMoveEvent != null)
            {

                JoystickMoveEvent(new JoystickData() { x = joystickCenter.anchoredPosition.x - joystickBackground.anchoredPosition.x, y = joystickCenter.anchoredPosition.y - joystickBackground.anchoredPosition.y });
            }

        }

        //鼠标按下
        if (Input.GetMouseButtonDown(0))
        {
            this.joystickUI.SetActive(true);

            //鼠标单击左边屏幕
            if (Input.mousePosition.x < halfScreenWidth)
            {
                joystickRect.anchoredPosition = Input.mousePosition;

            }

            //鼠标单击右边屏幕
            if (Input.mousePosition.x >= halfScreenWidth)
            {
                // Debug.Log("鼠标单击右边");
            }
        }

        //鼠标释放的时候
        if (Input.GetMouseButtonUp(0))
        {
            this.joystickUI.SetActive(false);
        }
    }
}

public class JoystickData
{
    public float x;
    public float y;

}

 

效果图:

 

Unity5.1版本:

实例下载地址: http://yunpan.cn/cchdURtqCWXxv  访问密码 0aba

时间: 2024-11-05 13:26:13

UGUI实现摇杆(模仿太极熊猫)的相关文章

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 //

ugui自制摇杆。

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

何来的抄袭

游戏界.乙未羊年,天下大乱:手游页游端游三分天下:腾讯网易盛大完美触控掌趣群雄并起:随着大量资本涌入游戏界,一场天下逐鹿之战在所难免.然而被大家津津乐道的不仅仅是无数款鱼龙混杂的游戏,更是抄袭与被抄袭大行其道,到处上演撕逼大战的游戏界乱象. 先是14年盛大"万箭齐发"严惩"传奇"商标被各种页游手游盗版事件:前有<刀塔传奇>开发商莉莉丝"南蛮入侵"在美国起诉<Heroes Charge>,后有暴雪黄雀在后称<刀塔传奇&

unity3d 项目源码下载链接

2-1 炉石传说 客户端加服务器端 链接:http://pan.baidu.com/s/1dDKY3Fr 密码:c03q 2-2 新仙剑奇侠传 链接:http://pan.baidu.com/s/1b4QVqI 密码:dic5 2-3 unity3d 战斗卡牌<变身吧主公>客户端+服务器源码 链接:http://pan.baidu.com/s/1kUpot51 密码:i02u 2-4 降临OL-U3D全套源码 链接:http://pan.baidu.com/s/1sktLQ5v 密码:we0g

手游的一些事儿 - 动态更新

标题本来想叫"手游那些事儿",想了想还是算了,不想盗用"明朝那些事儿" 的"招牌"(其实还是有盗用的嫌疑,哈哈).   为了抹掉打广告的嫌疑,这里暂以已经比较火的或者腾讯出品的游戏举例(外加吐槽) 腾讯的<游龙英雄> 游久的<酷酷爱魔兽> 腾讯的<怪物弹珠>   目前国内手游2d开发以cocos2d-x js/lua为主流,3d多使用unity3d,类似网易这种做过端游的游戏厂商则倾向于使用在端游已经成熟的引擎

重度手游开始发烧!社交属性定生死

在电视剧<平凡的世界>里,人们最简朴的愿望就是从黑面馍到黄面馍,再到白面馍.相比现在的大鱼大肉,简直不可同日而语.而之所以出现这样情况的原因,关键就在于时代的局限性和延伸性.在目前火爆的手游行业,其实也隐藏着类似的暗涌. 在手游发展初期,贪食蛇.推箱子.俄罗斯方块等就带给人们无限乐趣,而随后愤怒的小鸟.植物大战僵尸成为人们的心头好,再之后我叫MT之类的卡牌手游也不能满足玩家日益高涨的游戏热情,于是重度手游终于开始登台.重度手游即将爆发的缘由就在于其自身的高品质和玩家游戏口味的变迁.而在这场轰轰

工程源码目录

以下资源全部为网络搜集所得,仅供学习研究,严谨用于商业行为,请下载后于24小时之内删除. 2-1    炉石传说 客户端加服务器端 链接:http://pan.baidu.com/s/1dDKY3Fr 密码:c03q 2-2    新仙剑奇侠传 链接:http://pan.baidu.com/s/1b4QVqI 密码:dic5 2-3    unity3d 战斗卡牌<变身吧主公>客户端+服务器源码 链接:http://pan.baidu.com/s/1kUpot51 密码:i02u 2-4  

为何要学习游戏引擎底层技术

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. 最近这段时间,开始写一些关于3D游戏引擎底层实现的文章并附上源代码,目的是唤起开发者学习引擎底层的兴趣.随着引擎封装的越来越好,很多人都抱着会用的思想,把人家的东西用到极致作为奋斗的方向.作为我们开发者来说这是非常可悲的,这会导致写引擎底层的人越来越少,最终这些技术

unity3D游戏之昆仑游戏获[愤怒的小鸟]IP开发授权

狗刨学习网报道 / 昆仑上市之后连续十个交易日的涨停让国内股民喜大普奔,而前天晚上北京举行的昆仑上市答谢会上,周老板"一掷千金抽1888股"的土豪抽奖让行业感受到了昆仑的大手笔. 成功上市之后,昆仑在手游业务上将有什么的大动作?今日,昆仑游戏正式对外宣布,已与全球著名手机游戏开发商Rovio EntertainmentLtd.(以下简称"Rovio")签署授权协议,获得Rovio旗下"愤怒的小鸟"IP在中国的独家手游开发授权,双方将就所开发的手游