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

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

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

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

Unity

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

Q&A

解決済

2回答

1449閲覧

boolが他のスクリプトに正しく渡されていない?

Rpt297

総合スコア8

C#

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

Unity

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

0グッド

0クリップ

投稿2020/05/19 11:53

編集2020/05/19 11:57

unity2dでPlayerにRaycastが当たっていないときにfalse、当たっているときはtrueをスクリプトsurpriseに渡すプログラムを書こうとしたのですがうまくいかなかっため(Debug.Logすら出ない)、unity3dで簡易的なものをつくってみたところ問題なく渡せたので何がいけなかったのかがわからなくて困っています。お手数をおかけしますがご教示いただけますでしょうか。

---確認したこと---
GameObject.Find("")の名前が間違っていないかどうか
→Inspectorからコピペして貼ったので間違うことはないはず
if (hit2D.collider.tag == "Player" && hit2D.distance < 10f)が通らないのでは
→Debug.Logで確認しましたが問題なかったです
found_Flagですべての参照を検索
→bool bikkuri = found.found_Flag;がでてきたので問題ないはず

enemy_MoveのDiscovery()がRaycastの描画でUpdateの上から3行目のところで呼び出しています

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class enemy_Move : MonoBehaviour 6{ 7 public GameObject target; 8 9 ContactFilter2D right_hit; 10 ContactFilter2D left_hit; 11 12 float x_Dis; 13 14 Rigidbody2D rb2d; 15 16 private bool minus_Sp; 17 18 private bool not_Discovery; 19 20 public bool found_Flag;//渡したいbool値 21 22 private bool first_Flag; 23 24 [Header("移動速度")] float enemy_Speed = 1f; 25 26 public float returnTime = 5f; 27 28 public float limit_Time = 5; 29 30 void Start() 31 { 32 first_Flag = false; 33 not_Discovery = true; 34 35 right_hit.useNormalAngle = true; 36 right_hit.minNormalAngle = 0; 37 right_hit.maxNormalAngle = 40; 38 39 left_hit.useNormalAngle = true; 40 left_hit.minNormalAngle = 140; 41 left_hit.maxNormalAngle = 180; 42 43 rb2d = GetComponent<Rigidbody2D>(); 44 rb2d.constraints = RigidbodyConstraints2D.FreezeRotation; 45 46 rb2d.mass = 0.5f; 47 48 found_Flag = false; 49 50 this.target = GameObject.Find("player"); 51 } 52 53 void Update() 54 { 55 56 bool wall_left = GetComponent<Rigidbody2D>().IsTouching(right_hit); 57 bool wall_right = GetComponent<Rigidbody2D>().IsTouching(left_hit); 58 59 Discovery(); 60 61 rb2d.velocity = new Vector2(minus_Sp == true ? -enemy_Speed : enemy_Speed, 0); 62 63 x_Dis = Mathf.Abs(this.gameObject.transform.position.x - target.transform.position.x); 64 65 if (wall_left) 66 { 67 68 minus_Sp = false; 69 returnTime = 0f; 70 EnemyRot(0); 71 72 } 73 74 if (wall_right) 75 { 76 77 minus_Sp = true; 78 returnTime = 0f; 79 EnemyRot(-1); 80 81 82 } 83 84 returnTime += Time.deltaTime; 85 86 if (not_Discovery && returnTime>=limit_Time) 87 { 88 returnTime = 0; 89 90 if (transform.localEulerAngles.y==180) 91 { 92 Trun_R(); 93 return; 94 } 95 if (transform.localEulerAngles.y==0) 96 { 97 Trun_L(); 98 return; 99 } 100 } 101 } 102 103 void EnemyRot(float minus) 104 { 105 Quaternion enemy_rot = transform.rotation; 106 transform.rotation = Quaternion.Euler(enemy_rot.x, 180 * minus, enemy_rot.z); 107 } 108 109 void Discovery() //Player発見時の処理 110 { 111 112 Ray2D ray2D = new Ray2D(transform.position, transform.right); 113 RaycastHit2D hit2D = Physics2D.Raycast(ray2D.origin, ray2D.direction); 114 Debug.DrawRay(ray2D.origin, ray2D.direction, Color.red); 115 116 117 if (hit2D.collider.tag == "Player" && hit2D.distance < 10f) 118 { 119 not_Discovery = false; 120 121 float step = enemy_Speed * Time.deltaTime; 122 found_Flag = true; 123 124 if (x_Dis > 0) 125 { 126 Vector2 pos = this.target.transform.position; 127 transform.position = Vector2.MoveTowards(transform.position, pos, step); 128 } 129 } 130 else 131 { 132 found_Flag = false; 133 not_Discovery = true; 134 } 135 } 136 137 138 void Trun_R() 139 { 140 Quaternion enemy_rot = transform.rotation; 141 transform.rotation = Quaternion.Euler(enemy_rot.x, 0, enemy_rot.z); 142 143 minus_Sp = false; 144 } 145 146 void Trun_L() 147 { 148 if (first_Flag) 149 { 150 Quaternion enemy_rot = transform.rotation; 151 transform.rotation = Quaternion.Euler(enemy_rot.x, -180, enemy_rot.z); 152 153 minus_Sp = true; 154 } 155 first_Flag = true; 156 157 } 158} 159

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class surprise : MonoBehaviour 6{ 7 GameObject enemy; 8 enemy_Move found; 9 10 void Start() 11 { 12 enemy = GameObject.Find("enemy01"); 13 found = enemy.GetComponent<enemy_Move>(); 14 gameObject.SetActive(false); 15 16 } 17 18 void Update() 19 { 20 bool bikkuri = found.found_Flag; 21 Debug.Log(bikkuri); 22 23 if (bikkuri) 24 { 25 gameObject.SetActive(true); 26 } 27 } 28 29}

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

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

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

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

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

guest

回答2

0

ベストアンサー

surpriseスクリプト内で、gameObject.SetActive(false);としているのが原因ではないでしょうか。

supriseスクリプトがアタッチされているGameObjectを非アクティブにしてしまうと、Update関数も呼ばれなくなるため、Debug.Logすら出なくなるかと思います。

SetActiveで表示切り替え!よくある疑問も徹底解消!

投稿2020/05/19 13:24

tsuki01

総合スコア1751

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

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

Rpt297

2020/05/19 13:41

gameObject.SetActive(false);を消すとDebug.Logが出て解決しました。ご尽力いただきありがとうございます。
guest

0

enemy、foundが目的のコンポーネントと同一のものなのかを調べてみては

投稿2020/05/19 13:23

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問