私は少し問題があります。私のゲームでは、マップ全体を拡大または縮小できるようにする必要があります。これは、パーティクルシステムも同様です。いくつかは地元であり、いくつかは世界の空間です。同じシステムを10倍に拡大すると、元のサイズと同じに見えるが大きさは10倍になるようにする方法はありますか?これは、速度、重力、減衰などもスケールすることを意味します。Unity Shuriken:パーティクルシステムを完全にスケールする
0
A
答えて
0
スクリプトを作成して、ParticleSystemゲームオブジェクトに配置します。
class ParticleSystemScaler : Monobehaviour
{
ParticleSystem _ps;
public float sizeModifier = 1.0f;
void Awake()
{
_ps = GetComponent<ParticleSystem>();
//For each property you want to scale, just multiply it by the size modifier.
_ps.startSize *= sizeModifier;
}
}
あなたは、いくつかの方法でこれを改善することができた。..
- ストア何らかの
GameManager
型クラスでsizeModifier、それはいくつかに - キャッシュ起き上の元の値を必要なときにそれを取得浮動小数点数を入力してください
originalStartSize *= sizeModifier
- awakeでサイズ変更を行う代わりに呼び出すことができる関数
ResizeParticles(float modifier)
をいくつか作成してください。
これらの改善はいつでもResizeParticles()
を呼び出し、Bejascの答えに続いて(目を覚ましにそれがコンポーネントからコピーされていたであろう自分自身を)元のサイズに適用される「修飾子」
0
を持つことができますもう少し包括的かつ自動化されたバージョンを作りましたが、まだ追加していないパラメータがあります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ParticleSystemScaler : MonoBehaviour
{
private ParticleSystem ThisSystem;
private ParticleSystem.MainModule ThisMain;
private ParticleSystem.NoiseModule ThisNoise;
private ParticleSystem.LimitVelocityOverLifetimeModule ThisLimitVelocity;
private float CurrentScale;
private float InitialGravity;
private float InitialNoiseStrength;
private float InitialNoiseFrequency;
private float InitialMaxVelocity;
private void Start()
{
Initialise();
ResizeSystem(transform.lossyScale.x);
}
private void Initialise()
{
ThisSystem = GetComponent<ParticleSystem>();
if (ThisSystem)
{
ThisMain = ThisSystem.main;
ThisNoise = ThisSystem.noise;
ThisLimitVelocity = ThisSystem.limitVelocityOverLifetime;
InitialGravity = ThisMain.gravityModifierMultiplier;
InitialNoiseStrength = ThisNoise.strengthMultiplier;
InitialNoiseFrequency = ThisNoise.frequency;
InitialMaxVelocity = ThisLimitVelocity.limitMultiplier;
}
}
private void ResizeSystem(float NewScale)
{
CurrentScale = NewScale;
if (ThisSystem)
{
ThisMain.gravityModifierMultiplier = InitialGravity * NewScale;
if (ThisMain.simulationSpace == ParticleSystemSimulationSpace.World)
{
ThisNoise.strengthMultiplier = InitialNoiseStrength * NewScale;
ThisNoise.frequency = InitialNoiseFrequency/NewScale;
ThisLimitVelocity.limitMultiplier = InitialMaxVelocity * NewScale;
}
}
}
private void Update()
{
if (transform.lossyScale.x != CurrentScale) { ResizeSystem(transform.lossyScale.x); }
}
}
関連する問題
- 1. Unity:パーティクルシステムをプールに変更
- 2. パーティクルシステムをジオメトリシェイダーで完全に更新する必要があります
- 3. Visual Studio 2015に完全なUnityプロジェクト構造をロードする
- 4. javascript - 全方向にキャンバスをスケールする
- 5. スケール全体サイト
- 6. Unity3dパーティクルシステムをUIで使用する
- 7. ユーザーフォームを完全に隠すワークシートを完全に隠す
- 8. パーティクルシステムlibGDX
- 9. AndEngineパーティクルシステム
- 10. Unityの無料版には完全なソースコードが付属していますか?
- 11. バベルトランス不完全不完全?
- 12. パーティクルシステムを停止するには
- 13. Unityパーティクルシステムのエフェクトを再生する方法は、親が無効になっている場合ですか?
- 14. 完全にリフレッシュするフラグメント
- 15. スケール全体ドローコンテナのコンテンツ
- 16. OpenGLスケール全体の画面
- 17. 完全にCSS
- 18. 完全にソースコード
- 19. 完全にスクロール
- 20. は完全に
- 21. Unityで完全にオフスクリーンにならないようにするにはどうすればいいですか?
- 22. 完全な背景画像がiPhone 5でうまくスケールされない
- 23. パーティクルシステムのポイントスプライト
- 24. ナビゲーションコントローラを完全に無効にする
- 25. JSplitPaneを完全に透明にする
- 26. オーチャードCMSを完全にプライベートにする
- 27. pyrougeを完全にインストールするには?
- 28. ウェブサイトを完全にモバイルフレンドリーにする
- 29. Unityでシーンを変更する前に方向変更を完全に待つ方法
- 30. For ...各文は完全に完全なのですか?
カメラを動かすことはできませんか? – user3797758
いいえ、これはゲームの唯一のものではありません – QFSW
マップを別のシーンに移動してゲームと地図を同時にレンダリングすることは可能でしょうか?しばらくして行ったシーンの変更により、これが可能になるかもしれません。 – user3797758