Hi.
I’m trying to detect between objects by raycast.
I’ll show you first my idea.
Want:
- Main Entity (Yellow) raycasts in six axial directions.
- If dectect other entity, return “Detect” message.
So, I wrote the code based on that.
PreviewPlacement.prototype.isPlacementValid = function(position) {
var self = this;
function detectObject(origin, direction) {
var distance = 0.5;
direction.addScalar(distance)
var hit = self.app.systems.rigidbody.raycastFirst(origin, direction);
self.app.drawWireSphere(origin, 0.5, pc.Color.RED);
self.app.drawLine(direction, origin, pc.Color.GREEN);
if (hit) {
if (hit.entity.tags.has('tile')) return null;
if (hit.entity.name === self.previewEntity.name) return null;
return hit.entity;
}
return null;
};
var transform = self.previewEntity.getWorldTransform();
var normals = {
up: transform.transformPoint(new pc.Vec3(0, 1, 0)),
down: transform.transformPoint(new pc.Vec3(0, -1, 0)),
left: transform.transformPoint(new pc.Vec3(-1, 0, 0)),
right: transform.transformPoint(new pc.Vec3(1, 0, 0))
}
const upEntity = detectObject(position, normals.up);
const downEntity = detectObject(position, normals.down);
const leftEntity = detectObject(position, normals.left);
const rightEntity = detectObject(position, normals.right);
if(upEntity || downEntity || leftEntity || rightEntity) {
console.log(upEntity, downEntity, leftEntity, rightEntity);
return false;
}
return true;
};
- How to add ‘front’ and ‘back’?
- In the drawline above code, only the upper and right lines are visible. Is this normal?