使用触摸位置沿Y轴移动玩家

本文关键字:移动 玩家 触摸 位置 | 更新日期: 2023-09-27 18:11:14

我试图在点击屏幕时移动玩家,但只能沿着Y轴移动。我试过了:

Vector2 touchPosition;
        [SerializeField] float speed = 1f;   
void Update() {
            for (var i = 0; i < Input.touchCount; i++) {
                if (Input.GetTouch(i).phase == TouchPhase.Began) {
                    // assign new position to where finger was pressed
                    transform.position = new Vector3 (transform.position.x, Input.GetTouch(i).position.y, transform.position.z);
                }
            }    
        }

但是玩家消失而不是移动。我做错了什么?

使用触摸位置沿Y轴移动玩家

您需要将触摸位置从Screen转换为World。这是很容易做到的,我只是把这个快速脚本放在一起,希望它有帮助:

using UnityEngine;
using System.Collections;
public class TouchSomething : MonoBehaviour 
{
    public GameObject thingToMove;
    public float smooth = 2;
    private Vector3 _endPosition;
    private Vector3 _startPosition;
    private void Awake()
    {
        _startPosition = thingToMove.transform.position;
    }
    private void Update()
    {
        if(Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer)
        {
            _endPosition = HandleTouchInput();
        }
        else
        {
            _endPosition = HandleMouseInput();
        }
        thingToMove.transform.position = Vector3.Lerp(thingToMove.transform.position, new Vector3(_endPosition.x, _endPosition.y, 0), Time.deltaTime * smooth);
    }
    private Vector3 HandleTouchInput()
    {
        for (var i = 0; i < Input.touchCount; i++) 
        {
            if (Input.GetTouch(i).phase == TouchPhase.Began) 
            {
                var screenPosition = Input.GetTouch(i).position;
                _startPosition = Camera.main.ScreenToWorldPoint(screenPosition);
            }
        }
        return _startPosition;
    }
    private Vector3 HandleMouseInput()
    {
        if(Input.GetMouseButtonDown(0))
        {
            var screenPosition = Input.mousePosition;
            _startPosition = Camera.main.ScreenToWorldPoint(screenPosition);
        }
        return _startPosition;
    }
}

这也允许您在编辑器中进行测试。