在y轴上移动播放器

放出来

我现在正在为Android开发Pong-Clone,并观看了有关它的教程。它可以与键盘完美配合,但是如何在手机上获得类似的控件。我当前的代码如下所示:

    private void Start()
    {
        ball = GameObject.FindGameObjectWithTag("Ball").GetComponent<Ball>();
        col = GetComponent<BoxCollider2D>();
        if (side == Side.Left)
            forwardDirection = Vector2.right;
        else if (side == Side.Right)
            forwardDirection = Vector2.left;
    }

    private void Update()
    {
        if (!overridePosition)
            MovePaddle();
    }

    private void MovePaddle()
    {
        float targetYPosition = GetNewYPosition();
        ClampPosition(ref targetYPosition);
        transform.position = new Vector3(transform.position.x, targetYPosition, transform.position.z);
    }

    private void ClampPosition(ref float yPosition)
    {
        float minY = Camera.main.ScreenToWorldPoint(new Vector3(0, 0)).y;
        float maxY = Camera.main.ScreenToWorldPoint(new Vector3(0, Screen.height)).y;
        yPosition = Mathf.Clamp(yPosition, minY, maxY);
    }

    private float GetNewYPosition()
    {
        float result = transform.position.y;
        if (isAI)
        {
            if (BallIncoming())
            {
                if (firstIncoming)
                {
                    firstIncoming = false;
                    randomYOffset = GetRandomOffset();
                }
                result = Mathf.MoveTowards(transform.position.y, ball.transform.position.y + randomYOffset, moveSpeed * Time.deltaTime);
            }
            else
            {
                firstIncoming = true;
            }
        }
        else
        {
            float movement = Input.GetAxisRaw("Vertical " + side.ToString()) * moveSpeed * Time.deltaTime;
            result = transform.position.y + movement;
        }
        return result;
    }

我希望玩家在y轴上移动,但是我不知道如何使用触摸控件来做到这一点(我是游戏新手)。我将非常感谢您的帮助,因此我可以继续编程:)

雨果

我将假设您想要通过触摸并向上或向下拖动来使Padel变白。

我会保留您的代码以进行调试,并添加一个开关,仅在支持touch的情况下才使用touch,否则将您的代码添加到其中。

// Adjust via the Inspector how much the user has to drag in order to move the padel
[SerializeField] private float touchDragSensitivity = 1;
private float lastTouchPosY;

// Make sure to store the camera
// Using Camera.main is quite expensive!
[SerializeField] private Camera _mainCamera;

private void Awake()
{
    if(!_mainCamera) _mainCamera = GetComponent<Camera>();

    ...
}

private float GetNewPosition()
{
    ...

    else
    {
        var movement = 0f;
        if(!Input.touchSupported)
        {
            // For non-touch device keep your current code
            movement = Input.GetAxisRaw("Vertical " + side.ToString()) * moveSpeed * Time.deltaTime;
        }
        else
        {
            if(Input.touchCount > 0)
            {
                var touch = Input.GetTouch(0);
                var touchPositionY = _mainCamera.ScreenToWorldPoint(touch.position).y;
                if(touch.phase = TouchPhase.Moved)
                {
                    var delta = touchPositionY - lastTouchPosY;
                    movement = delta * touchDragSensitivity;
                }

                lastTouchPosY = touchPositionY;
            }
        }
        result = transform.position.y + movement;
    }
}

或者,或者,如果您希望获得与按钮输入类似的体验,则还可以仅检查触摸是在屏幕的下半部还是上半部,并像之前的原始代码一样不断移动键盘:

private void Update()
{
    ...

    else
    {
        var movement = 0f;
        if(!Input.touchSupported)
        {
            // For non-touch device keep your current code
            movement = Input.GetAxisRaw("Vertical " + side.ToString()) * moveSpeed * Time.deltaTime;
        }
        else
        {
            if(Input.touchCount > 0)
            {
                var touch = Input.GetTouch(0);
                var touchPositionY = touch.position.y;
                movement = (touchPositionY >= Screen.height / 2f ? 1 : -1) * moveSpeed * Time.deltaTime;
            }
        }
        result = transform.position.y + movement;
    }
}

更新资料

关于你的问题

有什么方法可以分割屏幕,以便两个玩家可以在同一屏幕上播放

是:您可以使用touch.position.x >= screen.width / 2f=>右侧在触摸的哪一侧添加检查

您可以例如过滤有效的接触,例如

if(Input.touchCount > 0)
{
    if(side == Side.Right)
    {
        var validTouches = Input.touches.Where(t => t.position >= Screen.width / 2f).ToArray();
        if(validTouches.Length > 0)
        {
            var touchPositionY = validTouches[0].position.y;
       
            movement = (touchPositionY >= Screen.height / 2f ? 1 : -1) * moveSpeed * Time.deltaTime;
        }
    }
    else
    {
        var validTouches = Input.touches.Where(t => t.position < Screen.width / 2f).ToArray();
        if(validTouches.Length > 0)
        {
            var touchPositionY = validTouches[0].position.y;
       
            movement = (touchPositionY >= Screen.height / 2f ? 1 : -1) * moveSpeed * Time.deltaTime;
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用触摸位置沿Y轴移动播放器

来自分类Dev

在移动原生视频播放器上播放网站视频

来自分类Dev

如何沿Y轴提升播放器?

来自分类Dev

用手指在x轴上移动的统一播放器不起作用

来自分类Dev

X 轴上的 C# 相机跟随播放器

来自分类Dev

使用移动设备上的触摸输入控制播放器

来自分类Dev

移动浏览器上的“自动播放” HTML5音频播放器

来自分类Dev

问:当播放器向上移动时,如何沿y轴向下移动对象?

来自分类Dev

在移动设备上停止 <video> 打开本机播放器

来自分类Dev

Vimeo 深度播放器上的参数

来自分类Dev

如何在移动浏览器上的嵌入式Vimeo播放器上显示全屏按钮?

来自分类Dev

即使播放器移动位置,如何向播放器旋转精灵

来自分类Dev

相机在Y轴上的移动

来自分类Dev

HTML音频播放器时间轴功能添加

来自分类Dev

调整Input.GetAxis以面对播放器轴

来自分类Dev

我的粒子没有出现在我的播放器X和Y上

来自分类Dev

如何在移动浏览器的嵌入式Vimeo播放器上显示全屏按钮?

来自分类Dev

VideoJS播放器无法在AngularJS的iPad上播放

来自分类Dev

我希望我的播放器(图像)左右移动

来自分类Dev

Unity播放器移动,速度不固定

来自分类Dev

当播放器不再碰撞时,敌人停止移动。Pygame

来自分类Dev

在Unity中平滑地逐个移动播放器

来自分类Dev

左右移动播放器(触摸开始)

来自分类Dev

在SDL_Rect C ++中移动播放器

来自分类Dev

如何使播放器在Canvas中显示和移动?

来自分类Dev

jQuery-如何在滚动时移动播放器

来自分类Dev

Unity 播放器移动不起作用

来自分类Dev

在 Unity 中移动播放器 UI 图像

来自分类Dev

NavmeshAgent 播放器在山上移动时与山坡不平行

Related 相关文章

热门标签

归档