2017-12-06 37 views
0

ワールド空間でゲームオブジェクトを拡大縮小:ユニティ:私はこれを達成しようとしています

enter image description here

これは、Z軸と一緒にブレンダーでワールド空間にスケーリングされた非軸配向した立方体である(Y中ユニティ)。私はUnityで同じことを達成したいと思います。私はこれのための数式を見つけようとしましたが運がなかったので、私は私のオブジェクトを別のGameObjectに親し、親を拡大することができますが、元のGameObjectを解除してしまえば元のGameObjectを拡大する必要があります。どんなアドバイスも大歓迎です。

答えて

0

これを元に戻したり、拡大縮小したり、元に戻したりすることができます。また、これらのオブジェクトを個別に保持するゲームオブジェクトを作成して、すべて独自の縮尺で表示することもできます。

void Rescale(Transform obj, Vector3 newScale) 
{ 
    if(obj.root != obj) 
    { 
     Transform parent = obj.parent; 
     obj.SetParent(null); 
     obj.localScale = newScale; 
     obj.SetParent(parent, true); 
    } 
} 
+0

私が達成しようとしている操作は、説明したいずれの方法でも実行できません。あなたはLOCAL空間でスケーリングを記述しただけで、WOLD空間でスケーリングする必要があります。あなたの行動は決して立方体を歪ませません、それは常に90度のコーナーを持つ数字のままです。 – cubrman

+0

申し訳ありませんが、あなたの投稿が間違っています。私が知っているユニティのオブジェクトをゆがめる唯一の方法は、それを空のゲームオブジェクトの中に置き、親をスケーリングしてから子オブジェクトを回転させることです。 – Fiffe

0

あなたはこの機能を使用して、ローカル空間にワールド空間からスケール(のVector3)を変換することができます:

transform.parent.InverseTransformVector(worldScale) 

あなたのキューブにあなたはこのような何かを行う可能性があり、正しい縮尺適用するには:

cube.transform.localScale = cube.transform.parent.InverseTransformVector(worldScale); 
+0

これは機能しません。ローカルスケールx、y、z番号を組み合わせても、私が参照している結果は得られません。私の謙虚な研究は、Unityが内部的にマトリックスの代わりにスケール、回転、ポジションを使用するため、私がしようとしていることが達成できないと信じさせました。 – cubrman

+0

私が知る限り、統一は行列を使用します。 Quaternionクラスは、行列演算を実現するのに役立ちます。 あなたの問題について上記で提案した関数を使用するには、適切な回転を持つ外部オブジェクトを使用し、このオブジェクトのInverTransformVectorを呼び出して必要なスケールを取得してからgameObjectに適用する必要があります。 しかし私はQuaternionを使う方が良い選択だと思います。 – BenBenMushi

+0

あなたが私の質問を理解しているかわからない、私は変形行列(スキュー行列)を設定しようとしています。私が学んだことから、Unityは内部的にこれを許さないので、これは不可能です。 – cubrman