2017-08-28 2 views
0

私は "リフト"を持っています。ゲーム中に、パーティクルシステムに入り、空中で移動します(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 
} 

答えて

1

パーティクルシステムのリフト(立方体)の子供を一緒に動かせるようにしたことを理解しています。両方のオブジェクトが一緒に動くようにしたいが、独立してスケールする場合は、Empty GameObjectを親として使うことを検討する必要があります。

この空のGameObjectをキューブの真ん中(リフト)に配置し、空のGameObjectのリフトとパーティクルフィルタの子を作ることができます。その後、リフトの代わりに空のGameObjectを動かすと、子供も同様に移動します。

ラジオを修正について、このスクリプトを試してみてください

GameObject myParticleGenerator; 

ParticleSystem.ShapeModule pShape; 

pShape = yParticleGenerator.GetComponent<ParticleSystem>().shape; 

pShape.radius = 4.0f; 
関連する問題