分享我的塔防游戏中的敌人AI实现。希望能添加除了“沿着路径走”的行为之外的多样化行为。
演示:https://games.xgallery.online/tower-defense/
飞行单位:
bats在地面上飞行,忽视路径障碍物。使用简单的正弦波垂直运动实现:
如果 (enemy.flying) {
const baseY = 0.8
const 飞行 = Math.sin(Date.now() * 0.005 + enemy.id) * 0.2
enemy.mesh.position.y = baseY + hover
}
每个苍蝇都有一个独特的相位偏移(enemy.id),避免它们同步呼吸。
地面单位跳跃:
路径上有装饰性的岩石可以让地面单位自动跳过它们。检测附近的障碍物并应用抛物线跳跃:
对于 (const obstacle of obstacles) {
const dist = distance(enemy.pos, obstacle.pos)
如果 (dist < JUMP_RADIUS) {
const t = 1 - dist / JUMP_RADIUS
jumpHeight = Math.sin(t * Math.PI) * MAX_JUMP
}
}
击中反馈:
当受到伤害时,敌人会闪烁并更新生命条。闪烁只是对于100ms的物质颜色改变:
mesh.traverse(child => {
如果 (child.isMesh) {
const 原产地 = child.material.color.getHex()
child.material.color.setHex(0xffffff)
setTimeout(() => child.material.color.setHex(original), 100)
}
})
生命条是分离的网格parented到场景(而不是敌人)中,尽量避免缩放问题。Always billboard来Facing 相机。
方向:
敌人通过使用atan2的路径切线来旋转到面向运动方向:
const dx = nextPos.x - currentPos.x
const dz = nextPos.z - currentPos.z
enemy.rotation.y = Math.atan2(dx, dz)
所有的敌人模型都使用Meshy AI生成,然后hook到这些行为上。
评论 (0)