为了账号安全,请及时绑定邮箱和手机立即绑定

如何统一将鼠标输入转换为移动触摸

如何统一将鼠标输入转换为移动触摸

C#
HUX布斯 2022-01-09 10:04:37
我是游戏开发的新手。我正在尝试做一些像上升一样的东西。我试图更改流动代码以使其可用于移动触摸屏,但不幸的是失败了。你能帮我如何为移动设备制作流动代码吗?private Vector2 mousePos;private Rigidbody2D rb;private Vector2 offsetClicked;private Vector2 offsetReleased;private void Start () {    rb = GetComponent<Rigidbody2D> ();    offsetReleased = transform.position;}private void FixedUpdate () {    mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);    if (Input.GetMouseButton (0)) {        Vector2 newPos = new Vector2 (            Mathf.Clamp(mousePos.x + offsetClicked.x, GameManager.gm.cameraEdges.w + 0.32f, GameManager.gm.cameraEdges.y - 0.32f),            mousePos.y + offsetClicked.y        );        rb.MovePosition (newPos);        offsetReleased = newPos - (Vector2) Camera.main.transform.position;    } //Clicked    else {        Vector2 newPos = new Vector2 (            Mathf.Clamp (Camera.main.transform.position.x + offsetReleased.x, GameManager.gm.cameraEdges.w + 0.32f, GameManager.gm.cameraEdges.y - 0.32f),            Camera.main.transform.position.y + offsetReleased.y        );        rb.MovePosition (newPos);        offsetClicked = newPos - mousePos;    } //Released}以上代码适用于鼠标。
查看完整描述

2 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

将CrossPlatformInput包导入到您的项目中,您实际上可以继续使用 Input.GetMouseButton(xxx)。


using UnityEngine;

using CrossPlatformInput;


    public class MyClass : MonoBehaviour {


    private Vector2 mousePos;

    private Rigidbody2D rb;


    private Vector2 offsetClicked;

    private Vector2 offsetReleased;


    private void Start () {

        rb = GetComponent<Rigidbody2D> ();

        offsetReleased = transform.position;

    }


    private void FixedUpdate () {

        mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);


        if (Input.GetMouseButton (0)) {

            Vector2 newPos = new Vector2 (

                Mathf.Clamp(mousePos.x + offsetClicked.x, GameManager.gm.cameraEdges.w + 0.32f, GameManager.gm.cameraEdges.y - 0.32f),

                mousePos.y + offsetClicked.y

            );


            rb.MovePosition (newPos);

            offsetReleased = newPos - (Vector2) Camera.main.transform.position;

        } //Clicked

        else {

            Vector2 newPos = new Vector2 (

                Mathf.Clamp (Camera.main.transform.position.x + offsetReleased.x, GameManager.gm.cameraEdges.w + 0.32f, GameManager.gm.cameraEdges.y - 0.32f),

                Camera.main.transform.position.y + offsetReleased.y

            );


            rb.MovePosition (newPos);

            offsetClicked = newPos - mousePos;

        } //Released

    }


}

(见这里:https : //docs.unity3d.com/Manual/CrossPlatformConsiderations.html)


触摸和点击


Input.GetMouseButtonXXX 函数的设计使得它们在移动设备上具有相当明显的解释,即使没有“鼠标”本身。屏幕上的单次触摸报告为左键单击,只要手指触摸屏幕,Input.mousePosition 属性就会给出触摸的位置。这意味着具有简单鼠标交互的游戏通常可以在桌面和移动平台之间透明地运行。当然,转换通常比这简单得多。桌面游戏可以使用多个鼠标按钮,而手机游戏可以一次检测屏幕上的多次触摸。


查看完整回答
反对 回复 2022-01-09
?
绝地无双

TA贡献1946条经验 获得超4个赞

不是检查是否单击了鼠标按钮,而是检查是否存在任何触摸,然后提取触摸位置。Input.touches返回最后一帧期间的触摸列表,因此您可以使用它来查找将mousePos在代码中替换的触摸位置。


Touch myTouch;

Vector2 myTouchPosition;


Update()

{

    if (Input.touchCount > 0)

    {

        myTouch = Input.touches[0]; //Get the first touch

        myTouchPosition = Camera.main.ScreenToWorldPoint(myTouch.position);

    }

}

此外,您可以使用触摸阶段来确定您希望在触摸期间的哪个时间点发生某些事情。


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信