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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

Q&A

解決済

1回答

1996閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

0グッド

0クリップ

投稿2015/04/14 07:13

編集2015/04/14 09:48

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

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

▪︎DescriptionWindow

lang

1#pragma strict 2 3var DescriptionWindow : GameObject; 4 5private var prefix : String = "dw_"; 6 7function Awake(){ 8 var isCheck : String = PlayerPrefs.GetString(prefix + "isCheck","false"); 9 if(isCheck != "false"){ 10 DescriptionWindow.SetActive(false); 11 } 12} 13 14function windowClose(){ 15 DescriptionWindow.SetActive(false); 16 PlayerPrefs.SetString(prefix + "isCheck","true"); 17}

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

▪︎InterfaceController

lang

1#pragma strict 2 3import UnityEngine.UI; 4 5// Attach GameObject. 6var startCountDown : UI.Text; 7var curtain : UI.Image; 8 9// Attach AudioClip. 10var seOnCountDown : AudioClip; 11var seOnFinish : AudioClip; 12 13private var totalDistance : float = 1210.0; //units. 14private var currentDistance : float = 0; 15private var maxSpeed : float = 35; 16private var currentSpeed : float = 0; //scroll speed in unit per second. 17private var updateDeltaTime : float = 0; 18private var onEntry : boolean = false; 19private var onEntryStep : int = 0; 20private var onPlay : boolean = false; 21private var onFinish : boolean = false; 22private var buttonAB : boolean = false; 23private var isDamage : boolean = false; 24 25// Other Componant. 26private var background : Background; 27private var player : GameObject; 28 29function Awake(){ 30 background = GameObject.Find("Background").transform.GetComponent(Background); 31 player = Resources.Load("Player/Player"); 32 curtain.enabled = false; 33} 34 35function Start(){ 36 updateDeltaTime = 0.0; 37 startCountDown.enabled = false; 38 startCountDown.text = "3"; 39 player = Instantiate(player); 40 onEntry = true; 41} 42 43function Update(){ 44 45 if (Input.GetKeyDown (KeyCode.A)) { 46 onClickButtonA(); 47 } 48 if (Input.GetKeyDown (KeyCode.S)) { 49 onClickButtonB(); 50 } 51 52 53 if(onEntry){ 54 updateDeltaTime += Time.deltaTime; 55 if(updateDeltaTime > 1.0 && onEntryStep == 0){ 56 startCountDown.enabled = true; 57 audio.PlayOneShot(seOnCountDown); 58 startCountDown.text = "3"; 59 onEntryStep++; 60 }else if(updateDeltaTime > 2.0 && onEntryStep == 1){ 61 startCountDown.text = "2"; 62 onEntryStep++; 63 }else if(updateDeltaTime > 3.0 && onEntryStep == 2){ 64 startCountDown.text = "1"; 65 onEntryStep++; 66 }else if(updateDeltaTime > 4.0 && onEntryStep == 3){ 67 startCountDown.text = "Go!"; 68 onEntryStep++; 69 70 //start! 71 GameObject.Find("Main Camera").GetComponent(AudioSource).Play(); 72 // audio.Play(); 73 onPlay = true; 74 currentSpeed += 2.0; 75 player.transform.GetComponent(Player).playStart(); 76 gameObject.transform.GetComponent(StopWatch).playStart(); 77 78 }else if(onEntryStep == 4){ 79 startCountDown.color.a -= 0.02f; 80 if(startCountDown.color.a <= 0.0){ 81 startCountDown.enabled = false; 82 onEntry = false; 83 } 84 } 85 } 86 87 if(onPlay){ 88 // speed down; 89 if(currentSpeed > maxSpeed){ 90 currentSpeed = maxSpeed; 91 }else if(currentSpeed > 25.0){ 92 currentSpeed = currentSpeed - (1.5 * Time.deltaTime); 93 }else if(currentSpeed < 12.0){ 94 currentSpeed = currentSpeed - (1.0 * Time.deltaTime); 95 }else if(currentSpeed < 8.0){ 96 currentSpeed = currentSpeed - (1.5 * Time.deltaTime); 97 }else{ 98 currentSpeed = currentSpeed - (0.5 * Time.deltaTime); 99 } 100 if(currentSpeed < 2){ 101 currentSpeed = 2.0; 102 } 103 104 //currentDistance 105 currentDistance = currentDistance + (currentSpeed * Time.deltaTime); 106 if(currentDistance >= totalDistance){ 107 // onGoal. 108 onGoal(); 109 110 } 111 } 112 113} 114 115function onGoal(){ 116 117 onPlay = false; 118 audio.PlayOneShot(seOnFinish); 119 player.transform.GetComponent(Player).onGoal(); 120 gameObject.transform.GetComponent(StopWatch).onGoal(); 121 GameObject.Find("Main Camera").GetComponent(AudioSource).Stop(); 122 123 // scroll-speed down. 124 iTween.ValueTo(gameObject,iTween.Hash( 125 "from",currentSpeed, 126 "to",0, 127 "time", 1.5, 128 "onupdate","iTweenUpdateScrollSpeedOnGoal" 129 )); 130 // Display goal-text. 131 iTween.ValueTo(gameObject,iTween.Hash( 132 "from",1, 133 "to",0, 134 "time", 1.0, 135 "onstart" , "iTweenStartDisplayTextOnGoal", 136 "onupdate", "iTweenUpdateDisplayTextOnGoal" 137 )); 138 139 yield WaitForSeconds(2.5); 140 141 // fadeOut. 142 iTween.ValueTo(gameObject,iTween.Hash( 143 "from",0, 144 "to",1, 145 "time", 1.3, 146 "onstart" , "iTweenStartOnGoalCurtain", 147 "onupdate","iTweenUpdateOnGoalCurtain", 148 "oncomplete","iTweenCompOnGoalCurtain" 149 )); 150} 151 152

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

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

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

