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

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

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

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

Q&A

解決済

1回答

900閲覧

[Unity] 特定の範囲に入ると吹っ飛ぶモーションを作りたい

Gurumer

総合スコア33

Unity

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

0グッド

0クリップ

投稿2019/02/11 05:24

編集2019/02/11 14:26

前提・実現したいこと

ゴリラと人が戦う様なゲームを作成しているのですが、
そのゴリラのパンチが人に当たった際に吹っ飛ぶ様な
モーションを作りたいと思っています。

該当のソースコード

C#

1using UnityEngine; 2using System.Collections; 3 4public class hito_hutto : MonoBehaviour { 5 6 Rigidbody2D Rig; 7 8 // Use this for initialization 9 void Start () { 10 Rig = GetComponent<Rigidbody2D>(); 11 } 12 13 // Update is called once per frame 14 void Update() 15 { 16 17 } 18 19 void OnTriggerEnter2D(Collider2D col) 20 { 21 Rig.AddForce(new Vector2(-10.0f * 1, 2.0f), ForceMode2D.Impulse); 22 } 23 24}

試したこと

吹っ飛ぶ様なモーションはAddForceだと思うんですが、
このまま実行してしまうと、人が範囲内に入った際に
斜めではなく真上に吹っ飛んでしまいます。

補足情報

  • この"hito_hutto"は人となるオブジェクトに入っています。
  • 人にRigidbody2DとFreeze RotationのZが有効になっています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

文章から察するに、パンチをした時に人が吹っ飛ぶのは、AddForceで間違っていません。
が、問題はその方向です。

モーション時に腕のボーンの1つ前のフレームのポイントと現在のポイントをマイナスすれば、方向が取れますよ。こんな感じかな?

Vector2 前フレームポイント void Update() { 前フレームポイント = 現在のフレームポイント } void OnTriggerEnter2D(Collider2D col) { Rig.AddForce(前フレームポイントと現在のフレームポイントの差分, ForceMode2D.Impulse); }

投稿2019/02/11 05:48

stdio

総合スコア3307

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

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

Gurumer

2019/02/11 06:18 編集

そのように試してみたのですが、まだ上に飛んでしまいます。。 フレームポイントは Vector2 h1 = new Vector2(-50.0f, 10.0f); のように代入すればいいんですかね...?
stdio

2019/02/11 06:26

なぜ直値をいれるのですか? 分かりにくいのでどんなゲームを作りたいのか、GIFのアニメーションで上げてもらってよろしいですか? あと放物線なら、飛ばした後にベクトル演算が要りますよ。 吹っ飛ばすだけならAddForceで良いのですが、放物線なら流石にAddForceでは対処できませんよ。
Gurumer

2019/02/11 14:25

放物線は気にしなくで良いです。 直値を入れるから、エラーになってしまうんですかね...? GIFは出来ないので、言葉で説明させて頂きます。 最初の概要の様に人とゴリラが戦う様なゲームを作りたいと思っています。 人側は実際にゲームをする人が自由に動かすことが出来、ゴリラ側はこちら側が指定した簡易的なAIで動いてもらう感じです。 ゴリラのAIは実際にもう出来ているのですが、その時のモーションで「殴る」という動作がありその殴るモーション時に人がヒットしてしまうと、吹っ飛ぶ動作が必要でした。 その為、色々調べてみてaddforceという結果にたどり着きました。 ですが、ネットや本に書かれている通りに作ってみても中々上手く動かず、teratailに質問させて頂きました。 長文失礼しました。
stdio

2019/02/12 00:50

まぁ2Dのゲームなら、プレイヤー(人)が後ろに吹っ飛ぶだけでそれっぽく見えますよ。 放物線はプレイヤー(人)の画像でごまかしが効くので、絵を描くのを挑戦しても良いかもしれませんね。 そもそも、ジャンルが横スクロールなのか、上視点アクションなのかジャンルが分からないから、 話がかみ合ってるのか分からないけど... teratailで質問するときは、「ゴリラと人が戦う様なゲーム」ではなく、「マリオの様な横スクロールゲーム」や「ゼル伝のような上視点アクション」の方がアドバイスしやすいよ。 私がGIFのアニメーションを欲しがったのもそれが理由。
Gurumer

2019/02/12 04:06

説明が足りなく、すみません。 マリオの様な感じの横スクロールアクションです。 addforceを使って横に飛ばない理由など分かりますかね...?
stdio

2019/02/12 05:12

そのジャンルなら放物線運動が要りますね。 https://docs.unity3d.com/ja/2017.4/ScriptReference/Rigidbody2D.html 上記の公式サイト情報では、確かにaddforceで行ける様な気がします。 OnTriggerEnter2D()が何回も通っている可能性はないですか? 名前的にEnterキーを押している間ずっと通っている様な気がしますが... https://qiita.com/asiram/items/3b2875731efdc34bc65a こことかで解説されてますね...
Gurumer

2019/02/12 07:34

やっと思い通りに実現できました! gameobjectの定義やトリガーの重複が原因でした。 stdioさんここまで付き合って頂きありがとうございました。 まだまだUnityは未熟ですが頑張っていきたいと思います。
stdio

2019/02/12 07:52

ただの凡ミスでよかったですね。 ゲームは作っているともっととんでもないエラーに陥るので気負付けて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問