在触摸 Unity C# 时移动播放器
本文关键字:移动 播放器 触摸 Unity | 更新日期: 2023-09-27 18:36:35
我创建了一个简单的脚本来移动键盘输入上的播放器,尽管现在我想在触摸输入上移动播放器,我该怎么做?
这是我的代码,那么如何编辑此代码以使其工作?我有跳跃工作,但不知道如何移动?
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
}
}
将每个函数指向该对象。在指针向下事件中,为要向前移动角色的按钮选择"向前移动"功能,为另一个按钮选择"向后移动"功能。在两者的指针向上事件中,只需选择"停止移动"功能。
这真的很简单,但它会起作用。
我同意@PolakięGames。最好的方法是创建两个附加EventTrigger
的 UI 按钮,并将方法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 物理一起使用,则必须Rigidbody
将其更改为 Rigidbody2D
。