lang

1function setOnEntry(boolean flag){ 2 onEntry = flag; 3}

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

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

InterfaceController のStart()ではなく、
DescriptionWindowのwindowClose()で、
onEntryをtrueにしてください。
onEntryがprivate変数なのでsetterを用意して。

lang

1function setOnEntry(boolean flag){ 2 onEntry = flag; 3}

これをwindowClose()から呼びます。

lang

1function windowClose(){ 2 DescriptionWindow.SetActive(false); 3 PlayerPrefs.SetString(prefix + "isCheck","true"); 4 GameObject.Find("オブジェクト名").GetComponent(InterfaceController).setOnEntry(true); 5}

GameObject.Find(~~)は、InterfaceControllerが設定されているオブジェクト名です。

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

投稿2015/04/14 07:35

編集2015/04/14 07:38
runun

総合スコア305

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

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

退会済みユーザー

退会済みユーザー

2015/04/14 08:06

またまたありがとうございます! 見づらくてすみません!そんな機能があるなんて知りませんでした汗 コードとして貼り付けるのがあったんですね、、、いやぁお恥ずかしい。 ありがとうございます!!!
退会済みユーザー

退会済みユーザー

2015/04/14 09:49

function setOnEntry~~~の方がどこに書いたらよいか分かりません(T_T)
runun

2015/04/14 09:51

InterfaceController のクラス内です。 function Update()とfunction onGoal()の間にでも書いてみてください。
退会済みユーザー

退会済みユーザー

2015/04/14 10:11

unexpected token:flag. とエラーが出ました;;
runun

2015/04/14 10:38

あぁ。。。 function setOnEntry(boolean flag) ではなく、 function setOnEntry(flag) ですね。 C#の書き方になっていました。
退会済みユーザー

退会済みユーザー

2015/04/14 11:10

普段使っている言語ではないにも関わらずありがとうございますm(_ _)m エラーは無くなりました! ただ、直してfunction Update と function onGoalの間に書き込んで試したり function Start とfunction Updateの間に書き込んで試したりもしましたが、 説明窓をこちらでボタンを押して消す前からすでにカウントダウンが始まってしまっています。 説明窓を自分で消した後カウントダウンが始まるようにしたいですが、これはこのfunction setOnEntryを書く場所が違うだけでしょうか?それとも他にif文とかが必要になってくるんですかね? 何度も質問してしまい申し訳有りません。 自分でも解決方法探してはおりますが、なかなか出てこなくて、、、 よろしくお願いします!
runun

2015/04/14 11:14

いえいえ。わからない時は何やってもわからないですよね。。。 以下、確認してください。 ・function Startの onEntry = true; は消しましたか? ・windowClose()からsetOnEntry()は呼んでますか?
退会済みユーザー

退会済みユーザー

2015/04/14 11:43

function Startの on Entry =true;を消し忘れていました。 windowClose()からsetOnEntry()は呼んでいます。 おかげさまで初回は説明窓を消してからカウントダウンが始まるようになりました。 ありがとうございます! しかし、また別に問題が発生しました。 初回以降のPLAYでカウントダウンが始まらずゲームが始まりません;;
runun

2015/04/15 01: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 05:23

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問