Выпуск MathF.Clamp - PullRequest
       0

Выпуск MathF.Clamp

0 голосов
/ 19 сентября 2019

Я следую учебному пособию по C # и Unity и немного отклонился от кода, я надеялся, что кто-нибудь сможет помочь мне понять, как добавить MathF.Clamp в мой код.

var delta = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")).normalized * Time.deltaTime * moveSpeed;

transform.position = new Vector3(
transform.position.x + delta.x,
transform.position.y + delta.y,
transform.position.z);

Все советы приветствуются.Спасибо за ваше время.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2019

Поскольку вы используете орфографическую камеру, вы все равно можете использовать Mathf.Clamp и ViewportToWorldPoint.Вам просто нужно использовать его для каждого компонента.Вы можете получить минимальное и максимальное значения для x и y, используя ViewportToWorldPoint(new Vector3(0,0,0)); и ViewportToWorldPoint(new Vector3(1,1,0));.

В целом это может выглядеть так:

private Camera mainCam;

Start() 
{
    // Camera.main calls FindGameObjectsWithTag internally, which is a costly operation.
    // It's best to cache the results of Camera.main when possible to save on computation.
    mainCam = Camera.main;
}

Update()
{
    var delta = new Vector2(Input.GetAxisRaw("Horizontal"), 
            Input.GetAxisRaw("Vertical")).normalized * Time.deltaTime * moveSpeed;

    Vector3 minPos = mainCam.ViewportToWorldPoint(new Vector3(0,0,0));
    Vector3 maxPos = mainCam.ViewportToWorldPoint(new Vector3(1,1,0));

    transform.position = new Vector3(
    Mathf.Clamp(transform.position.x + delta.x, minPos.x, maxPos.x),
    Mathf.Clamp(transform.position.y + delta.y, minPos.y, maxPos.y),
    transform.position.z);
}
0 голосов
/ 19 сентября 2019

Вы можете попробовать что-то вроде этого:

var delta = new Vector2(Input.GetAxisRaw("Horizontal"),
    Input.GetAxisRaw("Vertical")).normalized * Time.deltaTime * moveSpeed;

transform.position = new Vector3(
    Mathf.Clamp(transform.position.x + delta.x, minX, maxX),
    Mathf.Clamp(transform.position.y + delta.y, minY, maxX),
    transform.position.z);
0 голосов
/ 19 сентября 2019

Это будет держать вашу камеру в пределах, используя Mathf.Clamp.Вы должны определить минимальное и максимальное значения, по которым камера может двигаться:

var delta = new Vector2(Input.GetAxisRaw("Horizontal"),
    Input.GetAxisRaw("Vertical")).normalized * Time.deltaTime * moveSpeed;

transform.position = new Vector3(
    Mathf.Clamp(transform.position.x + delta.x, minX, maxX),
    Mathf.Clamp(transform.position.y + delta.y, minY, maxX),
    transform.position.z);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...