6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UnityのGetCompornentはMonobehavior上には置いてはいけないらしい?

Last updated at Posted at 2017-11-14

Unity上で何かに力を加えたりするのにRigidbodyを呼び出し、Addforceなどを使用すると思いますが、そこで躓いたので書きます
多分めちゃくちゃ初心者ゆえのミスなんですが、初心者はみんな躓くんじゃないかなと思ったので書きます
何より私がつまづいて、キレかけたのでかきます!

#GetCompornentはMonobehaviorに置いたらキレそうになる
私の書いたコードは以下のとおりです

Unity.cs
public class UniversalGravitation : MonoBehaviour {
    public GameObject rocket;
    Rigidbody rocket_body = rocket.GetComponent<Rigidbody>();
    // Use this for initialization
    void Start () {
    }
	
	// Update is called once per frame
	void Update () {
        if (Input.GetKey(KeyCode.D))
        {
            rocket_body.AddForce(0, 100, 0);
        }
	}
}

まあrocketという名前のGameObjectのRigidbodyを取り出して、キーボードの”D"が押されてる間100の力を加えるという意味で書いてます
publicに指定しているrocketに力を加えたいオブジェクトをUnity上で関連付ければ動くはずだと思ったわけです

しかし以下のエラーが出てきました(´・ω・`)

A field initializer cannot reference the nonstatic field,method,or property

まあわけわかめですわ(;´∀`)
で、いくつか読んだ本に書いてたサンプルコードを思い出したわけです
(´-`).。oO(あれ?そういえばGetCompornentってStart()上にあった気が
ということで少し書き直しました

Unity.cs
public class UniversalGravitation : MonoBehaviour {
    public GameObject rocket;
    Rigidbody rocket_body; //←ここを定義だけにした
    // Use this for initialization
    void Start () {
    rocket_body = rocket.GetComponent<Rigidbody>(); //←Start()上で代入した
    }
	
	// Update is called once per frame
	void Update () {
        if (Input.GetKey(KeyCode.D))
        {
            rocket_body.AddForce(0, 100, 0);
        }
	}
}

こうしたら、動いた~~
なんかStart()上で書き直したらうまくいきました

##まとめ
原因はわかりませんが、GetCompornetをMonobehavior上に置くとerrorがでて、Start()上に置くとうまくいきました

もしかしたら、Monobehavior上では変数定義だけにして、Start()上で初期化するのがいいのかもしれません(・・;)
たぶん初心者ゆえのわけわかめミスなのですが、プログラムを日常的に触っている人からすると当然でしょ?的な話な気もします
しかし、私がつまづいたのでつまづくかたもいると思ったので書きました
参考になってくれたら嬉しいですし、原因など詳しい話があったらそれも聞いてみたいです

ここまでお読み下さりありがとうございました

6
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?