質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

受付中

複数の物体を結合したものを回転、拡大縮小したいのですがうまくできません。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0回答

0評価

0クリップ

558閲覧

投稿2020/10/15 07:42

前提・実現したいこと

複数の物体を結合したものを回転、拡大縮小したいです。

発生している問題・エラーメッセージ

1つの物体だけを回転、拡大縮小するには問題なく実行できるのですが、 複数の物体をまとめたもの(親オブジェクト)だと変な動作になってしまいます。

該当のソースコード

unity, C#
using UnityEngine; using System.Collections; public class ObjCtrl : MonoBehaviour { public GameObject obj; //回転用 Vector2 sPos; //タッチした座標 Quaternion sRot;//タッチしたときの回転 float wid,hei,diag; //スクリーンサイズ float tx,ty; //変数 //ピンチイン ピンチアウト用 float vMin = 0.5f , vMax = 2.0f; //倍率制限 float sDist = 0.0f, nDist = 0.0f; //距離変数 Vector3 initScale; //最初の大きさ float v = 1.0f; //現在倍率 void Start() { wid = Screen.width; hei = Screen.height; diag = Mathf.Sqrt(Mathf.Pow(wid,2) + Mathf.Pow(hei,2)); initScale = obj.transform.localScale; } void Update () { if (Input.touchCount == 1){ //回転 Touch t1 = Input.GetTouch (0); if (t1.phase == TouchPhase.Began){ sPos = t1.position; sRot = obj.transform.rotation; }else if(t1.phase == TouchPhase.Moved||t1.phase == TouchPhase.Stationary){ tx = (t1.position.x - sPos.x)/wid; //横移動量(-1<tx<1) ty = (t1.position.y - sPos.y)/hei; //縦移動量(-1<ty<1) obj.transform.rotation = sRot; obj.transform.Rotate(new Vector3(90*ty, -90*tx, 0),Space.World); } } else if (Input.touchCount >= 2) { //ピンチイン ピンチアウト Touch t1 = Input.GetTouch (0); Touch t2 = Input.GetTouch (1); if (t2.phase == TouchPhase.Began) { sDist = Vector2.Distance (t1.position, t2.position); } else if ((t1.phase == TouchPhase.Moved||t1.phase == TouchPhase.Stationary) && (t2.phase == TouchPhase.Moved||t2.phase == TouchPhase.Stationary) ) { nDist = Vector2.Distance (t1.position, t2.position); v = v + (nDist - sDist) / diag; sDist = nDist; if(v > vMax) v = vMax; if(v < vMin) v = vMin; obj.transform.localScale = initScale * v; } } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。