繁体   English   中英

在Unity C#上移动播放器

[英]Move player on touch Unity C#

我创建了一个简单的脚本来在键盘输入上移动播放器,尽管现在我想在触摸输入上移动播放器,我该怎么做?

这是我的代码,那么如何编辑此代码以使其正常工作? 我已经跳了,但是不知道如何移动?

using UnityEngine;
using System.Collections;

public class MoveGround : MonoBehaviour
{
    public float y = 0f;
    public Rigidbody2D rb;
    //public float x = 0f;
    //public float z = 0f;

    // Use this for initialization
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        //move function

        if (Input.GetKey(KeyCode.W))
        {
            rb.velocity = new Vector2(0, y);
        }

        if (!Input.GetKey(KeyCode.W))
        {
            rb.velocity = new Vector2(0, 0);
        }

        if (Input.GetKey(KeyCode.S))
        {
            rb.velocity = new Vector2(0, -y);
        }
        //move function end
    }

    public void Move()
    {
    }
}

您想如何使用触摸输入而不是键盘输入来移动字符? 您当前的代码取决于是否按下“ W”或“ S”键来移动字符。

您可以制作两个UI按钮,分别与“前进”和“后退”键相对应。 将事件触发器组件添加到那些按钮。 将两种事件类型添加到按钮:“指针向下”和“指针向上”。 将函数添加到每个这些事件的列表中。 将此代码放在场景中的对象上。

bool movingForward;
bool movingBackward;
public float speed = 0f;// set this either here in code or in the editor
public Rigidbody2D rb;

void Start (){

    rb = GetComponent<Rigidbody2D>();   

    movingForward = false;
    movingBackward = false;

}


// Your forward button will call this function
public void moveForward (){

    movingForward = true;
    movingBackward = false;

}



// Your backwardbutton will call this function
public void moveBackward (){

    movingForward = false;
    movingBackward = true;

}

//


public void stopMoving(){

    movingForward = false;
    movingBackward = false;

}    

void Update () {

    if(movingForward || movingBackward ){// we're moving

            if(movingForward ){// forward

                rb.velocity = new Vector2(0, speed);


        }else if(movingBackward ){// backward

            rb.velocity = new Vector2(0, -speed);

        }

    }else{// we're moving neither forward nor backward

        rb.velocity = new Vector2(0, 0);// so stand still

    }

}

将每个函数指向该对象。 在Pointer Down事件中,为要向前移动角色的按钮选择“ moveForward”功能,为另一个按钮选择“ moveBackward”功能。 在两者的Pointer Up事件中,只需选择“ stopMoving”功能。

这确实很简单,但是会起作用。

我同意@PolakięGames。 最好的办法做到这一点是建立两个UI按钮EventTrigger小号连接和分配方法MoveForwardMoveBackwardsPointerDownStopMovingPointerDown 尽管我会以不同的方式实现它:

using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class MoveExample : MonoBehaviour {
    public float Acceleration = 4f;
    public float Speed = 4f;

    private Vector2 _velocity = Vector2.zero;
    private Rigidbody _rigidbody;

    private void Start() {
        _rigidbody = GetComponent<Rigidbody>();
    }

    // movement methods
    public void Move(float velocity) { _velocity.x = velocity * Speed; }
    public void MoveForward() { Move(1f); }
    public void MoveBackwards() { Move(-1f); }
    public void StopMoving() { Move(0f); }

    private void Update() {
        _rigidbody.velocity = Vector2.Lerp(_rigidbody.velocity, _velocity, Time.deltaTime * Acceleration);
    }
}

这样,您的对象将平滑移动,并且可以控制速度和加速度。 如果要与2D Physics一起使用,则必须将Rigidbody更改为Rigidbody2D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM