簡體   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