我也遇到了同样的问题,试图制作一个简单的火球效果。对效果进行的旋转或任何变换都不会按照你想要的方式进行,请不要问我为什么,这只是3D粒子系统中的一些奇怪问题之一。
你可以获取效果的发射器并手动更改θ和φ角度。我现在无法访问我的代码,但如果需要,我可以给你一个例子。但一旦找到这两个角度,你就可以使粒子朝任何方向发射。
这是我初始化我的火球效果的方法。θ和φ角度可以每个时间片更改,并且可以解决你的问题。
effect = Assets.assetManager.get(skillInfo.skillEffect, ParticleEffect.class).copy();
for (int i = 0; i < effect.getControllers().size; i++) {
effect.getControllers().get(i).attached = skillInfo.attached;
if (skillInfo.attached && effect.getControllers().get(i).findInfluencer(DynamicsInfluencer.class) != null) {
DynamicsInfluencer di = effect.getControllers().get(i).findInfluencer(DynamicsInfluencer.class);
DynamicsModifier dm;
for (int j = 0; j < di.velocities.size; j++) {
dm = (DynamicsModifier) di.velocities.get(j);
if (dm instanceof PolarAcceleration) {
float phiSpread = Math.abs(((PolarAcceleration) dm).phiValue.getHighMax()
- ((PolarAcceleration) dm).phiValue.getHighMin());
((PolarAcceleration) dm).phiValue.setHigh(90 - 0.5f * phiSpread, 90 + 0.5f * phiSpread);
float angle = getAngleAroundY(direction);
float thetaSpread = Math.abs(((PolarAcceleration) dm).thetaValue.getHighMax()
- ((PolarAcceleration) dm).thetaValue.getHighMin());
((PolarAcceleration) dm).thetaValue.setHigh(angle - thetaSpread * 0.5f, angle + thetaSpread * 0.5f);
} else {
}
}
} else {
}
地点:
((PolarAcceleration) dm).phiValue.setHigh(90 - 0.5f * phiSpread, 90 + 0.5f * phiSpread);
((PolarAcceleration) dm).thetaValue.setHigh(angle - thetaSpread * 0.5f, angle + thetaSpread * 0.5f);
以下内容可能会对您产生兴趣。
编辑:请参见下面的代码,该代码与在代码中设置theta和phi角度有关。
DynamicsInfluencer di = effect.getControllers().get(i).findInfluencer(DynamicsInfluencer.class);
DynamicsModifier dm;
for (int j = 0; j < di.velocities.size; j++) {
dm = (DynamicsModifier) di.velocities.get(j);
((PolarAcceleration) dm).phiValue.setHigh(90 - 0.5f * phiSpread, 90 + 0.5f * phiSpread);
((PolarAcceleration) dm).thetaValue.setHigh(angle - thetaSpread * 0.5f, angle + thetaSpread * 0.5f);
}