[英]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.