私は "リフト"を持っています。ゲーム中に、パーティクルシステムに入り、空中で移動します(y)。パーティクルシステムの変換と円錐の半径を親に対して相対的に保ちます
パーティクルシステムは立方体/リフトの子供です。だから、キューブをスケーリングするとき、私はパーティクルシステムの設定を変更したくありません。それ自身で拡張する必要があります。
立方体が5のy位置とyの10の高さ/スケーリングを持つとき、パーティクルシステムはそれ自体を下に置くべきです。
ご覧のとおり、私は完全に自動化したいと思います。コードに向かうとき
だから、私はこの
[SerializeField]
ParticleSystem liftParticles;
private void Start()
{
Vector3 objectScale = transform.localScale; // cube scaling
Vector3 particlePos = liftParticles.transform.position; // temp position
particlePos.y = (particlePos.y - objectScale.y)/2; // move down on y
liftParticles.transform.position = particlePos; // set particle position
float transformScalingX = objectScale.x; // x scaling of the cube
float transformScalingZ = objectScale.z; // z scaling of the cube
var shape = liftParticles.shape; // set the cone radius now
shape.radius = transformScalingX > transformScalingZ ? transformScalingX : transformScalingZ;
liftParticles.shape = shape;
}
私は上記のように、次の例と一緒に行きたい...
キューブのスケーリングを得ました(3,10,3 )、その位置は(0,5,0)
私の現在の計算は、-0,75 の値を返しますが、の値は-0.5でなければなりません。
コードにエラーがありますか? (もちろんそうです...)
2番目の問題はパーティクルシステムの半径をどのように変更するのですか?円錐の半径を参照しようとすると、私はそれを変更することはできないと言います、それは読み込み専用です。
ですか?
もちろん、particlesystemはただのスケーリングを持つyの上-0,5fに常になければならない(1,1,1):私は
編集...私は何とかこれを変更することを願って。もはや計算の必要はありません。
しかし、形状の半径を変更して、リフトの高さに対するパーティクルの寿命を設定する必要があります。手段
private void Start()
{
Vector3 liftScale = transform.localScale; // Liftscaling
var shape = liftParticles.shape; // temp shape
shape.radius = liftScale.x > liftScale.z ? liftScale.x : liftScale.z; // set radius
liftParticles.shape = shape; // assign the temp shape to the real shape
liftParticles.main.startLifetime = ; // set the liftetime of the particles relative to its parent height on y
}