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

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

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

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

Q&A

2回答

10309閲覧

足場をプレイヤーの前に生成させる。

ken1130tennis

総合スコア6

Unity

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

0グッド

0クリップ

投稿2018/05/10 03:28

編集2022/01/12 10:55

Unityの勉強中の者です。
今回の制作にて、足場を生成させる処理を実装したいと考えております。
・実現したいこと・
プレイヤーがキーを入力した時に足場が生成される。
足場の生成位置がプレイヤーの手前。
向いている方向に対して足場を設置。

試していること
・キーを入力した時に足場が生まれる処理を実装したところ。

実装できない部分
足場の生成位置がプレイヤーの手前。
向いている方向に対して足場を設置

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

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

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

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

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

Futahei

2018/05/10 03:31

具体的に何ができないorわからないのか明記しないと回答できませんよ。
guest

回答2

0

プレイヤーの向いている方向を取得したいと判断して回答します

プレイヤーの前方ベクトルは transform.forward で取得が可能です
プレイヤーの位置は transform.position で取得できるので
transform.position + transform.forward * [移動距離] と記述すればプレイヤー前方[移動距離]mの位置が求まります

投稿2018/05/10 03:53

MMashiro

総合スコア2378

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

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

ken1130tennis

2018/05/11 12:01

移動距離というものは var 移動距離名 = transform.position + transform.forward *移動距離でいいんでしょうか??
guest

0

プレイヤーの正面がZ軸の正の方向に設定されていることを前提とします。
以下のスクリプトをプレイヤーにつけてください。
(複数レイヤーから成るプレイヤーなのでしたら一番上の親につけてください)

C#

1public class BlockGenerator : MonoBehaviour { 2 // どの程度の位置に置くか, Inspectorで調節してください 3 public Vector3 offset = new Vector3(); 4 // 生成する足場のプレハブです。オブジェクトプールしてたら適宜読み替えてください 5 public GameObject blockPrefab; 6 7 // 足場生成イベントです。生成したいときに呼び出してください 8 public void Generate() { 9 // 生成する位置です。 10 // プレイヤーのワールド座標にオフセット分ずらしてます。 11 // プライヤーが色んな回転をすることに対応しているのでいらなければ適宜削除してください。 12 Vector3 position = transform.position + 13 transform.up * offset.y + 14 transform.right * offset.x + 15 transform.forward * offset.z; 16 // 生成しています。回転はいじってません。 17 Instantiate(blockPrefab, position, transform.rotation); 18 } 19 20 // テスト用です。 21 void Update() { 22 if(Input.GetKeyDown(KeyCode.G)) { 23 Generate(); 24 } 25 } 26}

例えばオフセットを(0, -1.5, 1)としておくと以下のようになります。
イメージ説明

投稿2018/05/10 04:12

Futahei

総合スコア80

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

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

ken1130tennis

2018/05/10 04:30

ありがとうございます!こちら2Dでの制作中なのですが、これはZ軸の数値を0にすれば実現可能でしょうか??
Futahei

2018/05/10 06:25

あ、なるほど2Dでしたか。そうなるとZ軸の話は無視してください。 それとその2D部分はCanvasの下で制作しているでしょうか? その場合は少し話が違うので変更が必要です。 RectTransformだろうがTransformだろうが、そのものの方向を参考にしたい場合は○○.forwardや○○.rightのようにしてベクトルが取得できます。 これを参考に制作してみてください。
ken1130tennis

2018/05/10 07:23

そうですねCanvasの下で制作しております。場所によってスクリプトが変化したりするんでしょうか??
Futahei

2018/05/10 07:54

RectTransformで調べると出てくると思いますが、Canvas上ではそうでないオブジェクトと別の座標軸が存在します。ですのでスクリプトを作るときはあらかじめ考えておかなければいけないということです。 スクリプトは変化しません。場所に応じてスクリプトを変える必要があるということです。
Futahei

2018/05/10 07:56

2D空間でキャラクターの向きを取得する方法は、移動のたびにキャラクターが反転でもしてない限り分かりません。なのでキャラクターの移動時に自分で今キャラクターが右or左を向いているという値を持っておくのが良いかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問