用UGUI制作可根据手指位置自动定位的隐形遥杆

Posted csymaet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用UGUI制作可根据手指位置自动定位的隐形遥杆相关的知识,希望对你有一定的参考价值。

之前写过遥杆怎么做,这里依然用的是之前的方法,就不介绍了。

之前玩过《蜡烛人》,发现手游版的《蜡烛人》的遥杆是看不见的,手指直接在屏幕左边滑动人物就可以移动,可能是为了增强沉浸感。最近在写2D游戏所以就想来实现一下。

大概思路:

1. 把遥杆UI的GetComponent<Image>().color的透明度改为0;

2.手指落到哪里就修改摇杆的位置在哪里。

显示隐藏摇杆和自动定位的代码(下面的代码挂在摇杆上)如下:

public void Hide()
    {
        // 因为继承了ScrollRect的缘故在编辑器模式下也会执行Update代码?
        viewport.GetComponent<Image>().color *= new Color(1, 1, 1, 0);  // 透明度改为0,用乘法
        content.GetComponent<Image>().color *= new Color(1, 1, 1, 0);
    }
    public void Show()
    {
        viewport.GetComponent<Image>().color += new Color(0, 0, 0, 1);  // 透明度改为1,用加法
        content.GetComponent<Image>().color += new Color(0, 0, 0, 1);
    }
    public void AutoSetPosition(Vector2 screenPos)    // 设置BG的位置
    {
        // 如果采用自动定位的方式,就一定要让stick跟随手指
        if (Input.mousePosition.x < Screen.width / 2)
            content.localPosition = ScreenPosToLocalPos(transform.GetChild(0).GetChild(0).GetComponent<RectTransform>(), Input.mousePosition);  // transform.GetChild(0).GetChild(0)指的是stick(杆)

        if ((!Input.GetMouseButton(0) || Input.GetMouseButtonDown(0)) && screenPos.x < Screen.width / 2)    // Input.GetMouseButton(0)在移动端指单指按下(无意中发现的),手指在屏幕上滑动时,遥杆不跟随手指,只有杆跟随
        {
            transform.GetChild(0).localPosition = ScreenPosToLocalPos(GetComponent<RectTransform>(), Input.mousePosition); ;    // 注意是LocalPosition
        }
    }

    private Vector2 ScreenPosToLocalPos(RectTransform rt, Vector2 pos)
    {
        Vector2 localPoint;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(rt, pos, null, out localPoint);
        return localPoint;
    }

 

遇到的问题:

1. 一开始我发现手放屏幕上后立即拖动不能拖动stick,因为是先放手,摇杆后根据手定位到手的位置的,所以不能触发拖动事件,所以我就加入了在手机按下时让杆跟随手指移动的代码,在上面有体现。

 

以上是关于用UGUI制作可根据手指位置自动定位的隐形遥杆的主要内容,如果未能解决你的问题,请参考以下文章

uiautomator 仿 WebDriver 封装,页面工厂制作,实现多语言定位

unity ugui 怎么制作下拉动态刷新

UGUI ScrollRect 代码定位

有了Ugui,有必要用Dotween插件吗

为啥手机屏幕要用皮肤接触才能滑动?

Unity怎么用UGUI制作图表,柱状图,饼图?有现成的插件吗,推荐几款