2d Platformer игровой камень меняющийся размер - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь сделать платформерную игру.В платформерной игре есть движущаяся платформа, которая делает все, к чему прикасается, дочерний элемент своего преобразования, в то время как он прикасается к нему.Интересно, что всякий раз, когда камень (подвижный объект с твердым телом и многоугольным коллайдером) касается движущейся платформы, масштаб камня становится беспорядочным.Несмотря на то, что шкала показывает то же самое на компоненте преобразования, она кажется больше или меньше, чем на самом деле при прикосновении к ней.Когда он перестает касаться платформы, камень кажется нормальным.Может кто-нибудь помочь мне.Спасибо.

Это скрипт движущейся платформы, который перемещает платформу.

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

public class MoveTwoTransforms : MonoBehaviour
{
    public Transform pointA;
    public Transform pointB;
    public bool HasReachedA;
    public bool HasReacedB;

    // Start is called before the first frame update
    void Start()
    {
        transform.position = pointA.position;
        HasReacedB = true;
        HasReachedA = false;

        StartCoroutine(GlideAround());
    }

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

    }

    public IEnumerator GlideAround()
    {
        while (true)
        {
            while (HasReachedA == false)
            {
                yield return new WaitForEndOfFrame();

                transform.position = Vector2.Lerp(transform.position, pointA.position, 0.01f);
                if ((Mathf.Abs(Vector2.Distance(pointA.position, transform.position)) < 0.01f))
                {
                    HasReacedB = false;
                    HasReachedA = true;
                }
            }

            while (HasReacedB == false)
            {
                yield return new WaitForEndOfFrame();
                transform.position = Vector2.Lerp(transform.position, pointB.position, 0.01f);

                if ((Mathf.Abs(Vector2.Distance(pointB.position, transform.position)) < 0.01f))
                {
                    HasReacedB = true;
                    HasReachedA = false;
                }
            }
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if((collision.gameObject.tag == "Stone"|| collision.gameObject.tag == "Player") && (collision.transform.position.y - collision.transform.lossyScale.y / 2 >= transform.position.y))
        {
            collision.transform.parent = transform;
        }
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        collision.transform.parent = null;
    }
}

Это скрипт камня

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

public class RememberPositions : MonoBehaviour
{
    public Vector3 StartingPosition;
    public Vector3 StartingRotation;
    public Vector3 StartingScale;

    float StartRotation;

    // Start is called before the first frame update
    void Start()
    {
        StartingPosition = new Vector3(transform.position.x, transform.position.y, 0);
        StartingRotation = new Vector3(0, 0, transform.position.z);
        StartingScale = new Vector3(transform.localScale.x, transform.localScale.y, transform.localScale.z);
    }

    // Update is called once per frame
    void Update()
    {
        transform.localScale = StartingScale;
    }
}

Там нет никаких ошибок итвердое тело, кажется, меняется в форме камня.Может ли кто-нибудь указать правильный код, который я должен использовать?Спасибо.

1 Ответ

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

Если ваша движущаяся платформа масштабируется, ваш камень тоже будет масштабироваться.Есть обходные пути, показанные здесь , чтобы избежать этой проблемы.Одним из них является добавление дочернего элемента GameObject к платформе и перемещение обработки столкновений с платформы на этого дочернего элемента.

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