Как я могу пройти через игровой объект при использовании жесткого тела. - PullRequest
0 голосов
/ 28 октября 2019

В моем предыдущем посте я спрашиваю, как остановиться на зеленой линии яблока. Я успешно остановился на зеленой линии яблока, изменив этот код transform.position = tempvec

на

r.MovePosition(tempVec)

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

Красное яблоко может двигаться только внутри Зеленого яблока.

Как я могу пройти через другое яблоко, но также остановиться на зеленой линии яблока?

Camera mainCamera;
float zAxis = 0;
Vector3 clickOffset = Vector3.zero;
Rigidbody2D r;
public Transform apple;
// Use this for initialization
void Start()
{

    mainCamera = Camera.main;
    mainCamera.gameObject.AddComponent<Physics2DRaycaster>();

    zAxis = transform.position.z;
    r = gameObject.GetComponent<Rigidbody2D>();
}

public void OnBeginDrag(PointerEventData eventData)
{
    clickOffset = transform.position - mainCamera.ScreenToWorldPoint(new Vector3(eventData.position.x, eventData.position.y, zAxis));
}

public void OnDrag(PointerEventData eventData)
{
    //Use Offset To Prevent Sprite from Jumping to where the finger is
    Vector3 tempVec = mainCamera.ScreenToWorldPoint(eventData.position) + clickOffset;
    tempVec.z = zAxis; 
    r.MovePosition(tempVec);
    // transform.position = tempVec;
    r.velocity = Vector3.zero ;
    r.angularVelocity = 0f;
}

public void OnEndDrag(PointerEventData eventData)
{

}

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

Изображение для лучшего понимания

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

Установите слои для своих игровых объектов,

, затем перейдите в настройки проекта из Edit (вверху справа).
Image of how to go to Project Settings

После этого перейдите на вкладку Physics. (Или Physics 2D, если вы имеете дело с этим)
Image of the Physics Tab panel

Флажки представляют каждый раз, когда игровой объект с определенным слоем может взаимодействовать с другим упомянутым слоем.

Если этот флажок снят, игровые объекты с соответствующими слоями не будут сталкиваться друг с другом. (При условии, что у них есть коллайдер)

В вашем случае, я думаю, вы хотите снять с себя красное яблоко (и другие яблоки, кроме зеленого).

0 голосов
/ 28 октября 2019

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

Но если вы хотите быть немного более точным, вы можете добавить еще один слой для "HeldApple""и отключите столкновения со слоем RedApples. Затем вы можете изменить слой яблока, который вы держите, когда вы нажимаете на него. Таким образом, красные яблоки МОГУТ все еще сталкиваться друг с другом, но яблоко, которое вы держите, не может.

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