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

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

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

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

Unity3D

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

Q&A

1回答

822閲覧

unityでキーを長押しすれば発射するオブジェクトの速さが増すようにしたいです。

tokyo_emcount

総合スコア7

C#

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

Unity3D

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

0グッド

0クリップ

投稿2017/12/29 07:25

編集2017/12/31 10:47

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
Unityでシューティングゲーム作っています。
そこでSpaceキーなどのキーを押している時間によって発射するオブジェクトの速さが変化するようにしたいです。また発射する速度の指標としてパワーゲージを作りました。
一応個別には動きましたが、連動はしませんでした。
私としましてはBarScriptにあるとおり、ゲージの幅を読み取って、発射速度に反映されるようにしたいのですが、どうすれば連動できるでしょうか?出来れば詳細もお願いします。

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

SendMessage Jump has no receiver! UnityEngine.Component:SendMessage(String, Object)

###該当のソースコード

using UnityEngine; using System.Collections; public class Pencase : MonoBehaviour { void Start () { } void Update () { if (Input.GetKeyUp(KeyCode.Space)) { transform.position = new Vector3(transform.position.x+ 1f, 30f, 0f); } } }

#パワーゲージのスクリプト

using UnityEngine; using UnityEngine.UI; using System.Collections; public class BarScript : MonoBehaviour { public PencaseScript PencaseScript; RectTransform rt; void Start () { //bar1のRectTransformコンポーネントをキャッシュ rt = GetComponent<RectTransform>(); } void Update (){ //スペースキー入力中である時ゲージを増やす if (Input.GetKeyDown (KeyCode.Space)) { //sizeDeltaでゲージの大きさを制御 //左端から、毎フレーム4ずつ増やす rt.sizeDelta = new Vector2 (rt.sizeDelta.x + 4.0f, 50.0f); //ゲージの横幅が300を超えたら0に戻る if (rt.sizeDelta.x >= 300) { rt.sizeDelta = new Vector2 (0.0f, 50.0f); } } //クリックを放した時 if (Input.GetKeyUp(KeyCode.Space)) { //GetShotForceメソッドへ、ゲージ横幅の3倍分の //ShotForceを送る PencaseScript.SendMessage("Shot", rt.sizeDelta.x * 2.5); //発射したら発射ゲージを0に戻す。 rt.sizeDelta = new Vector2 (0.0f, 50.0f); } } }

###試したこと
script内容の変更
弾の作成・発射から元あるオブジェクトをキー入力で移動させるものへ
###補足情報(言語/FW/ツール等のバージョンなど)

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

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

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

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

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

Bongo

2017/12/30 03:58

修正途中でしょうか、クラス名やスクリプトファイル名が一貫していない(「PencaseScript」と「Pencase」、「BarScript」と「Bar.cs」)ようです。エラーメッセージもそれに起因するように思います。ひとまずそれらを修正してみてはいかがでしょうか。※投稿修正の際には、コード部分の一番上に「```csharp」、一番下に「```」を入れて囲むようにすると、見やすく整形されますのでおすすめです。
Bongo

2017/12/31 12:40 編集

方針自体は悪くないと思うのですが、どうやら現在の問題とは関係ないと思われる「Jump」という名前のメソッドを呼ぼうとして失敗しているようですね。一旦「PencaseScript」、「BarScript」以外のスクリプトはオフにするなりコメントアウトするなりして、その上でやってみるべきこととしては「スペースキーを押している間バーを伸ばすにはInput.GetKeyDownよりInput.GetKeyの方が適切と思われるので、そちらに変える」ことと、fiveHundredさんの言及されている「ペンケース用スクリプトのクラス名がPencaseのままになっているのでPencaseScriptに変える」、「PencaseScriptにShotという名前のメソッドがないので追加する」といったことでしょうか。あとはShotメソッドをどう設計するかというのが考えどころかと思います。ペンケース用スクリプトの中でもキー入力判定をしているようですが、これは混乱の元のような気がします。ひとまずこれは削除して、「Shotメソッドが呼ばれたら、その引数を自身の速度に設定して移動を開始する」ようにShotメソッドを作ってみてはいかがでしょう。
guest

回答1

0

記載されているエラーは、「PencaseScriptが無い」という意味です。
ソースを見る限りでは、「Pencase」と「PencaseScript」が混在しているため、これを同一にすればエラーが無くなると思います。
また、MonoBehaviourを継承しているクラスのファイル名はクラス名と同じでなければいけないというルールもあるので、同じにしておいてください。
(上記まではBongoさんの指摘と同じです)

ただ、このエラーを修正してもこのソースでは意図した通りに動かないと思います。
PencaseScript.SendMessage("Shot", rt.sizeDelta.x * 2.5);はPencaseScriptのShot()を呼び出すという処理です。
にも関わらず、PencaseクラスにはShot()は無いので、処理が破綻しています。
PancaseのUpdate()にある、if(Input.GetKeyDown(KeyCode.Space)){}で囲まれている部分で弾の生成を行なっているので、この処理をShot()に移動すれば良いと思います。
(そもそも、あるスクリプトのある関数を呼び出したいだけであれば、SendMessage()ではなく、関数を直接呼び出せば良いと思いますが)
(他にも正しくない箇所があるかもしれませんが、私が気づいた点としては以上です)

投稿2017/12/30 05:25

fiveHundred

総合スコア9803

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

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

fiveHundred

2017/12/31 12:03

何やら回答を修正したようですが、未だにクラス名が同一されていませんし、エラーも私が言った「SendMessage()」関連ですね。 私が言ったことを聞いてくれなくて非常に残念です。
tokyo_emcount

2018/01/01 06:54

せっかく回答を下さったのに本当に申し訳ございませんでした。 クラス名を直し、PencaseにShot()を作ったところ無事動きました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問