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

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

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

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

Unity3D

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

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

Q&A

解決済

2回答

865閲覧

地面のプレハブを1方向に等間隔で設置したい

Lemon_0715

総合スコア60

C#

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

Unity3D

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

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

0グッド

0クリップ

投稿2020/04/19 04:14

編集2020/04/20 07:48

前提・実現したいこと

3Dランゲームで指定した個数分続く地面を作っています
今のコードだとオブジェクトは等間隔に設置されますが
それぞれのオブジェクトにオブジェクトが重なっています

例を挙げて説明すると、
1mおきに木のオブジェクトを生成しようとすると
1m地点の木(無限に重なっている)
2m地点の木(無限に重なっている)…
となってしまいます

無限に重ならないようにするために
一つのみ生成され、なおかつ一定時間経過すると消去されるようにしたいです。

### ソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class StageCreater : MonoBehaviour { 6 7 public GameObject obj; // 生成するオブジェクト 8 9 public int createNumbers; // 生成する数 10 public int space; // 生成する間隔 11 public Vector3 createPos; // 生成する場所 12 13 // Use this for initialization 14 void Start () 15 { 16 CreateObject(); // 生成メソッド実行 17 } 18 19 // 生成メソッド 20 void CreateObject() 21 { 22 for (int i = 0; i < createNumbers; i++) 23 { 24 Instantiate(obj, createPos + new Vector3(0, 0, i + space * i), Quaternion.identity); 25 } 26 } 27}

補足情報

Unity2017.4.0f1 Personal

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

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

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

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

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

nskydiving

2020/04/19 08:38

コードとしては特に問題ないように見えます。 「createPos + new Vector3(0, 0, i + space * i)」を変数に入れて、Debug.Log で値を確認してみてください。
Lemon_0715

2020/04/20 07:43

等間隔に設置されるのは解決しました。 ちょっと説明不足と感じたので追記しました。
guest

回答2

0

ベストアンサー

1、オブジェクトが重なる問題に関して
「StageCreater」というスクリプトを、生成対象のGameObjectにアタッチしていたりしませんか?空のGameObjectに対して「StageCreater」スクリプトをアタッチしてはどうでしょうか。こちらで試した感じだと、問題なく動いているように思います。
イメージ説明

2、一定時間後にオブジェクトを消去したいに関して
以下の様なスクリプトを生成対象のGameObjectにアタッチするのはどうでしょうか。こちらだと、3秒後に消えます。

using UnityEngine; public class DestroyObject : MonoBehaviour { public float timer = 3.0f; // 削除までの時間 void Start() { Destroy(gameObject, timer); } }

投稿2020/04/21 10:17

tsuki01

総合スコア1751

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

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

Lemon_0715

2020/04/22 10:01

スクリプトで呼び出したオブジェクトにも同じスクリプトがアタッチされているからそれがまたオブジェクトを呼び出すんですね... 全く頭に無かったです。 ありがとうございました!
guest

0

例を挙げて説明すると、
1mおきに木のオブジェクトを生成しようとすると
1m地点の木(無限に重なっている)
2m地点の木(無限に重なっている)…
となってしまいます

コードを見る限り、特におかしなところはないように思います。

Debug.Log を使って、

  • 引数の値「createPos + new Vector3(0, 0, i + space * i)」が期待した値になっているか?
  • CreateObject メソッドが 2 回以上呼ばれていないか?

を確認してみてください。

投稿2020/04/20 08:05

nskydiving

総合スコア6500

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

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

Lemon_0715

2020/04/20 08:52

引数に関しては全く問題なかったです。 メソッドの呼び出しに関してですが、 void CreateObject() { for (int i = 1; i < createNumbers; i++) { //Instantiate(obj, createPos + new Vector3(0, 0, i + space * i), Quaternion.identity); Debug.Log(i + space * i); Debug.Log(createPos + new Vector3(0, 0, i + space * i)); } } このコードでなら正常に動きました。ですがInstantiateのコメントを解除するとDebug.Log含め無限に実行されるようになってしまいます。 解決方法を知らないので申し訳ないですがどうすればいいでしょうか
nskydiving

2020/04/20 09:05

>このコードでなら正常に動きました。 このコードで期待通りの位置にインスタンスが生成されているのですか?
Lemon_0715

2020/04/20 09:17

コメント化しているのでそもそもインスタンスは生成されていないですね。
nskydiving

2020/04/20 10:35

では、「このコードでなら正常に動きました。」とはどういう意味なのでしょうか?
Lemon_0715

2020/04/20 13:17 編集

インスタンスの生成をコメント化して Debug.Logのみの状態にしたコードのことです。 1番上のコメントのコードがそれです。 インスタンス生成の命令をコメント化したってのを明記していなかったため齟齬が生じてしまった感じがします申し訳ないです...
nskydiving

2020/04/20 13:33

「createNumbers」「space」「createPos」もDebug.Log で出力してください。 また、Debug.Log の出力結果を質問欄へ追記してください。
Lemon_0715

2020/04/22 10:00

解決しました。何度も何度も本当にありがとうございました!見当違いな質問をしたことは申し訳ないです...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問