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

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

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

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

Unity

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

Q&A

解決済

1回答

2415閲覧

Unityで3∼6角柱の作成について

NoName417

総合スコア7

Unity3D

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

Unity

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

0グッド

1クリップ

投稿2019/08/03 07:17

前提・実現したいこと

Unityで三角柱~六角柱を作成したくて下記のScriptをオブジェクトに入れると作成はできるのですが
当たり判定が最初に入れた時点のオブジェクトのものになってしまい変更されないです
自分なりにがんばったのですがわからなくて教えてほしいです
Unityを触り始めたばかりなのでわかりやすく説明してほしいです

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

図形の作成後、実行前のオブジェクトの当たり判定しか作成できない

該当のソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(MeshRenderer))]
[RequireComponent(typeof(MeshFilter))]
public class Hexagonal : MonoBehaviour
{

[SerializeField] private Material _mat; // Use this for initialization void Start() { const float root = 0.866025f; var mesh = new Mesh(); Vector3[] positions = new Vector3[] { /* Z軸視点 */ // Top new Vector3 ( 0f, 0f, 0f), //0 new Vector3 (-0.5f, -root, 0f), //1 new Vector3 ( -1f, 0f, 0f), //2 new Vector3 (-0.5f, root, 0f), //3 new Vector3 ( 0.5f, root, 0f), //4 new Vector3 ( 1f, 0f, 0f), //5 new Vector3 ( 0.5f, -root, 0f), //6 // Bottom new Vector3 ( 0f, 0f, 1f), //7 new Vector3 (-0.5f, -root, 1f), //8 new Vector3 ( -1f, 0f, 1f), //9 new Vector3 (-0.5f, root, 1f), //10 new Vector3 ( 0.5f, root, 1f), //11 new Vector3 ( 1f, 0f, 1f), //12 new Vector3 ( 0.5f, -root, 1f), //13 }; //面の生成(数値は生成した順の頂点座標)3つで三角ポリゴンの生成(3つ以外不可能) int[] vertIndices = new int[] { //X視点から見た上下左右表裏記載 //左 0, 1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 5, 0, 5, 6, 0, 6, 1, //右 9, 8, 7, 10, 9, 7, 11, 10, 7, 12, 11, 7, 13, 12, 7, 8, 13, 7, //面A 1, 6, 8, 8, 6,13, //面B 6, 5,13, 13,5,12, //面C 5, 4,12, 12,4,11, //面D 4, 3,11, 11,3,10, //面E 3, 2,10, 10,2, 9, //面F 2, 1, 9, 9, 1, 8, }; Vector3[] vertices = new Vector3[vertIndices.Length]; for (int i = 0; i < vertIndices.Length; i++) { vertices[i] = positions[vertIndices[i]]; } mesh.vertices = vertices; int[] triangles = new int[mesh.vertices.Length]; for (int i = 0; i < mesh.vertices.Length; i++) { triangles[i] = i; } mesh.triangles = triangles; Vector2[] uvSources = new Vector2[] { }; Vector2[] uvs = new Vector2[uvSources.Length]; for (int i = 0; i < uvSources.Length; i++) { uvs[i] = uvSources[i]; } mesh.uv = uvs; mesh.RecalculateNormals(); var filter = GetComponent<MeshFilter>(); filter.sharedMesh = mesh; var renderer = GetComponent<MeshRenderer>(); renderer.material = _mat; gameObject.AddComponent<MeshCollider>(); }

}

C#

ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

ご提示のコードを試してみましたが、ちゃんと六角柱の形のMeshCollider自体は生成されているようでした。
「実行前のオブジェクトの当たり判定しか...」とおっしゃる点から想像しますに、オブジェクトに元々何らかのコライダーがアタッチされており、メッシュを六角柱に差し替えた後もそれが残っていて2つのコライダーが重なっている状態なのではないでしょうか?
もし元々のコライダーの方が六角柱コライダーより大きければ、六角柱コライダーが元々のコライダーに包まれた状態になって当たり判定が変化していないように見えるかもしれません。

新しいコライダーをアタッチする前に、古いコライダーを削除してみてはいかがでしょうか。

C#

1 void Start() 2 { 3 // 省略 4 5 // MeshCollider追加前に、古いコライダーがあればすべて削除し... 6 foreach (var collider in GetComponents<Collider>()) 7 { 8 Destroy(collider); 9 } 10 11 // その後でMeshColliderを追加する 12 gameObject.AddComponent<MeshCollider>(); 13 }

投稿2019/08/03 20:08

Bongo

総合スコア10807

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

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

NoName417

2019/08/04 12:30

元々のColliderを消して上記最後の gameObject.AddComponent<MeshCollider>(); の文を MeshCollider Player; //プレイヤーの情報を入れる箱 gameObject.AddComponent<MeshCollider>(); //MeshColliderを追加 Player = gameObject.GetComponent<MeshCollider>(); //箱に追加した情報の入れる Player.convex = true; //箱に入れた情報でConvexにチェックを入れる に書き換えたらきちんと表示されました Bongoさんの解答のおかげでできましたありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問