在触摸 Unity C# 时移动播放器
Posted
技术标签:
【中文标题】在触摸 Unity C# 时移动播放器【英文标题】:Move player on touch 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()
【问题讨论】:
你知道怎么做了吗? 【参考方案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。最好的方法是创建两个附加了EventTrigger
s 的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 Physics 一起使用,则必须将 Rigidbody
更改为 Rigidbody2D
。
【讨论】:
以上是关于在触摸 Unity C# 时移动播放器的主要内容,如果未能解决你的问题,请参考以下文章
我想在我的 Android 游戏中播放音乐以及分析声音数据。使用 Unity C#