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

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

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

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

Unity

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

Q&A

解決済

2回答

3356閲覧

Unityで子供Objectのposition or rigidBodyのaddForceができない

yu-na

総合スコア27

Unity3D

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

Unity

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

0グッド

1クリップ

投稿2018/02/25 11:03

お世話になっております。

Unity3Dで添付のようなモデルのBodyに別モデルを関連(子)づけさせることで、
キャラクターに追随するモデルを作成しています。

イメージ説明

やりたいこととしては、攻撃Actionを女の子が取った時に、追随しているぬいぐるみを
女の子の前方3mくらいに飛んで行って、また同じpositionに返ってくる、いわゆるブーメランみたいなことがやりたいのですが、ベストプラクティスはどのような方法になるのでしょうか。

私が試してダメだった、(エラーだったり、何も起らなかったり。。)ケースはいかになります。

▼ケース1:
女の子にattachしたScriptの中でぬぐるみのObjectをGetComponentで取得し、取得したObjectに対して
GetComponent<RigidBbody>().addForceする。

(ぬいぐるみには、isGravityをfalseにした状態でRigidBodyはattachしてあります)
これは、そもそも

C#

1GameObject.Find("mogu").GetComponent<Rigidbody> ();

こちらがnullになります。

▼ケース2:
そもそも女の子の関連objectではなく、ぬいぐるみも独立したobjectにして、上記を試す。
-> 結果変わらず

でした。

白猫プロジェクトのキューブ武器みたいな挙動が最も近いのですが、どなたお知恵をお貸しして頂けますと幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

GameObject.Find("mogu").GetComponent<Rigidbody> ();
がエラーになる原因として考えられるとしたら以下のどれかになります。まずはこちらを確認ください。

  • GameObject.Find〜するタイミングでmoguオブジェクトが存在しない
  • moguオブジェクトはあるがRigidbodyが付いていない
  • moguという名前のオブジェクトがシーン上に他にも存在し、そちらにRigidbodyが付いていない
  • moguオブジェクトはシーンに1つだけでRigidbodyも付いているが、GameObject.Find〜するタイミングでGameObjectのアクティブがオフになっている

 

もしmoguオブジェクトが最初から存在する(ゲーム中でInstantiateしない)のであれば、
public Rigidbody moguRigid;のようなプロパティを用意し、
インスペクターからアタッチしておくのが手っ取り早く確実です。

ゲーム中でInstantiateする場合も、
GameObject obj = Instantiate(ほにゃらら) as GameObject;
Rigidbody rigid = obj.GetComponent<Rigidbody>();
のようにすると、GameObjectのアクティブ問わず確実に取得出来ます。

 
ブーメラン的な動きについては、具体的な動き方次第になります。
物理運動して欲しい(ぶつかったら跳ね返る等)→ rigidbody.AddForce(帰りはtransform系の移動でないと位置がずれそうですが)
常に同じ動きでいい(数パターンあればいい)→アニメーション(shibinaさん提案)
毎回変わる目的地に確実に到達して欲しい→transform.TranslateやiTweenなどの移動系Asset

投稿2018/02/26 02:02

sakura_hana

総合スコア11425

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

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

yu-na

2018/02/26 14:19

ありがとうございます。 moguオブジェクトは最初から存在し、rigidも付いているのですが、GetComponentだとやはりnullになってしまいました。。 ですが、public宣言して、インスペクターからmoguのrigidを注入する方向でなら成功しましたので、 rigid.AddForceする方向で行こうと思います! ちょっとなぜ取れなかったのか気になりますが、一旦はpublicで行こうと思いました。 丁寧なご回答、本当にありがとうございました!
guest

0

物理挙動を使わずにアニメーションとして記録するのはダメなのでしょうか?

投稿2018/02/25 14:32

shibina

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問