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

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

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

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

Unity

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

Q&A

解決済

1回答

4995閲覧

[Unity] 「オブジェクトが特定の座標にあるとき」という条件をifでつけたのですが、うまくいきません。

kiriyama

総合スコア24

C#

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

Unity

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

0グッド

0クリップ

投稿2022/04/11 06:25

編集2022/04/11 06:43

解決しました。

ozwk様のご回答により解決しました。ありがとうございます。
ベストアンサーとして登録する前にどのように解決したのかをご報告いたします。

C#

1//y=-1.85のとき、スペースキー押下で変数bが+1される 2if(pos.y == -1.85){ 3   if(Input.GetKeyDown("space")){ 4   b += 1; 5   }

のところを、

C#

1//y=-1.85のとき、スペースキー押下で変数bが+1される 2if(-1.81f > pos.y && pos.y > -2.1f){ 3   if(Input.GetKeyDown("space")){ 4   b += 1; 5   }

と、「y座標が一定範囲内にあるとき、」としたところ、無事解決しました。

お早い回答、本当にありがとうございます。

以下当初の質問文

・オブジェクトは、wキー押下でy座標が+0.7、sキー押下で-0.7します。
・オブジェクトの最初のy座標は-1.85です。
・「オブジェクトのy座標が-1.85にあるとき」、「スペースキー押下で変数bを+1」します。
というコードを書きたいです。


以下に示すコードを書いたのですが、その結果は
・エラーは出ませんでした。
・wキーもsキーも押していない場合のみ、スペースキーで変数bが+1出来ました。
しかし、一度sキーを押下し、次にwキーを押すと、スペースキーで変数bが+1されません。

どうすればよいでしょうか?



※私は以下のコードを書きました。

C#

1public int b; 2 3void Start(){ 4} 5 6void Update(){ 7//オブジェクトの座標 8Transform myTransform = this.transform; 9Vector3 pos = myTransform.position; 10 11//wキー押下でy座標 +0.7 12if(Input.GetKeyDown("w")){ 13   pos.y += 0.7f; 14} 15//sキー押下でy座標 -0.7 16if(Input.GetKeyDown("s")){ 17   pos.y -= 0.7f; 18} 19 20//y=-1.85のとき、スペースキー押下で変数bが+1される 21if(pos.y == -1.85){ 22   if(Input.GetKeyDown("space")){ 23   b += 1; 24   } 25} 26 27myTransform.position = pos; 28 29} 30

※変数bは、別のスクリプトでUnity側で表示されるようになっています。
※Unity側で、オブジェクトのy座標が-1.85であることは確認しています。例えば「-1.8499999」のようにはなっていません。

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

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

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

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

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

bboydaisuke

2022/04/11 06:28

普通は実数に対して == で比較して「同じ座標」という判断はしませんね。「差が x 未満」という判定をします。
m.ts10806

2022/04/11 07:03

細かくて申し訳ないですが、 質問本文と解決策は逆のほうが良いのでは。
YAmaGNZ

2022/04/11 07:57

どのように解決したかを書くのであれば、質問欄ではなく回答に書くべきかと思います。
guest

回答1

0

ベストアンサー

ある程度の誤差範囲内を許容するようにしましょう。
つまりぴったり-1.85かどうかを見るのではなく
y座標と-1.85の差の絶対値が適当な小さい数より小さいかを見ましょう。

※Unity側で、オブジェクトのy座標が-1.85であることは確認しています。例えば「-1.8499999」のようにはなっていません。

-1.85も0.7も2進数の有限桁でぴったり表せない数なので誤差がでます。

投稿2022/04/11 06:33

ozwk

総合スコア13521

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

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

kiriyama

2022/04/11 06:44

ありがとうございました。 無事解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問