x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

BPを使った攻撃時の音の出し分けについて

いつもお世話になっております。 どなたかご存の方がいたらご教授お願いします。

やりたいこととしては、BPを使って音の出し分けを行いたいです。 例:攻撃がヒットした時にヒット音、攻撃が当たらない場合空振りをする音

hit overlap等のイベントの場合当たった場合はイベントを取得できますが、当たらない場合をどのようにして取得すれば良いのかわかりません。 できない場合は攻撃開始時に空振り音を鳴らし、ヒットと同時にSEの再生ストップと新たにヒット音を鳴らす処理を行うしか無いのでしょうか?参考になるような情報等あれば回答いただけたらと思います。

よろしくお願いします。

Product Version: UE 4.7
Tags:
more ▼

asked Jun 15 '15 at 03:12 AM in Japanese

avatar image

nullponull
1.5k 70 20 51

(comments are locked)
10|2000 characters needed characters left

2 answers: sort voted first

アニメーションシーケンスの編集画面でAnimNotifyを設定できますので、アニメーションブループリントのAnimNotifyイベント→キャスト→MyCharacterなどのBP→状況により違う種類のサウンドを鳴らす というような処理で実装できるかと思います。 (これは空振り云々ではなく当たり方などの状況、状態により音を変える方法です)

そもそも、「”空振り”をする効果音」は不要だと思います。 というのも、武器を振ればヒットしようがしまいが振る音はなりますので、空振りをする効果音、というのではなく、武器を振る効果音を常に鳴らすようにすれば良いと思います。実際、ほとんどすべてのゲームはそのようになっています。 つまり、「当たらない場合」を取得する必要性がありません。 当たった場合に武器を振る効果音を停止させればリアルにはなると思います。

敵に「避けられた」ことをどうしても強調したいのであれば、alweiさんの方法か、敵に無敵時間を設定して無敵時間中にヒットすると空振りの効果音を鳴らすようにすれば良いと思います。

more ▼

answered Jun 20 '15 at 06:15 AM

avatar image

Horus_Ray666
81 14 17 19

avatar image nullponull Jun 20 '15 at 07:41 AM

回答ありがとうございます。アニメーションシーケンスの通知を使って以下の手順 ABP→キャラクタBPで状況ごとに通知の使い分けを行うってことですね。

ちょっと例が良くなかったかもしれませんが、30フレームのアニメーションがあるとして 10フレーム目でスイング音(空振り音)を出し、ヒットしていたらスイング音ではなくヒット音みたいな形の処理ができるかという質問でした。 この場合でもHorusさんの仰る通りスイング音を鳴らし、ヒット時にスイング音を止めヒット音を再生で解決するということですね。

AnimNotifyの方法も行ってみます。 また後程ご報告致しますのでよろしくお願いします。

avatar image nullponull Jun 20 '15 at 10:54 AM

alt text alt text

AnimNotifyを使ってBPで制御することは出来ました 画像①で通知を設定、ここで一つだけ疑問なのが「Tirgger Weight Threshold」の項目です。 調べてみたのですが、これについて書かれている場所を発見できなかったのでここについてもどなたかご存知であれば教えていただけると助かります。

画像② アニメーションブループリントで通知のイベント作成とキャラクターBPへキャストしてキャラクターBPのフラグを変更してあげれば通知を使ってBPで制御することができました。

その後音の出し分けについて調べていましたが、以下の方法を実現したいと思っています。

>>当たった場合に武器を振る効果音を停止させればリアルにはなると思います。

実際に調べてみましたが下記の内容のようなもので良いのでしょうか?

AudioComponentを使い「Play Sound Attached」 と「 set sound」で制御ができるとありましたが、実際にset soundを行っても効果音はストップされませんでした。 この場合アニメーションで設定したPlaySoundの扱いがどうなるのかも知りたいです。

それから、アニメーションで設定したPlaySoundの音を止める方法はないのでしょうか?それが可能なら一番手っ取り早い気がします。

以上です、よろしくお願い致します。

1.png (331.5 kB)
2.png (120.6 kB)
avatar image Horus_Ray666 Jun 21 '15 at 02:42 PM

「stop」という何を止めるんだよみたいな名前のノードがありますのでそれで任意のサウンドコンポーネントを停止出来ます。

アニメーションシーケンスに設定されたサウンドを停止させる方法はわかりません。

avatar image nullponull Jun 25 '15 at 01:44 AM

