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

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

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

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1649閲覧

マウスで押している間だけ動く。押していないオブジェクトは動かない

hiyokotori_ch

総合スコア12

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/11/22 01:53

パズルゲームを作っているのですが、今現在、パーツにRigitbodyを加え、positionの固定を使用としています。

クリックしているオブジェクトのみ動くようにしたいのですが常時固定されてしまい、動かなくなりました。

クリックしているオブジェクトのみを動かす方法としてどこを変更したらいいとかありますか?

C#

1コード 2 3const float MaxDistance = 0.45f; 4 Rigidbody rigidbody; 5 private Vector3 screenPoint; 6 private Vector3 offset; 7 8 class Edge 9 { 10 public Transform transform; 11 public Transform pair; 12 public float PairCount = 7; 13 14 15 16 public bool Check() 17 { 18 float distance = Vector3.Distance(transform.position, pair.position); 19 if (distance > MaxDistance) 20 return false; 21 22 float rotationDelta = transform.eulerAngles.y - pair.eulerAngles.y; 23 rotationDelta = Mathf.Abs(rotationDelta); 24 if (rotationDelta > 10) 25 return false; 26 27 return true; 28 } 29 30 public Vector3 GetDistance() 31 { 32 return pair.position - transform.position; 33 } 34 } 35 36 List<Edge> edges = new List<Edge>(); 37 38 // Start is called before the first frame update 39 void Start() 40 { 41 rigidbody = GetComponent<Rigidbody>(); 42 rigidbody.constraints = RigidbodyConstraints.FreezePosition;//移動しない 43 rigidbody.constraints = RigidbodyConstraints.FreezeRotation;//回転しない 44 foreach (Transform child in transform) 45 { 46 Edge edge = new Edge(); 47 edge.transform = child; 48 49 string otherName; 50 char lastCharacter = child.name[child.name.Length - 1]; 51 if (lastCharacter == 'A') 52 { 53 otherName = child.name.Substring(0, child.name.Length - 1) + "B"; 54 } 55 else 56 { 57 otherName = child.name.Substring(0, child.name.Length - 1) + "A"; 58 } 59 60 edge.pair = GameObject.Find(otherName).transform; 61 62 edges.Add(edge); 63 } 64 65 66 } 67 public void onClickAct() 68 { 69if (Input.GetMouseButtonUp(0)) 70 { 71 foreach(Edge edge in edges) 72 { 73 if (edge.Check()) 74 { 75 transform.position += edge.GetDistance(); 76 } 77 } 78 } 79 }

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

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

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

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

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

sakura_hana

2019/11/22 02:13

・「onClickAct」が正しく呼ばれているか確認してください。(このコード内からは呼ばれていません) ・「edge.Check()」が想定通りの動きをしていることを確認してください。 ・GetMouseButtonUpは「マウスのボタンが離された直後の1フレーム」しかtrueになりません。動く部分が「transform.position += edge.GetDistance();」だとすると、動くとしてもクリック後の1フレームのみです。多分希望の動きと違うので「unity マウス 押している間」などでググってみてください。
pepperleaf

2019/11/24 02:41

input.GetMouseButton() で、常にマウスの状態を確認し、処理する。 でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問