Обнаружение столкновений с пулей в Three.js - PullRequest
0 голосов
/ 22 октября 2018

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

Вот мое основное обнаружение столкновений для моего Героя, врезавшегося в стены.

    for (var vertexIndex = 0; vertexIndex < hero.geometry.vertices.length; vertexIndex++){      
        var localVertex = hero.geometry.vertices[vertexIndex].clone();
        var globalVertex = hero.matrix.multiplyVector3(localVertex);
        var directionVector = globalVertex.sub( hero.position );

        var ray = new THREE.Raycaster( hero.position, directionVector.clone().normalize() );
        var collisionResults = ray.intersectObjects( collidableMeshList );
        if ( collisionResults.length > 0 && collisionResults[0].distance < directionVector.length() ) 
        {
            console.log('BANG!')
        }
    }

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

Есть ли более простое обнаружение, которое я могу реализовать, чтобы справиться с этим?

Я медленно разбираюсьthree.js и я уверен, что упускаю что-то простое, но просто не могу понять другие примеры.Любая помощь или хорошая точка в правильном направлении будет принята с благодарностью.

Редактировать

Я играл, очевидно, мои первые попытки потерпели неудачу, и я 'Я не намного ближе, но мне интересно, если бы я был ближе к линиям, если бы я попытался определить положение маркеров и посмотреть, находится ли его позиция внутри моего объекта в массиве моих столкновений.

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

1 Ответ

0 голосов
/ 23 октября 2018

Хорошо ... моему collidableMeshList нужно было кое-что прояснить, но я обнаружил, что этот подход не вызывает слишком много проблем с производительностью (поскольку он не слишком сильно замедляет работу), я нашел это в этой теме

Посмотрите на код, если кто-то считает, что его можно еще улучшить, дайте мне знать!

bullets.forEach(bullet => {
    var bulletBB = new THREE.Box3().setFromObject(bullet);
    var enemyBB = new THREE.Box3().setFromObject(enemy);
    var bulletCollision = bulletBB.isIntersectionBox(enemyBB);
    if(bulletCollision){
        console.log('Hit Enemy!');
    }
}

Ознакомьтесь с прикрепленной веткой для получения дополнительной информации о том, как он работает.

...