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

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

ただいまの
回答率

89.12%

初回のみ、遊び方説明window(DescriptionWindow)を消した後にカウントダウンが始まるようにしたい。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,348
退会済みユーザー

退会済みユーザー

今日した質問に近い内容です。
前回の質問(https://teratail.com/questions/8564)では、初回のみ説明窓(DescriptionWindow)が出てくるというのは解決できたのですが、
初回で説明窓が出ている間にカウントダウンが始まってしまっているので、説明窓を閉じた後にカウントダウンが始まるように直したいです。
以下はそれらのスクリプトです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

▪︎DescriptionWindow

#pragma strict

var DescriptionWindow : GameObject;

private var prefix : String = "dw_";

function Awake(){
    var isCheck : String = PlayerPrefs.GetString(prefix + "isCheck","false");     
    if(isCheck != "false"){                                                         
        DescriptionWindow.SetActive(false);                                         
    }
}
 
function windowClose(){                                                             
    DescriptionWindow.SetActive(false);                                             
    PlayerPrefs.SetString(prefix + "isCheck","true");
}        
                     
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

▪︎InterfaceController

#pragma strict

import UnityEngine.UI;

// Attach GameObject.
var startCountDown : UI.Text;
var curtain : UI.Image;

// Attach AudioClip.
var seOnCountDown : AudioClip;
var seOnFinish : AudioClip;

private var totalDistance : float = 1210.0;        //units.
private var currentDistance : float = 0;
private var maxSpeed : float = 35;
private var currentSpeed : float = 0;            //scroll speed in unit per second.
private var updateDeltaTime : float = 0;
private var onEntry : boolean = false;
private var onEntryStep : int = 0;
private var onPlay : boolean = false;
private var onFinish : boolean = false;
private var buttonAB : boolean = false;
private var isDamage : boolean = false;

// Other Componant.
private var background : Background;
private var player : GameObject;

function Awake(){
    background = GameObject.Find("Background").transform.GetComponent(Background);
    player = Resources.Load("Player/Player");
    curtain.enabled = false;
}

function Start(){
    updateDeltaTime = 0.0;
    startCountDown.enabled = false;
    startCountDown.text = "3";
    player = Instantiate(player);
    onEntry = true;
}

function Update(){

    if (Input.GetKeyDown (KeyCode.A)) {
        onClickButtonA();
    }
    if (Input.GetKeyDown (KeyCode.S)) {
        onClickButtonB();
    }
    

    if(onEntry){
        updateDeltaTime += Time.deltaTime;                        
        if(updateDeltaTime > 1.0 && onEntryStep == 0){            
            startCountDown.enabled = true;                        
            audio.PlayOneShot(seOnCountDown);                    
            startCountDown.text = "3";                            
            onEntryStep++;                                        
        }else if(updateDeltaTime > 2.0 && onEntryStep == 1){    
            startCountDown.text = "2";                            
            onEntryStep++;                                        
        }else if(updateDeltaTime > 3.0 && onEntryStep == 2){    
            startCountDown.text = "1";                            
            onEntryStep++;                                        
        }else if(updateDeltaTime > 4.0 && onEntryStep == 3){    
            startCountDown.text = "Go!";                        
            onEntryStep++;                                        
                                                        
            //start!
            GameObject.Find("Main Camera").GetComponent(AudioSource).Play();
            // audio.Play();
            onPlay = true;
            currentSpeed += 2.0;
            player.transform.GetComponent(Player).playStart();
            gameObject.transform.GetComponent(StopWatch).playStart();
            
        }else if(onEntryStep == 4){                                
            startCountDown.color.a -= 0.02f;                    
            if(startCountDown.color.a <= 0.0){                    
                startCountDown.enabled = false;                    
                onEntry = false;                                
            }
        }
    }

    if(onPlay){
        // speed down;
        if(currentSpeed > maxSpeed){
            currentSpeed = maxSpeed;
        }else if(currentSpeed > 25.0){
            currentSpeed = currentSpeed - (1.5 * Time.deltaTime);
        }else if(currentSpeed < 12.0){
            currentSpeed = currentSpeed - (1.0 * Time.deltaTime);
        }else if(currentSpeed < 8.0){
            currentSpeed = currentSpeed - (1.5 * Time.deltaTime);
        }else{
            currentSpeed = currentSpeed - (0.5 * Time.deltaTime);
        }
        if(currentSpeed < 2){
            currentSpeed = 2.0;
        }
        
        //currentDistance
        currentDistance = currentDistance + (currentSpeed * Time.deltaTime);
        if(currentDistance >= totalDistance){
            // onGoal.
            onGoal();
            
        }
    }
    
}

function onGoal(){

    onPlay = false;
    audio.PlayOneShot(seOnFinish);
    player.transform.GetComponent(Player).onGoal();
    gameObject.transform.GetComponent(StopWatch).onGoal();
    GameObject.Find("Main Camera").GetComponent(AudioSource).Stop();
    
    // scroll-speed down.
    iTween.ValueTo(gameObject,iTween.Hash(
        "from",currentSpeed,
        "to",0,
        "time", 1.5,
        "onupdate","iTweenUpdateScrollSpeedOnGoal"
    ));
    // Display goal-text.
    iTween.ValueTo(gameObject,iTween.Hash(
        "from",1,
        "to",0,
        "time", 1.0,
        "onstart" , "iTweenStartDisplayTextOnGoal",
        "onupdate", "iTweenUpdateDisplayTextOnGoal"
    ));
    
    yield WaitForSeconds(2.5);
    
    // fadeOut.    
    iTween.ValueTo(gameObject,iTween.Hash(
        "from",0,
        "to",1,
        "time", 1.3,
        "onstart" , "iTweenStartOnGoalCurtain",
        "onupdate","iTweenUpdateOnGoalCurtain",
        "oncomplete","iTweenCompOnGoalCurtain"
    ));
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

度々すみませんが何卒ご助力ください。

追記:これはどこに書いたらいいですか?

function setOnEntry(boolean flag){
    onEntry = flag;
}


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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+2

またまた解答させていただきます。(決して暇人ではないですよ?w)

onEntryをtrueにする箇所を変えればできます。

InterfaceController のStart()ではなく、
DescriptionWindowのwindowClose()で、
onEntryをtrueにしてください。
onEntryがprivate変数なのでsetterを用意して。
function setOnEntry(boolean flag){
    onEntry = flag;
}
これをwindowClose()から呼びます。

function windowClose(){
    DescriptionWindow.SetActive(false);
    PlayerPrefs.SetString(prefix + "isCheck","true");
    GameObject.Find("オブジェクト名").GetComponent(InterfaceController).setOnEntry(true);
}
GameObject.Find(~~)は、InterfaceControllerが設定されているオブジェクト名です。


あ、あと。
すごく見づらいので、コードとして貼り付けた方が見やすいですよ。
投函文を書いている上のツール一覧みたいなところに</>というマークがあると思います。それでできます。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/04/14 20:43

    function Startの on Entry =true;を消し忘れていました。
    windowClose()からsetOnEntry()は呼んでいます。
    おかげさまで初回は説明窓を消してからカウントダウンが始まるようになりました。
    ありがとうございます!

    しかし、また別に問題が発生しました。
    初回以降のPLAYでカウントダウンが始まらずゲームが始まりません;;

    キャンセル

  • 2015/04/15 10:49

    あー・・・考慮不足でした。確かにそれだと次回以降始まりませんね。
    DescriptionWindow のAwakeにもsetOnEntry()を追加してください。
    ==============
    function Awake(){
    var isCheck : String = PlayerPrefs.GetString(prefix + "isCheck","false");
    if(isCheck != "false"){
    DescriptionWindow.SetActive(false);
    GameObject.Find("オブジェクト名").GetComponent(InterfaceController).setOnEntry(true); // ←追加
    }
    }
    ==============
    まずはonEntryというフラグの意味を考えてみてください。
    onEntryがfalseの間はカウントダウンが始まらず、trueになると始まります。
    カウントダウンが始まらないとゲームそのものも始まりません。
    では、いつカウントダウンを始めるのか。
    初回時は「説明窓が閉じられた時」に始める。(windowClose()からsetOnEntry())
    次回以降は「説明窓を出さない」と判断したら、カウントダウンを始めなければいけません。
    その判断をしているのはAwake()の if(isCheck != "false") ですよね。
    なのでこのif文でtureになったら、setOnEntry()を呼べばカウントダウンが始まります。
    setOnEntry()とは、カウントダウンが始まるスイッチみたいな役目ですね。

    キャンセル

  • 2015/04/15 14:23

    朝早くからご返答ありがとうございます!
    おかげさまでだいぶどういう意味で文が作られているかわかってきました。
    追加部分も入れて起動したところ解決できました!!!
    昨日から1日かけて教えていただきありがとうございます!本当に感謝です!

    キャンセル

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

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