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

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

ただいまの
回答率

90.75%

  • C#

    6568questions

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

  • Unity

    3601questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    1181questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 732

toricotori

score 6

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

public class charaWork : MonoBehaviour {
 public Text Get;
 float textAlpha;
 public float disappearSpeed; 
 bool getFlag;

 void Start ()
 {
    textAlpha = 1.0f; //テキストの透明度、最初は不透明
    Get.enabled = false; //テキストは最初は非表示
    getFlag = false; 
  }
  void Update () 
 {
    if (getFlag == true) 
    {
        Get.enabled = true; //テキストを表示
        Get.color = new Color (1, 1, 1, textAlpha);
        textAlpha -= disappearSpeed; //透明度を下げていく
        if (textAlpha <= 0) //透明度が下がりきったら初期状態に戻す
        { 
            Get.enabled = false;
            textAlpha = 1.0f;
            getFlag = false;
        }
    }        
 }

    void OnCollisionEnter(Collision col)
    {
        if (col.gameObject.tag == "key") //キーオブジェクトに触れたら
        {
            getFlag = true;
        }
    }

}  

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/21 15:44

    fiveHundred様

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

    キャンセル

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    Unityでのナビゲーションラインの実装について

    unityでナビゲーションラインを実装したいと思っています。 画像中央の青いラインみたいなもの、プレイヤーから特定のオブジェクトに対して線を引き、方向を教える。 現在LineRe

  • 解決済

    C# json デシリアライズ Computer Vision api

    jsonデータについて初心者です。 json デシリアライズ はネットサーフィンすると少し出てきますが 深い階層のものがわかりずらく classにする部分などが省略されていたり

  • 解決済

    Unity2Dで消えたパズルの列をカウントしたい

    Unity2Dのパズルを作成しており、横一列に揃って消えた回数をカウントしたいのですが うまくカウントできず困っています。 Count.cs using System.Co

  • 受付中

    Unity:Destroyした敵のリスポーン・復活

    前提・実現したいこと Unityにて3Dシューティングを作っています。 「弾が当たったら敵が消え、その3秒後に同じ位置にまた復活する」というコードを書きたいのですが、敵が消えるとこ

  • 解決済

    Unity UIの動的生成

    「B」というタグがついたCubeが「A」というタグのついたCubeに衝突したとき、所定の位置にUIを生成させようとしたのですが、なぜか見当違いな位置に生成されてしまいます。そして、

  • 解決済

    unity複数ある当たり判定の検知に関して

    unityに関しての質問 やりたいこと 二つの(別の)空間に障害物が入ったことを検知し、二つのうちのどちらに障害物が入ったのかによってその後の処理を変えたい 今はistri

  • 受付中

    unityでc#で時間計測

    c#初心者で、unityでゲームを作ってます。 敵を倒すまでの時間を計測したいのですが上手くいきません・・・ ゲーム画面に遷移してカウントアップ。敵の体力が0になったときにストップ

  • 解決済

    ゲームが終了した時GameOverにならない

    【Unity5】uGUIでタイトルとゲームオーバー画面を実装!Canvas, Text, Button【フラッピーバード風5】 ↑ こちらのサイトを参考にIsTriggerがOFに

同じタグがついた質問を見る

  • C#

    6568questions

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

  • Unity

    3601questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    1181questions

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