unity3d 如何在Unity中使用脚本模拟触摸/点击

ezykj2lf  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(526)

我尝试用Unity制作光标,它会随着键盘输入而移动。它会随着WSAD键移动,并通过Q键发送触摸事件。所以我想做的是:

if (Input.GetKeyDown(KeyCode.Q)
{
    // Is identical to touch/click the given position of screen for this frame.
    SendTouchEvent(currentCursorPos);
}

检测触摸非常容易,但我如何人为地 * 制造 * 触摸事件?
复制粘贴我已经存在的输入处理程序(例如,在触摸位置上使用光线投射)也是一种解决方案,但我认为会有更清晰的解决方案。

nvbavucw

nvbavucw1#

它远非完美,但这里是一个起点,你可以做什么与旧的输入系统。

using UnityEngine;
using UnityEngine.EventSystems;

public class TestScript : StandaloneInputModule
{
    [SerializeField] private KeyCode left, right, up, down, click;
    [SerializeField] private RectTransform fakeCursor = null;

    private float moveSpeed = 5f;

    public void ClickAt(Vector2 pos, bool pressed)
    {
        Input.simulateMouseWithTouches = true;
        var pointerData = GetTouchPointerEventData(new Touch()
        {
            position = pos,
        }, out bool b, out bool bb);

        ProcessTouchPress(pointerData, pressed, !pressed);
    }

    void Update()
    {
        // instead of the specific input checks, you can use Input.GetAxis("Horizontal") and Input.GetAxis("Vertical")
        if (Input.GetKey(left))
        {
            fakeCursor.anchoredPosition += new Vector2(-1 * moveSpeed, 0f);
        }

        if (Input.GetKey(right))
        {
            fakeCursor.anchoredPosition += new Vector2(moveSpeed, 0f);
        }

        if (Input.GetKey(down))
        {
            fakeCursor.anchoredPosition += new Vector2(0f, -1 * moveSpeed);
        }

        if (Input.GetKey(up))
        {
            fakeCursor.anchoredPosition += new Vector2(0f, moveSpeed);
        }

        if (Input.GetKeyDown(click))
        {
            ClickAt(fakeCursor.position, true);
        }

        if (Input.GetKeyUp(click))
        {
            ClickAt(fakeCursor.position, false);
        }
    }
}

KeyCode的值设置为您喜欢的任何值。在我的示例中,我将UI图像设置为光标,并将画布渲染器设置为Overlay,因此坐标已经在屏幕空间中。我用此脚本替换了场景EventSystem上的InputModule
下面是脚本的gif:

我使用wasd在屏幕上移动我的假光标,当我点击space时,它模拟了假光标位置上的点击事件。

ncecgwcz

ncecgwcz2#

作为上述答案的替代方法,Unity有一个“输入系统“包来调试输入。
这里是如何得到它&设置;
1-打开窗口-〉软件包管理器x1c 0d1x
2-安装输入系统软件包

3-现在您将能够在Window -〉InputDebugger下看到输入调试器

4-打开Input Debugger并点击Options -〉Simulate Touch Input From Mouse or Pen

成交!

相关问题