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

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

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

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

Q&A

解決済

2回答

512閲覧

Card1とCard2のY座標が690の位置に移動したら、seikaicounterを1増やしたい

Ito

総合スコア1

C#

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

0グッド

0クリップ

投稿2022/10/03 09:34

編集2022/10/07 10:14

前提

Unityで神経衰弱みたいなゲームを作ろうとしています。

実現したいこと

Card1とCard2のY座標が690の位置に移動したら、seikaicounterを1増やしたい。

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

Card1とCard2のY座標が690になっても、seikaicounterが増えない。

該当のソースコード

C#

1using UnityEngine; 2 3public class GManager : MonoBehaviour 4{ 5 public GameObject Card1; 6 public GameObject Card2; 7 public GameObject Card3; 8 public GameObject Card4; 9 public GameObject Card5; 10 public GameObject Card6; 11 public GameObject Card7; 12 public GameObject Card8; 13 [SerializeField] private int selectcounter = 0; 14 [SerializeField] private int seikaicounter = 0; 15 16 // Start is called before the first frame update 17 void Start() 18 { 19 20 } 21 22 // Update is called once per frame 23 void Update() 24 { 25 Transform Card1transform = Card1.transform; 26 Vector3 Card1pos = Card1transform.position; 27 28 Transform Card2transform = Card2.transform; 29 Vector3 Card2pos = Card2transform.position; 30 31 Transform Card3transform = Card3.transform; 32 Vector3 Card3pos = Card3transform.position; 33 34 Transform Card4transform = Card4.transform; 35 Vector3 Card4pos = Card4transform.position; 36 37 Transform Card5transform = Card5.transform; 38 Vector3 Card5pos = Card5transform.position; 39 40 Transform Card6transform = Card6.transform; 41 Vector3 Card6pos = Card6transform.position; 42 43 Transform Card7transform = Card7.transform; 44 Vector3 Card7pos = Card7transform.position; 45 46 Transform Card8transform = Card8.transform; 47 Vector3 Card8pos = Card8transform.position; 48 49 if(Card1pos.y == 690 && Card2pos.y == 690) 50 { 51 Debug.Log("nnn"); 52 seikaicounter += 1; 53 } 54 55 if(selectcounter == 3) 56 { 57 selectcounter = 0; 58 } 59 } 60 61 public void Card1Click() 62 { 63 selectcounter += 1; 64 Transform Card1transform = Card1.transform; //transformを取得 65 Vector3 Card1pos = Card1transform.position; //座標を取得 66 Card1pos.y += 10; 67 Card1transform.position = Card1pos; //座標を設定 68 } 69 70 public void Card2Click() 71 { 72 selectcounter += 1; 73 Transform Card2transform = Card2.transform; 74 Vector3 Card2pos = Card2transform.position; 75 Card2pos.y += 10; 76 Card2transform.position = Card2pos; 77 } 78 79 public void Card3Click() 80 { 81 selectcounter += 1; 82 Transform Card3transform = Card3.transform; 83 Vector3 Card3pos = Card3transform.position; 84 Card3pos.y += 10; 85 Card3transform.position = Card3pos; 86 } 87 88 public void Card4Click() 89 { 90 selectcounter += 1; 91 Transform Card4transform = Card4.transform; //transformを取得 92 Vector3 Card4pos = Card4transform.position; //座標を取得 93 Card4pos.y += 10; 94 Card4transform.position = Card4pos; 95 } 96 97 public void Card5Click() 98 { 99 selectcounter += 1; 100 Transform Card5transform = Card5.transform; //transformを取得 101 Vector3 Card5pos = Card5transform.position; //座標を取得 102 Card5pos.y -= 10; 103 Card5transform.position = Card5pos; 104 } 105 106 public void Card6Click() 107 { 108 selectcounter += 1; 109 Transform Card6transform = Card6.transform; //transformを取得 110 Vector3 Card6pos = Card6transform.position; //座標を取得 111 Card6pos.y -= 10; 112 Card6transform.position = Card6pos; 113 } 114 115 public void Card7Click() 116 { 117 selectcounter += 1; 118 Transform Card7transform = Card7.transform; //transformを取得 119 Vector3 Card7pos = Card7transform.position; //座標を取得 120 Card7pos.y -= 10; 121 Card7transform.position = Card7pos; 122 } 123 124 public void Card8Click() 125 { 126 selectcounter += 1; 127 Transform Card8transform = Card8.transform; //transformを取得 128 Vector3 Card8pos = Card8transform.position; //座標を取得 129 Card8pos.y -= 10; 130 Card8transform.position = Card8pos; 131 } 132}

試したこと

if文が原因だと思い、調べてみましたが分かりませんでした。

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

2020.3.20f

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/10/03 11:21

Unity のタグをつけてください。
Kerupim

2022/10/06 02:24 編集

一応補足ですが、浮動小数点数値型でも整数だけ扱う場合は、誤差が生じることはありません。 また浮動小数点同士の計算で発生する誤差は Mathf.Approximately を使って比較したほうが良いかと思います。 ※何百回と計算するのであれば別の対応も必要ですが。 とりあえず成功時にデバッグログ確認を行うということをしているのであれば、 各Click関数内にもデバッグログを追加して座標がどうなっているかも見たほうがいいかと思います。
退会済みユーザー

退会済みユーザー

2022/10/06 02:27

Unity のタグをつけてください。Unity に興味のある人の目を引いて回答を得やするなるというあなたにとってのメリット、自分のように興味のない人はタグを見ただけでスルーできるというメリットがあります。
guest

回答2

0

Vector3の各値はfloat型ですが、そのような浮動小数点型で690ジャストになることはほとんどありません。
あるとしたら、690を直接代入した時くらいで、それ以外のケースだと何らかの誤差でずれることがほとんどです。

この場合、689.9~690.1のようにある程度範囲を設けておくのが一般的です。

カードを扱っているのであれば、そのカードの大きさ分の範囲を設定するのがいいでしょう。

投稿2022/10/03 10:07

編集2022/10/03 10:10
fiveHundred

総合スコア9774

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

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

Ito

2022/10/03 13:04

コメントありがとうございます。 if(Card1pos.y >= 689.1 && Card1pos.y <= 690.9) { Debug.Log("nnn"); seikaicounter += 1; } このようにしてみたのですが、うまく動かず、調べてみたのですが分かりませんでした。問題点があればコメントお願いします。
fiveHundred

2022/10/04 04:45

申し訳ないのですが、解決していないのであれば、ベストアンサーを設定しないでください。 他の人からは解決済みに見えてしまうため、回答をほとんど得られなくなります。 解除できたはずなので、それを行ってください。
guest

0

ベストアンサー

Card1,Card2のYの初期値は0か、あるいは10の倍数でなければ条件に合致することは無い。
インスペクタに表示される座標値はローカル座標であって、positionはワールド座標を扱う為、インスペクタで0だからといってposition.yが0である保証は無い。

690ドット移動したら終了、としたいのか座標値として690が絶対の基準で、そこに達したらなのかでまた判定も変わるけど、座標値を絶対の基準として扱うなら単純に

if(Card1pos.y >= 689.1) { Debug.Log("nnn"); seikaicounter += 1; }

で判定すれば良い

投稿2022/10/05 06:12

編集2022/10/05 06:15
drednote

総合スコア336

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

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

Ito

2022/10/07 01:14

ありがとうございます。解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問