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

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

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

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

受付中

側面をタップした時、その横にオブジェクトを設置したい

_Beginner
_Beginner

総合スコア0

C#

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

0クリップ

18閲覧

投稿2019/04/06 09:28

編集2022/01/12 10:55

Unity3D

Minecraftのような、FPSの状態です。
カメラの中心から向いている前にRaycastを飛ばしています。

###やりたいこと

Scale(1, 1, 1)のキューブオブジェクト(Prefabオブジェクト)をMinecraftのように設置できるようにしたいです(Raycastが側面と当たっていたら側面側にオブジェクトを設置、Raycastがオブジェクトの下に当たっていたらその下にオブジェクトを設置できるようにしたい)。設置するオブジェクトの位置はRaycastが当たった位置の切り捨て+0.5fの値にしています。
なぜそのようにしているのかというと、オブジェクトの位置は整数ではなく、~.5の少数の形にしたいからです。
地面の位置はy = 0です。

###できていること
オブジェクトの上にRaycastが当たっているときは、その上にオブジェクトを設置することはできています。

###現在のコード

C#

GameObject Prefab; float distance = 5; Ray rayFPS = new Ray(Camera.main.gameObject.transform.position, Camera.main.gameObject.transform.forward); if (Physics.Raycast(rayFPS, out hitFPS, distance)) { if (Input.GetKeyDown(KeyCode.K)) { Instantiate(Prefab, new Vector3(Mathf.CeilToInt(hitFPS.point.x) - 0.5f, Mathf.CeilToInt(hitFPS.point.y) + 0.5f, Mathf.CeilToInt(hitFPS.point.z) - 0.5f), Quaternion.Euler(-90, 0, 0)); } }

###起こる問題
上のコードでオブジェクトを設置しているのですが、これだと、オブジェクトの側面がRaycastの当たった場所になると、設置してあるオブジェクトと重なります。

また、オブジェクトの側面にRayが当たっているとき、Raycastのヒット位置のx座標が自分が立っている位置よりも大きい(例えばプレイヤーのx = 1hitFPS.point.x = 5)場合、コード上では**-0.5しているため、オブジェクトのScale 1個分**こっち側に設置されます。

しかし、オブジェクトの側面にRayが当たっているとき、Raycastのヒット位置のx座標が自分の立っている位置よりも小さい(例えばプレイヤーのx = 5hitFPS.point.x = 1)場合、コード上では**-0.5**しているため、設置されているオブジェクトに重なります(同じオブジェクトの為目では見えませんがインスペクターで重なっています)。

また、オブジェクトの下からRaycastが上を向いた状態で当たると、そのオブジェクトの下にオブジェクトを設置したいのですが、コードで、 Y + 0.5fされているので、重なってしまいます。

XとY座標だけを言いましたが、Z座標でも同じです。


設置するオブジェクトの位置はRaycastが当たった位置の切り捨て+0.5fの値にしています。

なぜそのようにしているのかというと、オブジェクトの位置は整数ではなく、~.5の少数の形にしたいからです。

と言いましたが、個人的にはこれが一番致命的な問題だと思っています。
しかし、どうしてもオブジェクトの位置は(X,Y,Zともに)~.5にしたいです。

補足してほしい情報がありましたらコメントお願いします。
回答よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。