Как остановить игрока от автоматического прыжка на движущейся платформе? - PullRequest
0 голосов
/ 03 июня 2018

Я сделал движущуюся платформу, которая идет вертикально сверху вниз, а затем снизу вверх и так далее.Платформа движется нормально, но размещение моего плеера делает его нестабильным.

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

Становится еще хуже, когда я увеличиваю скорость своей платформы.Я не знаю, связано ли это с физическим эффектом единства 2d или как.Я попытался использовать физический материал 2D на моем объекте игрока и платформе, установив bounce на 0 и трение на 50, но, похоже, ничего не работает.У кого-нибудь есть идеи, как отключить физический эффект движущейся платформы?Вот мой код для перемещения платформы:

public class BrickMoveVErtical : MonoBehaviour {
     public Vector3 positionOne;
     public Vector3 positiontwo;
     public Vector3 nextposition;
    /*Empty object is already made on unity editor and its parent of platform(Plank) and other  
       empty object "pointB". Point "B" is already mapped on editor and platform is set to go from 
         its original pos to point B */
     public Transform plankTranform;         
     public Transform positionBTransform;
     public float speed;
     // Use this for initialization
     void Start () {
         positionOne = plankTranform.localPosition;
         positiontwo = positionBTransform.localPosition;
         nextposition = positiontwo;
     }

     // Update is called once per frame
     void Update () {
         move();
             }
     private void move() {
    plankTranform.localPosition = Vector3.MoveTowards(plankTranform.localPosition,nextposition,Time.deltaTime*speed);
         if(Vector3.Distance(plankTranform.localPosition,nextposition)<0.1)
         { changeMovementPlank(); }
     }
     void changeMovementPlank() {
         nextposition = nextposition != positionOne ? positionOne : positiontwo;
     }                        

 }

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Вы можете использовать этот код для установки / отмены родительского объекта GameObject:

void OnTriggerEnter2D(Collider2D other)
{
    if(other.gameObject.tag == "PlatformGroup")
        player.SetParent(other.gameObject.transform)

}

void OnTriggerExit2D(Collider2D other)
{
    if(other.gameObject.tag == "PlatformGroup")
         player.SetParent(null);
}

Что вы должны сделать:

  1. Создать пустой GameObject,и вы делаете свою платформу дочерним элементом этого пустого GameObject.Отметьте его как PlatformGroup.

  2. . Вы добавляете скрипт для перемещения платформы в этот объект EmptyGame вместо использования его в самой платформе.

  3. Затем добавьте коллайдер в пустой игровой объект (PlatformGroup), а другой в Player.Установите один из игроков в качестве триггера.

  4. Добавьте приведенный выше код к контроллеру игрока.

Теперь, когда Игрок перепрыгнет через Платформу, он станет потомком одного и того же GameObject платформы, и они будут двигаться вместе без каких-либо деформаций в GameObject.Также, когда игрок покидает платформу, идя или выпрыгивая из нее, он перестает быть ребенком.

0 голосов
/ 03 июня 2018

У меня были похожие проблемы с быстрыми платформами в моей игре, когда персонаж зависал в воздухе или соскальзывал, в зависимости от направления платформы.Я нашел обходной путь для этой проблемы, просто изменив персонажа transform.parent на платформу, на которой он прыгал, когда игрок существует, коллайдер платформы просто возвращает игрокам оригинал transform.parent.

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

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