统一4.6滑块播放器运动

时间:2015-01-28 11:07:02

标签: c# user-interface unity3d game-physics

我在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对象才能访问它们等等,它只是将变量分配给我正在努力的正确位置。

非常感谢你的时间。

1 个答案:

答案 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轴上移动一个对象。