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

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

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

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

Unity3D

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

Q&A

解決済

1回答

1719閲覧

Unityで3Dゲームを作っているのですが、壁を壊すというスクリプトの書き方がわかりません。

sabatyan

総合スコア17

C#

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

Unity3D

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

0グッド

0クリップ

投稿2019/12/29 10:11

unityで3Dゲームを作っているんですけど、関数の作り方がわかりません。
アイテムのトンカチをとって、壁の前に行くと壁が壊れるというのがしたいです。
今のコードは、

using UnityEngine; public class トンカチ : MonoBehaviour { public GameObject トンカチアイテム; public GameObject メッセージ; public GameObject チャット; public GameObject 壊れた壁; public float スピード; private void Update() { if (Input.GetMouseButton(0)) { Ray ray = new Ray(transform.position, transform.forward); Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 50.0f)) { GameObject obj = GameObject.Find("トンカチ"); Destroy(obj); トンカチアイテム.SetActive(true); メッセージ.SetActive(true); GameObject obj2 = GameObject.Find("ハンマーを手に入れた"); Destroy(obj2, スピード = 3.0f); チャット.SetActive(true); GameObject obj3 = GameObject.Find("壊れる壁"); Destroy(obj3); if(Input.GetMouseButton(0)) { 壊れた壁.SetActive(true); } } } } }

っという感じです。これにどうプログラムを付け足せば壁が壊れるというのができるのでしょうか。
他のwebサイトを見てもあまりわかりませんでした。
エラーなどは出ていません。
まだプログラム初心者なので優しく教えていただくと嬉しいです。

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

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

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

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

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

madone99

2019/12/29 10:28 編集

飛ばしたrayを使用していないように見えますが、何のために必要ですか? (rayが当たるものがhitと考えて下さい。)
sabatyan

2019/12/29 10:29

rayはアイテムをクリックしたときにそのアイテムを消すという処理をしている感じで書きましたが...
guest

回答1

0

ベストアンサー

変数名は疑似コードとして、
Physics.Raycastで検索するとブログなどが出てくるので、どういう風に使うか読んでみてください。

変更

C#

1Ray ray = new Ray(transform.position, transform.forward); 2Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition); 3RaycastHit hit; 4if (Physics.Raycast(ray, out hit, 50.0f) { 5 if(hit.collider.gameObject.compareTag(“トンカチ”) ) { 6 壊れた壁.SetActive(true); 7 } 8} 9

投稿2019/12/29 10:44

編集2019/12/29 12:06
madone99

総合スコア1855

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

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

madone99

2019/12/29 10:47

実装方法としては、毎回FindでGameObjectを取得するのではなく、bool値でhasTonkachiがtrueなら壁が壊れると言う考え方にした方がアイテム管理もしやすいと思います。
sabatyan

2019/12/29 10:50

ご回答ありがとうございます。ですが、RayCastを消してしまうと、どこの場所をクリックしてもアイテムが入手できるという状態になってしまいました。アイテムの方向をクリックするとアイテムが入手できるというふうにしたいです...
madone99

2019/12/29 11:02 編集

トンカチかトンカチアイテムのどちらがトリガーになるのかわかりませんが、回答コードを修正しましたので、やりたいように変更して下さい。
sabatyan

2019/12/29 11:46

スクリプトを書いてみました。ですがこれだと、アイテムを取った瞬間壁が壊れてしまいます。 僕としては、 鍵を取る→壁の前に行く→マウス左クリック→壁破壊 という流れになりたいです。
madone99

2019/12/29 11:55

前のコメントで書いたように、アイテムを取った時に、壁が壊れるのではなく、 「トンカチを持っている」をtrueにすれば 壁をクリックした時、「トンカチを持っている」がtrueなら壁が壊れるようにしたらよいです。
sabatyan

2019/12/29 11:59

ありがとうございます。解決しました!
madone99

2019/12/29 12:01

解ってくると楽しいですよね。頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問