提示コードの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
ちょっと言ってる内容が理解できないのですが、Update()で条件を書いていない限り
true,false関係無しに
PutObject();が実行されるのは当たり前の事では無いでしょうか?
あなたの回答
tips
プレビュー