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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Unity

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

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

Q&A

解決済

2回答

521閲覧

unityで作ったゲームがブラウザ上で正常に動かない

kurutonbhuik

総合スコア1

Unity

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

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

0グッド

0クリップ

投稿2023/12/22 09:34

編集2023/12/23 12:05

実現したいこと

unityで作ったゲームをwebGLで正常に動かしたい

前提

最近、自分で作ったゲームをunityroomに投稿したいと思い、webGLでbuildまでできたのですが、いざ動かしてみると、正常に動かないです。例えば、消えるはずのオブジェクトが消えなかったり、なぜか会話の最初に戻ったりします。更に明らかに重くなっています。このような時、どうすれば解決できるでしょうか?unityのGameでは想定通り動きました。ゲーム自体はwebでなければ正しく動きます。

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

選択肢を押したときに、押したほうのボタンしか消えない なぜかイベントが巻き戻る ゲームが重くなる

choisee.cs

1using System.Collections; 2using System.Collections.Generic; 3using TMPro; 4using Unity.VisualScripting; 5using UnityEngine; 6 7 8public class choisee : MonoBehaviour 9{ 10 public TextMeshProUGUI textt1; 11 text1 text; 12 choise choises; 13 private void Start() 14 { 15 GameObject obj = GameObject.Find("Square"); 16 text = obj.GetComponent<text1>(); 17 GameObject obj2 = obj.transform.Find("Canvas/21").gameObject; 18 choises = obj2.GetComponent<choise>(); 19 } 20 // Start is called before the first frame update 21 public void sentakusi(string one) 22 { 23 textt1.text = one; 24 this.gameObject.SetActive(true); 25 } 26 public void click() 27 { 28 this.gameObject.SetActive(false); 29 text.choose = 2; 30 text.choisee = false; 31 //ここがうまく動かない 32 choises.gameObject.SetActive(false); 33 text.ikeeee(); 34 } 35}

choise.cs

1using System.Collections; 2using System.Collections.Generic; 3using TMPro; 4using Unity.VisualScripting; 5using UnityEngine; 6 7 8public class choise : MonoBehaviour 9{ 10 public TextMeshProUGUI textt1; 11 text1 text; 12 choisee choises; 13 private void Start() 14 { 15 GameObject obj = GameObject.Find("Square"); 16 text = obj.GetComponent<text1>(); 17 GameObject obj2 = obj.transform.Find("Canvas/22").gameObject; 18 choises = obj2.GetComponent<choisee>(); 19 } 20 // Start is called before the first frame update 21 public void sentakusi(string one) 22 { 23 textt1.text = one; 24 this.gameObject.SetActive(true); 25 } 26 public void click() 27 { 28 this .gameObject.SetActive(false); 29 text.choose = 1; 30 text.choisee = false; 31 text.ikeeee(); 32 //ここがうまく動かない 33 choises.gameObject.SetActive(false); 34 } 35}

start.cs

1using System.Collections; 2using System.Linq; 3using Unity.VisualScripting; 4using UnityEngine; 5 6public class start : MonoBehaviour 7{ 8 SpriteRenderer sprite; 9 public bool wait = false; 10 text1 text; 11 end ending; 12 restart res; 13 14 void Start() 15 { 16 sprite = GetComponent<SpriteRenderer>(); 17 GameObject obj = GameObject.Find("Square"); 18 text = obj.GetComponent<text1>(); 19 Transform obj2 = this.transform.Find("Canvas/end"); 20 ending = obj2.GetComponent<end>(); 21 Transform obj3 = this.transform.Find("Canvas/retry"); 22 res= obj3.GetComponent<restart>(); 23 // Coroutine を開始する 24 StartCoroutine(FadeOut()); 25 } 26 27 // Coroutine の定義 28 IEnumerator FadeOut() 29 { 30 Color color = sprite.color; 31 // 透明度が0より大きい場合 32 while (sprite.color.a > 0) 33 { 34 // 10フレーム待つ 35 yield return new WaitForSeconds(10 * Time.deltaTime); 36 // 透明度を0.01ずつ減らす 37 color.a -= 0.01f; 38 sprite.color = color; 39 } 40 wait = true; 41 } 42 IEnumerator Black() 43 { 44 //ここがうまく作動しない 45 Color color = sprite.color; 46 if (sprite.color.a >= 1.27) 47 { 48 ending.Theend(text.end); 49 res.Reset(); 50 } 51 if (sprite.color.a < 1.27) 52 { 53 yield return new WaitForSeconds(13 * Time.deltaTime); 54 // 透明度を0.01ずつ減らす 55 color.a += 0.01f; 56 sprite.color = color; 57 Blackout(); 58 } 59 } 60 public void Blackout() { 61 text.choisee = true; 62 if (text.end == 1 || text.end == 3 || text.end == 4 || text.end == 6||text.end==7) 63 { 64 if (text.number.Length == 1) 65 { 66 if (text.real==5) 67 { 68 text.number= new int[4] {1,2,3,4}; 69 } 70 else 71 { 72 text.number = new int[1] { 5 }; 73 } 74 } 75 else 76 { 77 text.number = text.number.Where(e => e != text.real).ToArray(); ; 78 } 79 } 80 text.textter = 0; 81 text.real = 0; 82 text.SAVE(); 83 StartCoroutine(Black()); 84 } 85}

試したこと

時間がたってから再度buildしたり、別のブラウザで動かしてみました。

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

unityのバージョンは2022.3です。

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

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

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

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

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

kurutonbhuik

2023/12/22 13:23

追記しました。ご迷惑をおかけしました。
guest

回答2

0

自己解決

解決しました。

原因:プレイヤー求めるFPSが高すぎた。

webGLのFPSが低いため、挙動がおかしくなっていたようです。
EDITのproject settingから、VSyncをDon't syncに設定し、

Application.targetFrameRate = 60; //60FPSに設定

を入れることによってうまくいきました。皆さんありがとうございました。

投稿2023/12/24 14:13

kurutonbhuik

総合スコア1

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

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

0

整理しましょう。
choisee.csでの問題点は、SetActiveを使っている箇所がGameObject型でないことです。
choise.scでも同様に、choisee choises;となっているため、修正するとしたら、
[SerializeField] GameObject choises;としてSetActiveしたいGameObjectを割り当てると上手くいくと思います。
追記2023-12-23
どのような機能を実装したいかによってアプローチの方法も異なります。何か別の実装方法がないかを探っていきましょう。
○○な機能を実装したいといった詳細な部分を教えていただけると再現も出来ますし、1weekに参加する予定があるのなら急ぎだと思いますし、私は、ゲーム開発の質問や分からないことについてお助けする事が喜びであります。

投稿2023/12/22 14:15

編集2023/12/23 11:08
isimasa

総合スコア295

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

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

kurutonbhuik

2023/12/22 15:43

修正してみましたが、やはり動きませんでした。ごめんなさい、、、
kurutonbhuik

2023/12/23 12:04

ありがとうございます。ゲーム自体は完成しているのですが、なぜかwebで動かすとおかしな挙動になってしまいます。そのため、webで動かしても実際の挙動になるようにしたいです。機能の実施は大丈夫だと思います。語彙力が足りず申し訳ございません。急ぎではないので、時間がたっても答えていただけるなら幸いです。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問