[英]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
小号连接和分配方法MoveForward
和MoveBackwards
到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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.