回答ありがとうございます。 キャラクターBPに追加したAudio ComponentをアニメーションBPで制御する形で音の出し分けについては当初考えていた通りの動作になりました。

これで問題の解決とさせていただきます。 ありがとうございました。

(comments are locked)
10|2000 characters needed characters left

空振りというのも見た目には当っていなくても音が鳴るという事はヒットしているという事です。

あまり賢いやり方ではないかもしれませんが、コリジョンコンポーネントを少し大きめに作成しておき、On Component OverlapのHitの中にはHit Locationの情報がありますので、Hit Locationの位置とコンポーネントの位置からVectorの長さを取得し、一定以上離れている場合には空振りの音、そうでなければ通常のヒット音にする、という方法です。

システム的な対処方法は多分、ないと思います。ただ私であればそのような実装方法をするというだけです。

more ▼

answered Jun 19 '15 at 11:59 AM

avatar image

alwei STAFF
2.8k 125 19 53

avatar image nullponull Jun 20 '15 at 07:33 AM

回答ありがとうございます。 システム的な対処方法は無いということですね。 距離で音の出し分けを行う方法で試してみます。 上手くいきましたらまたご報告致しますのでよろしくお願いします。

avatar image nullponull Jun 20 '15 at 08:50 AM

2点ほどご質問があります。 1点目はBreak Hit ResultでHit Locationを取得してみてprintStringで出力をしてみた結果値が取れる時と取れない時があるようでしたが、この場合考えられる事としては何がありますでしょうか?

2点目は対象とのVector Lengthを取得してどのように比較すれば良いのかわかりません。

以上です、よろしくお願い致します。

avatar image alwei STAFF Jun 20 '15 at 02:59 PM

Hit Locationでコンポーネント座標とヒット座標を引き算したベクトル値をVector Lengthでとれば単純な正規化されたVectorの長さがとれます。

その長さが一定以内であればただしいヒット音を鳴らせばいいですし、一定以上であれば空振り音を鳴らせばいいというだけの話です。

値がとれる時ととれない時は状況がわからず、情報もほとんどないのでお答えするのが難しいところです。

avatar image nullponull Jun 20 '15 at 04:21 PM

ありがとうございます、長さを取ることができました。

Break Hit ResultのHit Locationの件ですが 具体的にはカプセルコリジョンとキャラクターの当たり判定を行った際に カプセルコリジョンのコリジョンタイプ>Blockallでキャラクター>blockallの場合はHit Locationが取得できるのですが、カプセルコリジョンのタイプを>overlapにした場合取得できなくなります。

avatar image alwei STAFF Jun 20 '15 at 04:29 PM

それは使用しているのが、On Component Begin(End)Overlapではなく、On Component Hitの方だからではないでしょうか?

これらはそれぞれ別物で、オーバーラップの情報を取得するためにはOn Overlap系のイベントを使用する必要があります。

BlockAllはOn Hit系のイベントで使用します。

avatar image nullponull Jun 20 '15 at 05:33 PM

alt text

On Component BeginOverlapを使っています。 BlockAll同士の場合は↓にあるOn Component Hitを使ってました。

weaponcollisionと当たり判定を取りたいスケルトンメッシュのcollisionをOverlapとGenerate Overlap EventsをTrueにしてます。 ですがHit Locationのみ座標が取得できませんでした。

3.png (271.0 kB)
avatar image alwei STAFF Jun 21 '15 at 01:49 AM

すみません、一部勘違いしておりました。On Component BeginOverlapではヒット座標をとることはできないようです。Sweep Resultの結果はヒット座標とは別物です。

できることがあるとすれば、Other ActorやOther Compの中からActor LocationやComponent Locationを取得し、そこから同様に計算する方法ですが、こちらもヒット座標とは違うので、厳密な位置をとるのは難しいかもしれません。

どちらにせよOverlap系のイベントで正確なヒット座標をとることはできません。ColisionHit系のイベントは座標はとれますが、反動があるあたり判定となるので、こちらも意図したものにはならない可能性があります。

avatar image nullponull Jun 21 '15 at 04:54 AM

ふむふむ、Sweep ResultはHitとは違うってことですね。 となると、この部分に関してはもう少し調べてみるしかないってことですね。

これ以上は質問とは外れてしまうと思うので別の質問として立ち上げますね。 教えて頂いてありがとうございました。

(comments are locked)
10|2000 characters needed characters left
Your answer
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question