TanksゲームにHome画面を追加したい | Unity Forum | Tech Stadium Forum

TanksゲームにHome画面を追加し...
 
通知
すべてクリア

TanksゲームにHome画面を追加したい  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
30/04/2023 12:49 pm  

最終課題のTanksゲームについて2つ質問があります。

・TanksゲームにHome画面を追加し、スタートボタンを設置して"HomeManager"スクリプトをアタッチしました。スタートボタンをクリックすると、シーン遷移してROUNDが始まります。再生した時点でTankのインスタンスは生成したいのですが、スタートボタンを押すまでTankを操作できないようにするにはどうしたら良いでしょうか? 現在スタートボタンを押す前にTankを動かせてしまいます…

・今回「ボタンを押したらシーン遷移する」しかイメージできなかったのでHomeSceneを追加したのですが、ボタンを押さなくてもシーン遷移する方法はありますか? 例えば「どちらかが2ラウンド先取したら違うシーンに遷移する」という風にしたいときは、どうしたら良いでしょうか?

アドバイスいただけると助かります。よろしくお願いいたします。


引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
30/04/2023 12:50 pm  

まず1つ目のものの解説をします。Tankの動きはTankMovement.csで管理しており、特にFixedUpdate()の中身が毎回呼ばれることで動く仕組みです。
なのでこの内容を「ボタンを押したら」呼ばれる、というように書き換えると制御ができます。(以下添付画像)
ボタンを押したかどうかを判定するにはbool変数等を使うと書きやすいです。
https://squmarigames.com/2018/11/18/unity-beginner-bool/


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
30/04/2023 12:50 pm  

2つ目ですが
PhotonManagerにあるOnClickGameStartButton()等、遷移に使われる関数がpublic型なので外のスクリプトがら呼ぶことができます。
GameManagerなどのスクリプトで2ラウンド先取を感知した場合に、PhotonManagerの遷移に使われる関数を呼び出すという方法で実装ができます。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
30/04/2023 12:50 pm  

1つ目について、ボタンを押したかどうかを判定するbool変数をHomeManager.csに書いて、それをTankMovement.csで取得するのかなと思ったのですが、色々調べてみてもどのように書いたらいいか分かりませんでした。

このような考え方で合っているのか、またどういうスクリプトを書いたらいいのか、教えていただけると幸いです。よろしくお願いいたします。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
30/04/2023 12:51 pm  

Instantiateしたオブジェクトは最初からSceneに存在していないのでアタッチができません。
そのためGameObject.Find()を使って、Scene上のオブジェクトを探します。
詳しく書かれているサイトを以下に添付します。
https://tech.pjin.jp/blog/2020/12/29/unity_csharp_gameobjectfind

これでHomeManager.csが付いているオブジェクトをTankMovement.csから参照、そのあとスクリプトをGetComponentすればbool変数を参照することができます。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
30/04/2023 12:51 pm  

返信いただきありがとうございました。大変助かりました。

スクリプトを変更(赤矢印部分)して再生したら、STARTボタンを押すまでタンクは動かず、無事シーン遷移もできたのですが、今度はシーン遷移後にタンクが動かなくなってしまいました。度々申し訳ありませんが、アドバイスをいたけると幸いです。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
30/04/2023 12:52 pm  

コンソールを見ると98行目でエラーが発生していて、それが"homeManagerのコンポーネントが参照できない"、"homeManager自体が参照できない"という内容です。
コンソールのエラーの簡単な見方を参考画像として添付します。

遷移先のSceneにそもそもHomeManagerオブジェクトがあるか(大文字小文字も注意)、HomeManagerオブジェクトにスクリプトは付いているか、確認してみてください。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
30/04/2023 12:52 pm  

返信ありがとうございました。遷移先の‟Main Scene”にHomeManagerオブジェクトがありませんでした。

そもそも遷移先のMainSceneにはGameManagerスクリプトをアタッチしたGameManagerオブジェクトを置いていて、HomeSceneにはHomeManagerスクリプト(GameManagerスクリプトから必要箇所だけコピペしてシーン遷移を追記したもの)をアタッチしたHomeManagerオブジェクトを置いていました。

それはNGで、どちらのシーンにもGameManagerスクリプトをアタッチしたGameManagerオブジェクトを置くのでしょうか?

そのようにやってみたところ、やはりシーン遷移後にタンクが動きませんでした。度々申し訳ありませんが、どうやったら直せるか教えていただけると幸いです。よろしくお願いいたします。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
30/04/2023 12:53 pm  

gameManagerが無い状態なのですね。
このコードではgameManagerの状態によって動けるかどうかを判断しているのでgameManagerが無いと動けません。Sceneによって読み込ませたいスクリプトが違う場合は、参照したかったGameObjectが無かった場合にもう一方の参照したいGameObjectを読み込ませるための条件分岐を与えます。
if(○○ == null)によって指定の変数にオブジェクトやコンポーネントが付いているかどうかを判定することができます。(以下参考リンク)
https://unitygeek.hatenablog.com/entry/2013/09/07/110829

参考画のようにGetComponent<>()をする前にオブジェクトがあるかどうかの条件分岐を挟むとエラーが発生しません。

This post was modified 1年前 by Teacher

返信引用
共有:
タイトルとURLをコピーしました