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

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

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

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

Unity3D

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

Q&A

0回答

896閲覧

[Unity] Update();関数よりも早く実行させる方法

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity3D

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

0グッド

1クリップ

投稿2021/07/09 06:02

提示コードのvoid BoxPut_Button();関数ですがUpdate();のあとに実行されるためisPut変数のフラグが falseにならないためコメント部のputObject();関数が実行されてしまいます。ボタンをクリックしたときUpdate();より早く実行させる方法はあるのでしょうか?

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Control : MonoBehaviour 6{ 7 8 //UI判定 9 private bool isPutBox; //ボックス 10 11 public GameObject obj; //設置オブジェクト 12 13 private RaycastHit hit; 14 int distance = 1000; 15 Ray ray; 16 17 private GameObject player; //ゲームオブジェクト 18 private Player code; //ソースファイル名 19 20 private GameObject viewObj; //表示オブジェクト 21 22 23 //到達 24 private GameObject ReachCollision; //ゲームオブジェクト 25 private Reach reachScript; //スクリプト 26 public bool isMove; //移動するかどうか? 27 28 void Start() 29 { 30 isMove = false; 31 viewObj = Instantiate(obj,obj.transform.position,obj.transform.rotation); //選択オブジェクト 32 33 //到達 34 ReachCollision = GameObject.Find("Reach"); 35 reachScript = ReachCollision.GetComponent<Reach>(); 36 37 //プレイヤー 38 player = GameObject.Find("Ethan"); 39 code = player.GetComponent<Player>(); 40 41 42 43 isPutBox = false; 44 } 45 46 47 //プレイヤー移動 48 private void PlayerMove() 49 { 50 ray = Camera.main.ScreenPointToRay(Input.mousePosition); 51 //Debug.DrawLine(ray.origin, ray.direction * 1000, Color.red); //デバッグ 52 if (Input.GetMouseButtonDown(0)) 53 { 54 if (Physics.Raycast(ray, out hit, distance)) 55 { 56 ReachCollision.transform.position = new Vector3(hit.point.x, ReachCollision.transform.localScale.y, hit.point.z); //移動座標 57 reachScript.isReach = false; //移動 58 isMove = true; //方向 設定 59 } 60 } 61 } 62 63 // Update is called once per frame 64 void Update() 65 { 66 PutObject(); //オブジェクト設置 67 ViewObject(); //オブジェクト表示 68 PlayerMove(); //プレイヤー自動 69 } 70 71 //オブジェクトを配置する 72 void PutObject() 73 { 74///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 75 if(isPutBox == true) 76 { 77 ray = Camera.main.ScreenPointToRay(Input.mousePosition); 78 Debug.DrawLine(ray.origin, ray.direction * distance, Color.red); 79 if (Input.GetMouseButtonDown(0)) 80 { 81 if (Physics.Raycast(ray, out hit, distance)) 82 { 83 Instantiate(obj, hit.point + new Vector3(0, -obj.transform.localScale.y, 0), obj.transform.rotation); 84 } 85 } 86 } 87//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 88 } 89 90 //選択 オブジェクト 91 private void ViewObject() 92 { 93 if(isPutBox == true) 94 { 95 ray = Camera.main.ScreenPointToRay(Input.mousePosition); 96 Debug.DrawLine(ray.origin, ray.direction * distance, Color.blue); 97 if (Physics.Raycast(ray, out hit, distance, 1 << 6)) 98 { 99 viewObj.transform.position = hit.point; 100 } 101 102 } 103 } 104 105//////////////////////////////////////////////////////////////// 106 public void BoxPut_Button() 107 { 108 Debug.Log("box put "); 109 isPutBox = !isPutBox; 110 } 111//////////////////////////////////////////////////////////////// 112 113 114} 115

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

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

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

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

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

masayuki07

2021/07/11 08:28

ちょっと言ってる内容が理解できないのですが、Update()で条件を書いていない限り true,false関係無しに PutObject();が実行されるのは当たり前の事では無いでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問