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

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

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

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

Unity

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

2660閲覧

[Unity]transform.parentについて

mcbkar

総合スコア7

C#

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

Unity

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2022/01/12 11:38

編集2022/01/13 08:08

前提・実現したいこと

現在、2dのアクションゲームを作っています。アクションゲームのキャラに
リンクのような剣の振り方をさせたくて、剣をプレイヤーを軸にして回転がさせたいです。
親子関係にすると親が軸になるというのをみたので
prefab.transform.parent = transformでスクリプトで親子関係を作りたいのですがうまくいきません
エラーによるとスクリプトによるおや子関係は無効化されているみたいです。

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

Setting the parent of a transform which resides in a Prefab Asset is disabled to prevent data corruption (GameObject: 'Sword'). UnityEngine.Transform:set_parent (UnityEngine.Transform)

該当のソースコード

public GameObject swordPrefab; public GameObject playerObject; Rigidbody2D rb; // Start is called before the first frame update void Start() { rb = GetComponent<Rigidbody2D>(); } // Update is called once per frame void Update() { } void FixedUpdate(){ if(Input.GetKey(KeyCode.Space)){ Instantiate(swordPrefab, transform.position, Quaternion.Euler(0,0,-40)); swordPrefab.transform.parent = transform; } }

試したこと

SetParentにしてみたり(今回のやり方では相応しくない感じです

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

間違っているのは transform.parent ではなくて、 Object.Instantiate の使い方だと思います。

c#

1 GameObject swordObj = Instantiate(swordPrefab, transform.position, Quaternion.Euler(0,0,-40)) as GameObject; 2 swordObj.transform.parent = transform;

Object.Instantiate は、プレハブからオブジェクトを生成します。(正確にはプレハブだけではないのですが)
生成されたオブジェクトは戻り値として返されるので、それに対して親を設定しなければなりません。

投稿2022/01/12 23:08

katsuko

総合スコア3462

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問