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

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

詳細はこちら
C#

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

Unity3D

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

Unity

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

Oculus Rift

Oculus Riftは、ゲームに特化した広視野角バーチャルリアリティヘッドマウントディスプレイ です。そのため、バーチャルリアリティ・ゲームで使用するのを第一目的として開発されています。

Q&A

1回答

1341閲覧

勝手にPrefabがインスタンス化される

nanaminirena773

総合スコア4

C#

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

Unity3D

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

Unity

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

Oculus Rift

Oculus Riftは、ゲームに特化した広視野角バーチャルリアリティヘッドマウントディスプレイ です。そのため、バーチャルリアリティ・ゲームで使用するのを第一目的として開発されています。

0グッド

0クリップ

投稿2019/11/02 14:08

編集2019/11/03 08:01

前提・実現したいこと

OS:Windows 10
Unity 2019.2.0f1 を使用している
Oculus Rift S でVRゲームを作っている
VR側とPC側の対戦のようなものを作っていて、PC側はカードをクリックして召喚。
VR側は魔法などでそれを倒すというゲームです。
AssetはOculus Integrationを使っています。

OculusTouchのAボタンを押すと、PC側が最後に使用したカードで召喚されるものが出てきてしまいます。
Aボタンを押しても何もPrefabが召喚されないようにしたいです。

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

OculusTouchのAボタンを押すと上記の予期せぬ動作をする。

エラーは出ていません。

該当のソースコード

召喚する際に使用するカードのソースコードです。
カードをボタンとして配置し、それを押された際に下記のOnClickが呼ばれるようになっています。

C#

1using UnityEngine; 2using UnityEngine.UI; 3 4public class CardController : MonoBehaviour 5{ 6 7 float delta = 0; 8 9 void Start() 10 { 11 this.aud = GetComponent<AudioSource>(); 12 this.particle = GetComponent<ParticleSystem>(); 13 14 } 15 16 public GameObject pikuprefab; 17 public GameObject bombPrefab; 18 public GameObject Beam; 19 public GameObject DarkPikuPrefab; 20 public GameObject PomepomePikuPrefab; 21 public GameObject GhostPrefab; 22 public GameObject Potion; 23 24 public Text text; 25 26 public AudioClip DarkSE; 27 public AudioClip PomepomeSE; 28 public AudioClip PioPioSE; 29 AudioSource aud; 30 public static int EnemyCount; 31 public int XRandom; 32 int HealX_Random; 33 int HealZ_Random; 34 ParticleSystem particle; 35 36 37 38 void Update() 39 { 40 delta += Time.deltaTime; 41 if(delta >= 30.0f) 42 { 43 delta -= 30.0f; 44 GameObject potion = Instantiate(Potion) as GameObject; 45 HealX_Random = Random.Range(-1, 1); 46 HealZ_Random = Random.Range(-5, -2); 47 potion.transform.position = new Vector3(HealX_Random, -1, HealZ_Random); 48 49 } 50 } 51 public void OnClick(int number) 52 { 53 GameObject Enemy; 54 55 switch (number) 56 { 57 case 0: 58 if (20 <= EnemyCount) 59 { 60 text.text = "cannot spawn"; 61 break; 62 } 63 text.text = "spawn"; 64 Enemy = Instantiate(DarkPikuPrefab) as GameObject; 65 //Beam = Instantiate(Beam) as GameObject; 66 float DarkPosition = Random.Range(-3.0f, 3.0f); 67 Enemy.transform.position = new Vector3(DarkPosition,0.9f,-0.39f); 68 GameObject beam = GameObject.Find("Beam"); 69 if (beam != null) 70 { 71 Debug.Log("FIndBeam"); 72 beam.GetComponent<BeamShot>().shot(); 73 } 74 75 76 EnemyCount++; 77 78 //GameObject beamshot = GameObject.Find("Beam"); 79 //beamshot.GetComponent<BeamShot>().shot(); 80 this.aud.PlayOneShot(this.DarkSE); 81 break; 82 83 84 case 1: 85 /*if (20 <= EnemyCount) 86 { 87 text.text = "cannot spawn"; 88 break; 89 }*/ 90 text.text = "spawn"; 91 Enemy = Instantiate(PomepomePikuPrefab) as GameObject; 92 93 float[] PomepomePosition = {-2.8f, 0.6f, 2.1f}; 94 XRandom = Random.Range(0, 2); 95 Enemy.transform.position = new Vector3(PomepomePosition[XRandom], 3, -0.9f); 96 97 98 EnemyCount++; 99 this.aud.PlayOneShot(this.PomepomeSE); 100 break; 101 102 103 case 2: 104 if (20 <= EnemyCount) 105 { 106 text.text = "cannnot spawn"; 107 break; 108 } 109 text.text = "spawn"; 110 Enemy = Instantiate(GhostPrefab) as GameObject; 111 112 float[] GhostPosition = { -0.46f, 1.48f, -1.77f}; 113 Enemy.transform.position = new Vector3(GhostPosition[XRandom], -0.1f, -9f); 114 115 EnemyCount++; 116 //Enemy.transform.rotation = Quaternion.Euler(0.006f,60,0.002f); 117 break; 118 119 120 case 3: 121 122 text.text = "go!!!!!!!"; 123 Enemy = Instantiate(pikuprefab) as GameObject; 124 Enemy.transform.position = new Vector3(1, 0, 1); 125 this.aud.PlayOneShot(this.PioPioSE); 126 break; 127 128 } 129 } 130}

試したこと

ほかの場所でAボタンを検知している場所がないか確認しましたが見当たりませんでした。
また、ほかのスクリプトで上記のPrefabをインスタンス化するようなプログラムを書いていません。

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

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

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

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

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

KanazawaKureha

2019/11/03 05:10

「OculusTouchのAボタンを押すと、PC側が最後に使用したカードで召喚されるものが出てきてしまいます。」という文章を見る限り、Prefubの召喚自体は上手くいっているが、種類が異なるように見えるのですが? 種類が異なる>>異常 なのか その他変な所でPrefubが召喚される>>異常 どちらでしょうか?
nanaminirena773

2019/11/03 07:54

変なところでPrefabが召喚されるというほうです。 本来Aボタンを押しても何もならない(Prefabは召喚されない)ようにプログラムを書いているのですが、PC側でたくさんカードをクリックした後(10回ほど連続でクリックする)にOculus TouchでAボタンを押すと最後にクリックしたカードのPrefabが召喚されてしまいます。 PC側でカードを連続でクリックせず、2,3回クリックしたあとにAボタンを押してもPrefabは召喚されません。逆にカードをクリックせず、Oculus TouchのAボタンを連打してもPrefabは召喚されません。何度も連続でPC側でカードをクリックすることに何か問題があると思われるのですが、どこに原因があるのかわからないという現状です。
KanazawaKureha

2019/11/03 11:33

私の知識不足かも知れませんが、OnClickの第一引数の示す整数値の意味がわかりません。 オキュラスには詳しくないのですが、何の値か教えていただけないでしょうか?
guest

回答1

0

とりあえず何らかの方法で「PC側」「Oculus側」を判定して、
if文を追加して「Oculus側だったら処理しない」とすればいいです。

雑にやるならApplication.platformで判定ですかね。
RuntimePlatform - Unity スクリプトリファレンス

投稿2019/11/05 06:23

sakura_hana

総合スコア11427

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問