在触摸 Unity C# 时移动播放器

Posted

技术标签:

【中文标题】在触摸 Unity C# 时移动播放器【英文标题】:Move player on touch Unity C# 【发布时间】:2016-06-12 00:01:26 【问题描述】:

我创建了一个简单的脚本来在键盘输入上移动玩家,但现在我想在触摸输入上移动玩家,我该怎么做?

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

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()
    
    

【问题讨论】:

你知道怎么做了吗? 【参考方案1】:

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

您可以制作两个对应于“前进”和“后退”键的 UI 按钮。 将事件触发器组件添加到这些按钮。向按钮添加两种事件类型:“Pointer Down”和“Pointer Up”。 将一个函数添加到每个事件的列表中。 将此代码放在场景中的对象上。

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”功能即可。

这真的很简单,但它会起作用。

【讨论】:

【参考方案2】:

我同意@PolakięGames。最好的方法是创建两个附加了EventTriggers 的UI 按钮,并将MoveForwardMoveBackwards 方法分配给PointerDown,将StopMoving 分配给PointerDown。虽然我会以不同的方式实现它:

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

【讨论】:

以上是关于在触摸 Unity C# 时移动播放器的主要内容,如果未能解决你的问题,请参考以下文章

角色移动、加速 C# Unity

Unity C# IOS 滑动检测

未找到 Unity GameObject [关闭]

我想在我的 Android 游戏中播放音乐以及分析声音数据。使用 Unity C#

如何仅在 Unity Vuforia 中检测到标记时播放声音

Unity视频播放插件