2017-01-28 18 views
1

Я пытаюсь сделать основы игры сверху вниз.Предотвращение перемещения 2D-плеера через стену

В настоящее время у меня есть спрайт для игрока, на который нанесен Kinematic RigidBody2D с помощью коллайдера 2D. Масштаб этого спрайта равен (1,1).

Настенный спрайт имеет коробчатый коллайдер со шкалой (20,1).

Для управления проигрывателем используется следующий код.

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


public class PlayerMovement : MonoBehaviour { 
    public Rigidbody2D rb2D; 
    void Start() { 
     rb2D = GetComponent<Rigidbody2D>(); 
    } 
    void FixedUpdate() { 
     if (Input.GetKey (KeyCode.UpArrow)) { 
      Vector2 move = new Vector2(0,1); 
      rb2D.MovePosition(rb2D.position + move); 
     } 
     if (Input.GetKey (KeyCode.DownArrow)) { 
      Vector2 move = new Vector2(0,-1); 
      rb2D.MovePosition(rb2D.position + move); 
     } 
    } 
} 

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

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

Спасибо!

+0

У вас есть коллайдеры, прикрепленные к вашим стенам? –

ответ

0

Снимите отметкуIsKinematic Недвижимость в компоненте RigidBody2D. Это потому, что установка isKinematic к истинной делает ваш gameObjectНЕ затронуты любой физической или тяжести сил.

А также посмотреть, есть ли ваша стена не отмечено как IsTrigger! Убедитесь, что в компоненте Collider вашей стены.

+0

Спасибо за ваш ответ. Теперь я следую другому учебнику, но все еще сталкиваюсь с той же проблемой. В этом руководстве перемещается символ с использованием entity.positio, а не MovePosition. Я внесла изменения, которые вы предлагаете, и я остался с этим http://i.imgur.com/6FRQi7V.gifv –

+0

У вас есть 'BoxCollider2D' на участке травы? Если да, то убедитесь, что это не 'триггер' ... а также проверьте ур игрока. Он должен иметь прикрепленный к нему компонент' rigidBody2D'! – utkdub

+1

У меня лично довольно неприятный опыт с 'MovePosition'. Попробуйте прямо установить «скорость» вашего «Rigidbody2D». –