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

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

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

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

オブジェクト

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

Unity

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

Q&A

解決済

1回答

1023閲覧

カウントが達成したらシーンを切り替えたいVR

Jorge

総合スコア6

C#

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

オブジェクト

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

Unity

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

0グッド

0クリップ

投稿2020/01/30 00:20

前提・実現したいこと

VRで3Dのオブジェクトを叩いて(50回叩く)消えてゲームを移行するシーンを作っているのですが、
VRの場合のカウントの仕方とオブジェクトをカウントして値に入ったらゲーム移行の仕方が
わかりません。
コードではなくVRでのハンドで、50回にカウントしたらゲームシーンの移行がしたいです。

2Dの
「//OnMouseDOen_Countで50衝突するとkauntoして自分自身を消す」
を参考にしたのですが

//カウンター本体 public class GameCounter:MonoBehavior { pulic static int value; pulic int startCount=0; void Start() { value = startCount; } }

script

1//何かと衝突したら、カウンター+ 2public class OnCollision_CountAndHide:MonoBehavior 3{ 4 pulic string targetObjectName; //objectの名前 5 pulic int addValue = 1;//増加値 6 pulic int lastCount =50; 7public string sceneName="Finish"; 8 9void OnCollisionEnter2D(Collision2D collision) 10{ //衝突した場合 11 //衝突したものの名前が値するオブジェクト 12if(collion.gameObject.name == tragetObjectName) 13{  14 //カウンターの値+ 15 GameCounter.value=GameCounter.Value+addValue; 16 //消す 17 this.gameObject.SetActive(false); 18} 19void FixedUpdate() 20{ 21 //カウンターが50 22if(GameCounter.Value == lastCount) 23{ 24  SceneManager.LoadScene(SceneName); 25} 26} 27} 28 29

↑は2Dでの参考にしたスクリプトです。
VRの場合に変更したいです。

補足情報(言語/FW/ツール等のバージョンなど)
C#/unity2018.3.5f

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

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

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

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

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

guest

回答1

0

ベストアンサー

OnCollisionEnter2D がDebug.Log等でちゃんと通っているのを前提に話します

まず、FixedUpdateですが、基本的に物理挙動以外はUpdate側に書きます

同時に2つのオブジェクトにあたってOnCollisionEnter2Dが2回呼び出された場合、
49→51となってしまい、FixedUpdateを通る前に50を通過してしまいます

OnCollisionEnter2D でSetActive(false)としてしまうと、
非アクティブのオブジェクトになるのでFixedUpdate は呼び出されなくなりませんか?
(タイミングによっては呼び出されるかも、ただ設計としてはよくないはず)

OnCollision_CountAndHide はおそらく叩くと消滅するオブジェクトで
たくさんの数があると思うのですが、例えば60個あった場合、50個を叩くと
残りの10個のオブジェクトがLoadScene を呼び出してしまい、これが10回呼ばれます
設計としてはシーンに1個しかないオブジェクト(例えばGameCounter)みたいなものがシーンを呼び出すべきでしょう

投稿2020/01/30 10:07

izmktr

総合スコア2856

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

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

Jorge

2020/02/01 13:19

FixedUpdateが呼び出されたり呼び出されなかったりしたことが何度かあり 再起動を繰り返してたのですが、そういうことだったのかと気付きました。 1つの特定オブジェクトだけに シーンを呼びさせるスクリプトを別につけた所に無事にロードすることが出来ました! 周りからどんどん消さないと行けない状態が理想だったので、できてよかったです。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問