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

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

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

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

Unity

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

Q&A

解決済

1回答

953閲覧

同じキー入力でSetActiveの切り替えの仕方

P0NZUU_

総合スコア5

C#

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

Unity

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

0グッド

0クリップ

投稿2022/12/01 14:23

前提

スペースキーで宝箱を開けた際に最初はプレイヤーを未表示にしてそこから同じキーを押したらプレイヤーを再度表示するようにしたいです

※trueにする時のキーは正直何でもいいです。

実現したいこと

・プレイヤーを一回目未表示で2回目は表示させるようにしたいです

発生している問題・エラーメッセージ

Playerをfalseにはできるのですが再度trueにすることが出来ないです。

該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; using KanKikuchi.AudioManager; public class aksmKey : MonoBehaviour { public GameObject Player; public GameObject Item; public Sprite takarabako; SpriteRenderer sr; public bool isPushed = false; int count = 0; void Start() { sr = gameObject.GetComponent<SpriteRenderer>(); Item.SetActive(false); Player.SetActive(true); } void Update() { } private void OnCollisionStay2D(Collision2D other)//これが原因? { if (isPushed) return; if (other.gameObject) { if (Input.GetKey(KeyCode.Space)) { SEManager.Instance.Play(SEPath.ITEM_GET); SEManager.Instance.Play(SEPath.TAKARABAKO_OPEN); sr.sprite = takarabako; isPushed = true; Item.SetActive(true); count += 1; Player.SetActive(false);//もしかしたらこの書く場所も悪いかも? } } } }

試したこと

elseを使って再度表示させようかと思ったんですけどうまくいきませんでした

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

if (isPushed) return;が一番頭にきているので、isPushed = trueになった後にfalseに戻す方法がこのスクリプト内に無いので、永久にreturnし続けます。
入れるならif (Input.GetKey(KeyCode.Space))の下にif (isPushed)なら isPushed = falseとプレイヤー表示、else でisPushed = trueとプレイヤー非表示という形にすればいいと思います。

投稿2022/12/02 00:14

Y0241-N

総合スコア1066

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

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

P0NZUU_

2022/12/02 07:19

回答ありがとうございます。 今現在試してみましたが、未表示にはできるのですが再度表示がどうしてもできないです。 今の状況はスペースキーを押すと”プレイヤーを未表示”というログは流れますが、その後もう一度押してもチェックは消えずログもでない感じです。 このコードだとどこが悪いのでしょうか? using System.Collections; using System.Collections.Generic; using UnityEngine; using KanKikuchi.AudioManager; public class aksmKey : MonoBehaviour { public GameObject Player; public GameObject Item; public Sprite takarabako; SpriteRenderer sr; public bool isPushed; int count = 0; void Start() { sr = gameObject.GetComponent<SpriteRenderer>(); Item.SetActive(false); Player.SetActive(true); isPushed = false; } void Update() { } private void OnCollisionStay2D(Collision2D collision) { if (isPushed) return; if (collision.gameObject.tag == "Player") { if (Input.GetKey(KeyCode.Space)) { SEManager.Instance.Play(SEPath.ITEM_GET); SEManager.Instance.Play(SEPath.TAKARABAKO_OPEN); sr.sprite = takarabako; Item.SetActive(true); count += 1; isPushed = false; if (isPushed == false) { isPushed = true; Debug.Log("プレイヤー未表示"); } else if (isPushed == true) { isPushed = false; Debug.Log("プレイヤーを表示"); } } } } }
Y0241-N

2022/12/02 07:26

private void OnCollisionStay2D(Collision2D collision) { if (isPushed) return; ←これが原因です、これがあるとisPushedがtureになったあとはOnCollisionStay2Dメソッド以外でisPushedをfalseにしない限りtrueのままですよね?なのでtrueになっている限り、returnされ、return以下の処理が実行されることはありません。 あとif (Input.GetKey(KeyCode.Space))内のisPushed = false;の下にif (isPushed == false)、else if (isPushed == true)を書かれていますが、isPushed = falseにした後では必ずif (isPushed == false)の結果しか得られません。判定するならisPushed = false;する前に判定しましょう。 思うに基本的なC#の知識が不足されていると思うので、まず基礎知識を学ばれるのも良いかと思います。
P0NZUU_

2022/12/03 04:09

細かくありがとうございます! 無事解決出来ましたが自分もまだまだ知識が浅いのでこれからも勉強します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問