Я использую Oimo. js Библиотека физики с 3 js.
Я стреляю своей стрелой в цель, но моя математика, кажется, не права, и мне трудно вспомнить, как именно все формулы kinemati c работают.
У меня есть функция атаки, которая создает снаряд и запускает его с помощью трехмерного вектора. Но это не вело себя так, как я думал, и закончило тем, что нуждалось в жестком кодировании любого значения, которое на самом деле тоже не работает. Может ли кто-нибудь указать мне правильное направление? Я также хочу, чтобы стрелка имела небольшое ar c на своей траектории.
public attack( target: Unit, isPlayer: boolean ): void {
let collisionGroup = isPlayer ? CollisionGroup.PLAYER_PROJECTILES : CollisionGroup.ENEMY_PROJECTILES;
let collidesWithGroup = isPlayer ? CollidesWith.PLAYER_PROJECTILES : CollidesWith.ENEMY_PROJECTILES;
this.model.lookAt( target.position );
let direction: Vector3 = new Vector3( 0, 0, 0 );
direction = this.model.getWorldDirection( direction );
let value = this.calculateVelocity();
let velocity = new Vector3( direction.x * value, Math.sin( _Math.degToRad( 30 ) ) * value, direction.z * value );
let arrow = this.gameWorld.addProjectile( 'arrow3d', 'box', false, new Vector3( this.model.position.x, 5, this.model.position.z ), new Vector3( 0, 0, 0 ), false, collisionGroup, collidesWithGroup );
arrow.scale = new Vector3( 10, 10, 5 );
arrow.setVelocity( velocity );
this.playAnimation( 'attack', false );
}
protected calculateVelocity(): number {
return Math.sqrt( -2 * ( -9.8 / 60 ) * this.distanceToTarget );
}
Я делю на 60 из-за oimo. js timestep.