🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Unity

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

Q&A

解決済

1回答

2407閲覧

マリオのコインブロックの作り方。

rrr66

総合スコア16

C#

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

Unity

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

0グッド

0クリップ

投稿2019/09/21 10:54

編集2019/09/21 10:56

Unityでゲームを作っています。
マリオのはてなブロック的なもの(無限にコインが出るようにしたい)を作りたいのですがうまくいきません。

SetActiveを使って、キャラクターがジャンプしたときに**enemy1.SetActive(true)**にすることでコインを出現させることに成功したのですが、2枚目以降を出現させることができません。

1つ目のコインを出現させた後に、インスペクターのEnemy1のCoinオブジェクトが消失してしまうのを改善できれば解決できると思うのですがうまくいきません。か

ブロックから無限にコインを出現させるにはどのようなスクリプトを作ればいいのでしょうか?
もし少しでもわかる方がいましたら教えてください。(_ _)

 

コインのSetActiveをtrueにした後、2秒後にコインをDestroyするスクリプト

c3

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class GameObjectDestroy : MonoBehaviour 6{ 7 public float time = 2; 8 public GameObject gameObject; 9 10 public GameObject enemy1; 11 12 void Start() 13 { 14 enemy1.SetActive(true); 15 Destroy(gameObject, time); 16 } 17}

キャラクターをコントロールするスクリプト(長々とすいません。必要な情報は**public void Jump()**の部分だけだと思います。)

c#

1using UnityEngine; 2using System.Collections; 3using System.Collections.Generic; 4 5public class Yuko_sum_humanoidController : MonoBehaviour 6{ 7 bool push = false; 8 9 public Vector3 touchStartPos; 10 public Vector3 touchEndPos; 11 public string Direction; 12 bool oneplay; 13 14 const int MinLane = -2; 15 const int MaxLane = 2; 16 const float LaneWidth = 1.0f; 17 const int DefaultLife = 3; 18 const float StunDuration = 0.5f; 19 public int coin = 0; 20 21 CharacterController controller; 22 Animator animator; 23 24 Vector3 moveDirection = Vector3.zero; 25 int targetLane; 26 int life = DefaultLife; 27 float recoverTime = 0.0f; 28 29 public float gravity; 30 public float speedZ; 31 public float speedX; 32 public float speedJump; 33 public float accelerationZ; 34 35 public AudioClip CoinGet; 36 37 public GameObject enemy1; 38 39 public int Coin 40 { 41 get { return this.coin; } 42 set { this.coin = value; } 43 } 44 45 public bool IsStan() 46 { 47 return recoverTime > 0.0f || life <= 0; 48 } 49 50 void Start() 51 { 52 // 必要なコンポーネントを自動取得 53 controller = GetComponent<CharacterController>(); 54 animator = GetComponent<Animator>(); 55 } 56 57 void Update() 58 { 59 if (Input.GetKeyDown("space")) Jump(); 60 61 // 重力分の力を毎フレーム追加 62 moveDirection.y -= gravity * Time.deltaTime; 63 64 // 移動後接地してたらY方向の速度はリセットする 65 if (controller.isGrounded) moveDirection.y = 0; 66 } 67 /////////////////////////////////////////////////////////////////////////////////// 68 public void Jump() 69 { 70 if (IsStan()) return; 71 if (controller.isGrounded) 72 { 73 moveDirection.y = speedJump; 74 AudioSource.PlayClipAtPoint(CoinGet, transform.position); 75 coin++; 76 enemy1.SetActive(true); 77 } 78 } 79

コインオブジェクト消失前
イメージ説明
コインオブジェクト消失後
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

恐らくgameObjectが指しているのは「元々シーン上に存在するオブジェクト」ではないでしょうか。
それをDestroyしているなら当然消失します(Destroyはそういうメソッドです)。

こういう場合は
事前にプレハブを作成しておいてコイン出現時にInstantiateする(つまり「新たに生成する」)か
DestroyではなくSetActive(false)する(つまり消去ではなく「非表示にする」)か
のどちらかかと思います。

投稿2019/09/22 00:28

sakura_hana

総合スコア11427

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問