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

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

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

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

Unity

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

Q&A

0回答

910閲覧

bool値を返すだけなのに処理が異なる

Rpt297

総合スコア8

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/07/02 09:25

いつも大変お世話になっております。
落ちモノパズルを作成していています。
以下のプログラムはミノ回転時に縦、横の壁を貫通しないように座標を戻す処理とその座標にミノがある場合は逆回転させて元に戻す処理(回転させない)を行おうとしています。
壁を貫通しない処理はできているのですが、回転させない処理を入れるとなぜか壁を貫通するようになってしまいます。
回転させないの内容は各ブロックの現在の座標位置にミノがある場合はfalseを、ない場合はtrueを返すだけなので、何かの値を変えるという処理は行っていません。なぜこのような現象が起こるのか教えていただけると幸いです。

試したこと
処理順番を縦方向の防止、横方向、回転させないにすると壁は貫通しないが、ミノを貫通するので動いてない。
//回転させない を消せば壁は貫通しない→回転させないのせいでおかしくなったと予想。
//回転させない の中の処理をコメントアウトしても壁は貫通する。

C#

1 if (Input.GetKeyDown(KeyCode.A)) 2 { 3 transform.RotateAround(transform.TransformPoint(rote_Pos), new Vector3(0, 0, 1), 90); 4 5 6 //縦方向の防止 7 if (!SideCheck()) 8 { 9 transform.position += new Vector3(0, 1, 0); 10 } 11 12 //回転させない 13 if (!Table_Check()) 14 { 15 transform.RotateAround(transform.TransformPoint(rote_Pos), new Vector3(0, 0, 1), -90); 16 } 17 18      //横方向 19 if (!SideCheck() && Vel_Check()) 20 { 21 transform.position += new Vector3(1, 0, 0); 22 23 if (!SideCheck() && Vel_Check()) 24 { 25 transform.position += new Vector3(1, 0, 0); 26 } 27 } 28 29 if (!SideCheck() && !Vel_Check()) 30 { 31 transform.position += new Vector3(-1, 0, 0); 32 33 if (!SideCheck() && !Vel_Check()) 34 { 35 transform.position += new Vector3(-1, 0, 0); 36 } 37 } 38 39 } 40 41 bool SideCheck() 42 { 43 foreach(Transform mino_Pos in transform) 44 { 45 //配列に正しく格納させるためにRoundToIntで四捨五入 46 int mino_X = Mathf.RoundToInt(mino_Pos.transform.position.x); 47 int mino_Y = Mathf.RoundToInt(mino_Pos.transform.position.y); 48 49 Vector2 mino_Vet = new Vector2(mino_X, mino_Y); 50 51 if (CheckInside(mino_Vet) == false) 52 { 53 return false; 54 } 55 } 56 57 return true; 58 } 59 60 //true : 配列は空 false : 配列に何かが格納されている を返す 61 bool Table_Check() 62 { 63 foreach (Transform mino_Pos in transform) 64 { 65 int mino_X = Mathf.RoundToInt(mino_Pos.transform.position.x); 66 int mino_Y = Mathf.RoundToInt(mino_Pos.transform.position.y); 67 68 if (mino_Table[mino_Y, mino_X] != null) 69 { 70 return false; 71 } 72 73 } 74 75 return true; 76 } 77 78 //ミノの現在位置をCheck true:内側  false:外側 79 bool CheckInside(Vector2 now_Pos) 80 { 81 return now_Pos.x > -1 && 82 now_Pos.x < 10 && 83 now_Pos.y > -1; 84 } 85 86 //true : 左回転 false : 右回転 87 bool Vel_Check() 88 { 89 foreach(Transform mino_Pos in transform) 90 { 91 Vector2 cuurent_Pos = mino_Pos.position; 92 if (!Vel(cuurent_Pos)==false) 93 { 94 return false; 95 } 96 } 97 return true; 98 } 99 //左右の判定 true : 右 false : 左 100 bool Vel(Vector2 now_Pos) 101 { 102 return now_Pos.x > 1; 103 }

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

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

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

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

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

bboydaisuke

2020/07/04 20:53 編集

よくわからないですけど、 //回転させない を消せば壁は貫通しない→回転させないのせいでおかしくなったと予想。 //回転させない の中の処理をコメントアウトしても壁は貫通する。 というのは、 if (!Table_Check()) { transform.RotateAround(transform.TransformPoint(rote_Pos), new Vector3(0, 0, 1), -90); } の部分を削除したら「壁は貫通しない」けど、この部分をコメントアウトすると「壁を貫通する」と、コメントアウトと削除で異なる動きをする、ということですか?
Rpt297

2020/07/05 00:37

if (!Table_Check()) {  transform.RotateAround(transform.TransformPoint(rote_Pos), new Vector3(0, 0, 1), -90); } だと壁を貫通したので、中の処理が悪さをしてると思い、 if (!Table_Check()) {  //transform.RotateAround(transform.TransformPoint(rote_Pos), new Vector3(0, 0, 1), -90); } このように処理内容をコメントアウトしたのにも関わらず壁を貫通したということです。 なのでTable_Checkメソッドはbool値を返すだけなのになぜ壁を貫通するようになってしまったのかということが知りたいです。 if (!Table_Check()) {  transform.RotateAround(transform.TransformPoint(rote_Pos), new Vector3(0, 0, 1), -90); } を全部消すと壁は貫通しないので上記の処理だけが悪さをしてる思ったということです。 わかりにくい文章で申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問