Проблема с Mathf.Clamp, MovePosition & GetKeyDown - PullRequest
0 голосов
/ 22 января 2019

Я недавно начал кодировать, используя Unity, и я был озадачен проблемой.

Я пытался использовать Vector3, но получаю следующую ошибку: cannot convert from void to float

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FrogController : MonoBehaviour
{
    Rigidbody2D rb;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {

    }

    void FixedUpdate()
    {  
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            rb.MovePosition(transform.position + transform.up);
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            rb.MovePosition(transform.position + transform.up * -1);
        }
        else if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            rb.MovePosition(transform.position + transform.right * -1);
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            rb.MovePosition(transform.position + transform.right);
        }
    }
}

Я хотел бы использовать Mathf.Clamp, чтобы ограничить движение transform.rigidbody

из стороны в сторону и вверх и вниз.

1 Ответ

0 голосов
/ 22 января 2019

Как с Vector3.Max и Vector3.Min?

public Vector3 Max;
public Vector3 Min;


    void FixedUpdate()
    {  
        Vector3 desiredPosition;

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            desiredPosition = transform.position + transform.up;
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            desiredPosition = transform.position + transform.up * -1;
        }
        else if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            desiredPosition = transform.position + transform.right * -1;
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            desiredPosition = transform.position + transform.right;
        }

        desiredPosition = Vector3.Min(desiredPosition, this.Max);
        desiredPosition = Vector3.Max(desiredPosition, this.Min);

        rb.MovePosition(desiredPosition);   
    }

В этом примере обязательно установите Min и Max в инспекторе.

Обратите внимание, что мы передаем Max в функцию Min и Min в функцию Max.Это потому, что Vector3.Min возвращает меньшие компоненты двух векторов, которые вы передаете в него.Когда ваша позиция превышает максимум, мы хотим вернуть позицию, потому что она меньше из двух.Когда позиция меньше максимальной, мы хотим вместо нее позицию (опять же, меньшее из двух).Обратное верно для Vector3.Max.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...