Как сделать спрайт медленнее, когда он движется над спрайтом? - PullRequest
1 голос
/ 01 октября 2019

У меня есть игровой объект под названием «Игрок», и моя карта состоит из коротких и длинных трав. Если мой игрок на высокой траве, я хочу, чтобы он замедлился. Еще одна проблема заключается в том, что в моей игре есть несколько игровых объектов с длинными травами. Вот скриншот из них:

https://imgur.com/hUq4baV

Вот как выглядит мой текущий код движения:

public class PlayerMovement : MonoBehaviour
{

    public Sprite Up;
    public Sprite Down;
    public Sprite Right;
    public Sprite Left;
    public float speed;
    private SpriteRenderer sr;


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

        Vector3 move;

        if (Input.GetKey(KeyCode.W))
        {
            GetComponent<SpriteRenderer>().sprite = Up;
            move = new Vector2(0, speed * Time.deltaTime);

            transform.position += move;
        }
        if (Input.GetKey(KeyCode.A))
        {
            GetComponent<SpriteRenderer>().sprite = Left;
            move = new Vector2(speed * Time.deltaTime, 0);

            transform.position -= move;
        }
        if (Input.GetKey(KeyCode.D))
        {
            GetComponent<SpriteRenderer>().sprite = Right;
            move = new Vector2(speed * Time.deltaTime, 0);

            transform.position += move;
        }
        if (Input.GetKey(KeyCode.S))
        {
            GetComponent<SpriteRenderer>().sprite = Down;
            move = new Vector2(0,speed * Time.deltaTime);

            transform.position -= move;
        }
    }
}

// All my code does is that on each WASD, it changes to a different sprite and moves it.

Объяснение будет полезно, потому что яновичок в этом.

Ответы [ 2 ]

3 голосов
/ 01 октября 2019
  1. используйте коллайдеры, например. boxcolliders, чтобы определить, касается ли игрок травы.
  2. Используйте тег на своем игроке
  3. , используйте метод oncollisionenter2d () на траве
 void OnCollisionEnter2D(Collision2D col)  {
     if(col.tag == "PlayerTag") {
         playerScriptWhereSpeedIsLocated.speed = 1 //the speed you want
     } }
1 голос
/ 01 октября 2019

Одним из решений этой проблемы было бы использование 2D триггерных коллайдеров .

Предполагая, что у вашего игрока есть какой-то 2D-коллайдер, вы можете прикрепить триггерные коллайдеры к своим травяным объектам, которыезатем можно отправить сообщение в сценарий PlayerMovement, когда игрок входит в триггер или покидает его, добавляя методы OnTriggerEnter2D и OnTriggerExit2D в класс PlayerMovement. Вот пример того, как это может работать:

void OnTriggerEnter2D(Collider2D col)
{
    // You can use gameObject.tag to determine what type of object we're colliding with
    if(col.gameObject.tag == "LongGrass"){
        speed = .8f;
    }
}

void OnTriggerExit2D(Collider2D col)
{
    if(col.gameObject.tag == "LongGrass"){
        speed = 1f;
    }
}

Я бы посоветовал вам заглянуть в матрицу действий Collision , если у вас возникают проблемы с обнаружением столкновений таким образом. Вы также убедитесь, что вы правильно пометили свою траву, чтобы этот метод работал.

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