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

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

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

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

Unity3D

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

Q&A

0回答

1085閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity3D

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

0グッド

0クリップ

投稿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; } } } }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問