我在Unity中使用新的UI 4.6系统。
基本上我有一种非常简单的计算球员运动的方法(它只在x轴上移动)。由于这个原因,我现在只使用“水平”来获得运动。
我需要的是一种将玩家动作的值连接到滑块的方法,这样当你向左拖动时它会向左移动,当你离开时它会停止移动而右手边也是如此。
我还是编程的新手,并且已经全神贯注地得到一个粗略的答案,我正在努力。
以下是我可以移动玩家的两种方式:第一种是我最近尝试做的速度然后丢失,因为它只会根据-1或1的值发送玩家1路。在FixedUpdate函数中调用以下语句。
public void Movement(float horizontalInput)
{
//Stores the velocity in a V3.
Vector3 moveVel = myBody.velocity;
//The x axis is the value passed intimes by movespeed.
moveVel.x = horizontalInput * moveSpeed;
//The value from the v3 is stored back into velocity.
myBody.velocity = moveVel;
}
public void StartMoving(float horizontalInput)
{
hozInput = horizontalInput;
}
在尝试获得移动类型的移动之前,我只是使用它:
Vector3 newPosition = transform.position;
newPosition.x += Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
transform.position = newPosition;
这是移动角色的一种非常简单的方法,但我不确定是否可以将其分配给滑块。
我知道方法必须是公共无效的UI对象才能访问它们等等,它只是将变量分配给我正在努力的正确位置。
非常感谢你的时间。
答案 0 :(得分:0)
我建议使用这样的东西。
public class TouchPad : MonoBehaviour, IPointerUpHandler, IPointerDownHandler, IDragHandler
{
public Vector2 virtualAxes;
private Vector2 imagePad;
void Start()
{
imagePad = GetComponent<RectTransform>().sizeDelta;
}
public void OnDrag(PointerEventData data)
{
imageColor.color = new Color (1f, 1f, 1f, 1f);
int deltaPositionX = (int)(data.position.x - transform.position.x);
deltaPositionX = Mathf.Clamp (deltaPositionX, -(int)(imagePad.x/2), (int)(imagePad.x/2));
int deltaPositionY = (int)(data.position.y - transform.position.y);
deltaPositionY = Mathf.Clamp (deltaPositionY, -(int)(imagePad.y/2), (int)(imagePad.y/2));
virtualAxes = new Vector2 (deltaPositionX / (imagePad.x/2), deltaPositionY / (imagePad.y/2));
}
public void OnPointerUp(PointerEventData data)
{
virtualAxes = Vector2.zero;
imageColor.color = new Color (1f, 1f, 1f, 0.15f);
}
public void OnPointerDown(PointerEventData data)
{
}
然后控制它你可以使用这样的东西。
public class ControlPad : MonoBehaviour
{
public TouchPad aPad;
public float speed = 5f;
public float speedRotate = 150f;
void Update ()
{
transform.Translate (aPad.virtualAxes.x* Time.deltaTime * speed, 0 ,0f);
}
}
现在您可以简单地创建一个与滑块一样大的UI元素,当您用手指或鼠标拖动它时,您将在x轴上移动一个对象。