Столкновение с объектами A-Frame с использованием библиотеки физики JavaScript - PullRequest
0 голосов
/ 04 марта 2020

Итак, я на некоторое время зашла в тупик. Мне нужно, чтобы объект моей камеры сталкивался с объектами формы в сцене A-кадра, мешая камере проходить через них. По сути, я хочу создать стены, используя физический движок A-Frame, который можно найти здесь:

https://github.com/donmccurdy/aframe-physics-system

Я искал все и не могу найти простой пример того, как получить эту функцию! Я уже потратил слишком много времени на просмотр онлайн.

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

Любая помощь с этим будет принята с благодарностью!

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://aframe.io/releases/1.0.3/aframe.min.js"></script>
    <script src="//cdn.rawgit.com/donmccurdy/aframe-physics-system/v4.0.1/dist/aframe-physics-system.min.js"></script>
    <title>Aframe Physics Demo</title>
</head>

<body>
    <a-scene physics="debug: true">

        <a-entity id="camera" position="0 1.6 0">
            <!-- Camera Entity -->
            <a-entity id="camera" acceleration="200w" camera look-controls wasd-controls></a-entity>
        </a-entity>

        <a-box static-body position="0 0 -3" color="#4CC3D9" width="8" height="5" depth="0.5"></a-box>

        <a-plane static-body rotation="-90 0 0" position="0 0 -4" width="10" height="10" color="#7BC8A4"></a-plane>
        <a-sky color="#ECECEC"></a-sky>
    </a-scene>
</body>

</html>

1 Ответ

0 голосов
/ 04 марта 2020

Если вы хотите использовать физический движок для обнаружения столкновений с камерой - он должен быть частью физического движка. Это не может быть static-body, потому что он должен двигаться, и это не может быть dynamic-body, поскольку он должен контролироваться игроком, а не падать (гравитация) и вращаться вокруг.

Дон МакКарди создал компонент kinematic-body, имея в виду камеру / плеер. Он доступен как часть физических дополнений


Таким образом, имея камеру:

<a-entity camera kinematic-body></a-entity>

Вы можете обнаружить любые объекты, с которыми он сталкивается:

// inside an a-frame component - this is straight from the docs
this.el.addEventListener('collide', function(e) {
   console.log('Player has collided with ', e.detail.body.el);
   e.detail.target.el; // Original entity (camera).
   e.detail.body.el; // Other entity, which the camera touched.
   e.detail.contact; // Stats about the collision (CANNON.ContactEquation).
   e.detail.contact.ni; // Normal (direction) of the collision (CANNON.Vec3).
});

Проверьте это в этой скрипке.


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

...