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

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

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

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

Unity

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

Q&A

解決済

1回答

1568閲覧

スクリプトの無効が効かない

1nanana

総合スコア15

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/09/23 07:16

前提・実現したいこと

Unity 2019.3.6f1 Wondows10 にて開発を行っています。
Unity、C#初心者です。

実現したいことは以下の3点です。
1. オブジェクトにマウスオンすることでオブジェクトを移動させる
2. マウスオフするとオブジェクトを元の位置に戻す
3. オブジェクトをクリックすると移動した位置(元の位置ではない)で固定される

それを実現するために1・2(スクリプト名:Movement)と3(スクリプト名:Kotei)でスクリプトを分割し、以下のようなスクリプトを記述しました。

スクリプト通り動き、オブジェクトをクリックした際には”OnMouseDown”のアラートとMovementのスクリプトがoffになります(Movementのスクリプトのチェックボックスが外れる)。しかし、オブジェクトからマウスを外してしまうと(マウスオフすると)Movementのスクリプト内容が実行され、元の場所に戻ってしまします。なぜでしょうか。考え方からまずいのでしょうか。わかる方いらっしゃいましたら宜しくお願い致します。

<1・2>=スクリプト名:Movement

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Movement : MonoBehaviour 6{ 7 8 // Start is called before the first frame update 9 void Start() 10 { 11 12 } 13 14 // Update is called once per frame 15 void Update() 16 { 17 18 } 19 20 public void Touch() 21 { 22 transform.position = new Vector3 (20, 0, 20); 23 } 24 25 public void UnTouch() 26 { 27 transform.position = new Vector3 (0, 0, 0); 28 } 29 30 31} 32

<3>=スクリプト名:Kotei

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Kotei : MonoBehaviour 6{ 7 // Start is called before the first frame update 8 void Start() 9 { 10 11 } 12 13 // Update is called once per frame 14 void Update() 15 { 16 17 } 18 19 public void Click() 20 { 21 transform.position = new Vector3 (20, 0, 20); 22 Debug.Log("OnMouseDown"); 23 gameObject.GetComponent<Movement>().enabled = false; 24 } 25 26 27 28 29} 30

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

エラーメッセージは表示されていません。 スクリプト通り動き、オブジェクトをクリックした際には”OnMouseDown”のアラートとMovementのスクリプトがoffになります(Movementのスクリプトのチェックボックスが外れる)。しかし、オブジェクトからマウスを外してしまうと(マウスオフすると)Movementのスクリプト内容が実行され、元の場所に戻ってしまします。

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

enabledをfalseにしてもUpdate()等が呼ばれなくなるだけでスクリプト自体は生きてます。
固定したというフラグだけ用意して、スクリプトは1本でいいんじゃないでしょうか。

C#

1public class Movement : MonoBehaviour 2{ 3 bool kotei = false; 4 5 public void Touch() 6 { 7 if(!kotei){ 8 transform.position = new Vector3 (20, 0, 20); 9 } 10 } 11 12 public void UnTouch() 13 { 14 if(!kotei){ 15 transform.position = new Vector3 (0, 0, 0); 16 } 17 } 18 19 public void Click() 20 { 21 transform.position = new Vector3 (20, 0, 20); 22 kotei = true; 23 } 24}

投稿2020/09/23 11:22

i_zna

総合スコア198

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

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

1nanana

2020/09/27 04:05

なるほど、そうなんですね!!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問