【问题标题】:Move player on touch Unity C#在触摸 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()
    {
    }
}

【问题讨论】:

  • 你知道怎么做了吗?

标签: c# touch 2d


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多