0

これは、繰り返される質問のように思えるかもしれません。私は釣り竿とロッドの端にフックを持っています。画面上のどこをクリックしても、クリックの y インデックスに基づいてフックをその位置に移動します。たとえば、フックが現在 (2,3) にあるとします (400, 9) をクリックすると、フックが (2,9) に移動します。そのため、クリックに基づいて垂直に移動するだけです。

これはうまくいっています。フックの位置に基づいて、それに応じて釣り竿をスケーリングします。したがって、フックの配置が完了したら、次の ScaleRod() を呼び出します。ロッド スプライトには、中央ではなく左上にピボットがあります。ロッドを縦にのみスケールさせたい。以下は同じための私のコードです:

         void scaleRod() {
         //get current size of the fishing rod
         var rodLength = System.Math.Abs(renderer.bounds.size.y); 
         //Get distance between the hook and the rod based on y coordinates.
         float hookRodDistance = (System.Math.Abs(transform.position.y) + rodLength) - System.Math.Abs(hookObject.transform.position.y);
         hookRodDistance =  System.Math.Abs(hookRodDistance);
         //Calculate the scale factor
         float scaleFactor = hookRodDistance / rodLength;
         //Scale  the rod        
         transform.localScale = new Vector3(transform.localScale.x, scaleFactor * transform.localScale.y, transform.localScale.z );
        }

この関数は、スケール上で私に奇妙な出力を与えています。

誰か助けてください。これでしばらく立ち往生しています。どうもありがとう。

編集:問題についてのより良いアイデアのために画像を追加します。

初期設定

最初のクリック

セカンドクリック

4

1 に答える 1

0

あなたの数学は間違っていると思います。いくつかの数値をコードに挿入しましょう。ロッドのピボット ポイントが Y 0 (したがって は0 になります)、ロッドの長さは1 transform.position.y、フックは Y 2 にあるとします。ロッドが1単位短すぎるにもかかわらず、サイズをまったく変更します。hookRodDistancescaleFactorlocalScale

localScale代わりに、ロッドの長さを計算し、 Y をその長さに設定することができます。

var desiredLength = System.Math.Abs(transform.position.y - hookObject.transform.position.y);
transform.localScale = new Vector3(transform.localScale.x, desiredLength, transform.localScale.z );
于 2015-03-04T11:06:16.053 に答える