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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

8153閲覧

Unity3D C# boolのtrue, falseの切り替えが行われない

toricotori

総合スコア14

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2017/10/19 09:40

キャラクターがキーとなる複数のオブジェクトに接触すると、テキストが表示され、
そのテキストが徐々に透明度が下がって消えるというスクリプトを作っています。
最初の一回は成功するのですが、二回目以降オブジェクトに触れた際は
テキストが表示されません。
書いた内容としては以下の通りです。

C#

1public class charaWork : MonoBehaviour { 2 public Text Get; 3 float textAlpha; 4 public float disappearSpeed; 5 bool getFlag; 6 7 void Start () 8 { 9 textAlpha = 1.0f; //テキストの透明度、最初は不透明 10 Get.enabled = false; //テキストは最初は非表示 11 getFlag = false;  12 } 13 void Update () 14 { 15 if (getFlag == true) 16 { 17 Get.enabled = true; //テキストを表示 18 Get.color = new Color (1, 1, 1, textAlpha); 19 textAlpha -= disappearSpeed; //透明度を下げていく 20 if (textAlpha <= 0) //透明度が下がりきったら初期状態に戻す 21 { 22 Get.enabled = false; 23 textAlpha = 1.0f; 24 getFlag = false; 25 } 26 } 27 } 28 29 void OnCollisionEnter(Collision col) 30 { 31 if (col.gameObject.tag == "key") //キーオブジェクトに触れたら 32 { 33 getFlag = true; 34 } 35 } 36 37}

こちらを実行すると、一回目の処理以降(if (textAlpha <= 0)の中身)、テキスト非表示にはなりますが、透明度は0(透明)で、二回目の接触の時にはその状態のままでgetFlagがtrueになっていないようです。
解決方法ございましたらお教えいただけると幸いです。

補足
public Textの入れ忘れや、keyタグの設定し忘れはありません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

一回目の処理以降(if (textAlpha <= 0)の中身)、テキスト非表示にはなりますが、透明度は0(透明)

textAlphaを1.0fに戻した際に、Get.colorを変更していないためです。
以下のようにすれば、直ると思います。
(本題の不具合とは関係ないとは思いますが…)

C#

1 if (textAlpha <= 0) //透明度が下がりきったら初期状態に戻す 2 { 3 Get.enabled = false; 4 textAlpha = 1.0f; 5 Get.color = new Color(1, 1, 1, textAlpha); //追加 6 getFlag = false; 7 }

二回目の接触の時にはその状態のままでgetFlagがtrueになっていないようです。

文字が完全に消える前(=初期化される前)に、接触しているということではないでしょうか?

文字が完全に消える前でも、再度表示させたいのであれば、以下のようにすればよいと思います。

C#

1 void OnCollisionEnter(Collision col) 2 { 3 if (col.gameObject.tag == "key") //キーオブジェクトに触れたら 4 { 5 textAlpha = 1.0f; //追加 6 getFlag = true; 7 } 8 }

投稿2017/10/19 12:31

fiveHundred

総合スコア9774

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

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

toricotori

2017/10/21 06:44

fiveHundred様 お返事遅れました、 正しい挙動になりました。 ほんとうに助かりました。 このたびは、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問