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

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

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

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

Q&A

0回答

484閲覧

Unityの2Dのゲームでビルドをして実行すると当たり判定が見た目以上に広くなってしまいます。

SAKUYA_ship

総合スコア4

C#

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

0グッド

0クリップ

投稿2018/07/13 03:25

編集2022/01/12 10:55

光源の位置をもとにして影を生成しその影を地形としてゴールを目指すというゲームを制作していますが、
Unityのデバック上では見た目通りに当たり判定がとれていたのですが、ビルドをし、実行すると影の当たり判定が見た目以上に広くなってしまっています。
OSはWindows8.1Pro
機種はdynabookR73/NB34E
Unityのバージョンは5.6.3p1です
Unity上で動かした時のゲーム画面です。見た目通りに当たり判定がとれています
イメージ説明
イメージ説明
ビルドをして実行したときのゲーム画面です。画像でわかりにくいですが、これ以上影の方へ進めなくなっています。
イメージ説明
イメージ説明

C#

1using UnityEngine; 2using System.Collections; 3using System; 4public class Shadow : MonoBehaviour 5{ 6 //publicで宣言し、unityのInspectorで設定可能にする 7 public GameObject light; //inspectorでオブジェクト「light」を設定 8 public GameObject center; //inspectorでオブジェクト「center」を設定 9 public Sprite shadow1; //inspectorで「st_shadow_0」を設定 10 public Sprite shadow2; //inspectorで「st_shadow_330」を設定 11 public Sprite shadow3; //inspectorで「st_shadow_300」を設定 12 public Sprite shadow4; //inspectorで「st_shadow_270」を設定 13 GameObject shadowblock; //親オブジェクトの影ブロック 14 Vector2 c_l_vector = new Vector2(); //ステージの中心から光源(light)へのベクトル 15 Vector2 vec_y1 = new Vector2(0.0f, 1.0f); //関数Anglefor2Vectorでsbc_l_vectorのy成分が正の時に使用 16 Vector2 vec_y2 = new Vector2(0.0f, -1.0f); //関数Anglefor2Vectorでsbc_l_vectorのy成分が負の時に使用 17 float angle = 0.0f; //c_l_vectorとc_l_vectorのy成分の値によって使用するベクトル(vec_y1かvec_y2)の為す角度 18 SpriteRenderer ShadowSpriteRender; 19 void Start() 20 { 21 //親オブジェクトの影を生み出すブロックの情報を取得 22 shadowblock = transform.root.gameObject; 23 //SpriteRendererを取得する 24 ShadowSpriteRender = gameObject.GetComponent<SpriteRenderer>(); 25 } 26 void Update() 27 { 28 //ステージの中心から光源へのベクトルを求める 29 c_l_vector = light.transform.position - center.transform.position; 30 MakeShadow();//影のスプライトを動的に変更 31 } 32 void MakeShadow() 33 {//光源の角度によって影のスプライトを動的に変更する関数 34 if (Light.light_flag == true)//光源が点いているか 35 { 36 if (0 <= c_l_vector.x)//sbc_l_vectorのy成分が正である 37 { 38 angle = Anglefor2Vector(vec_y1, c_l_vector);//影ブロックから光源へのベクトルとx成分が1のみのベクトルの為す角度を求める 39 if (0 <= angle && angle < 30)//0時の方向に影が伸びる 40 { 41 42 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>());//最初に当たり判定のコンポーネントを削除 43 //(しなかったら毎フレームコンポーネントをアタッチすることになるので重くなる) 44 this.transform.position = new Vector3(shadowblock.transform.position.x, shadowblock.transform.position.y - 2.0f, +1.0f); 45 this.transform.rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f);//スプライトを回転 46 ShadowSpriteRender.sprite = shadow4;//スプライトを選択 47 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>();//再び当たり判定のコンポーネントをアタッチ 48 return; 49 } 50 if (30 <= angle && angle < 60)//1時 51 { 52 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 53 this.transform.position = new Vector3(shadowblock.transform.position.x - 1.04f, shadowblock.transform.position.y - 1.63f, +1.0f); 54 this.transform.rotation = new Quaternion(0.0f, -180.0f, 0.0f, 0.0f); 55 ShadowSpriteRender.sprite = shadow3; 56 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>(); 57 return; 58 } 59 if (60 <= angle && angle < 90)//2時 60 { 61 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 62 this.transform.position = new Vector3(shadowblock.transform.position.x - 1.63f, shadowblock.transform.position.y - 1.04f, +1.0f); 63 this.transform.rotation = new Quaternion(0.0f, 90.0f, 0.0f, 0.0f); 64 ShadowSpriteRender.sprite = shadow2; 65 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>(); 66 return; 67 } 68 if (90 <= angle && angle < 120)//3時 69 { 70 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 71 this.transform.position = new Vector3(shadowblock.transform.position.x - 2.0f, shadowblock.transform.position.y, +1.0f); 72 this.transform.rotation = new Quaternion(0.0f, 180.0f, 0.0f, 0.0f); 73 ShadowSpriteRender.sprite = shadow1; 74 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>(); 75 return; 76 } 77 if (120 <= angle && angle < 150)//4時 78 { 79 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 80 this.transform.position = new Vector3(shadowblock.transform.position.x - 1.63f, shadowblock.transform.position.y + 1.04f, +1.0f); 81 this.transform.rotation = new Quaternion(0.0f, 0.0f, -90.0f, 0.0f); 82 ShadowSpriteRender.sprite = shadow2; 83 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>(); 84 return; 85 } 86 if (150 <= angle && angle < 180)//5時 87 { 88 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 89 this.transform.position = new Vector3(shadowblock.transform.position.x - 1.04f, shadowblock.transform.position.y + 1.63f, +1.0f); 90 this.transform.rotation = new Quaternion(0.0f, 0.0f, -90.0f, 0.0f); 91 ShadowSpriteRender.sprite = shadow3; 92 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>(); 93 return; 94 } 95 return; 96 } 97 if (c_l_vector.x < 0)//sbc_l_vectorのy成分が負である 98 { 99 angle = Anglefor2Vector(vec_y2, c_l_vector);//影ブロックから光源へのベクトルとx成分が-1のみのベクトルの為す角度を求める 100 if (0 <= angle && angle < 30)//6時 101 { 102 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>());//最初に当たり判定のコンポーネントを削除 103 //(しなかったら毎フレームコンポーネントをアタッチすることになるので重くなる) 104 this.transform.position = new Vector3(shadowblock.transform.position.x, shadowblock.transform.position.y + 2.0f, +1.0f);//影ブロック相対位置に設定 105 this.transform.rotation = new Quaternion(180.0f, 0.0f, 0.0f, 0.0f);//スプライトを回転 106 ShadowSpriteRender.sprite = shadow4;//スプライトを選択 107 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>();//再び当たり判定のコンポーネントをアタッチ 108 return; 109 } 110 if (30 <= angle && angle < 60)//7時 111 { 112 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 113 this.transform.position = new Vector3(shadowblock.transform.position.x + 1.04f, shadowblock.transform.position.y + 1.63f, +1.0f); 114 this.transform.rotation = new Quaternion(-90.0f, 0.0f, 0.0f, 0.0f); 115 ShadowSpriteRender.sprite = shadow3; 116 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>(); 117 return; 118 } 119 if (60 <= angle && angle < 90)//8時 120 { 121 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 122 this.transform.position = new Vector3(shadowblock.transform.position.x + 1.63f, shadowblock.transform.position.y + 1.04f, +1.0f); 123 this.transform.rotation = new Quaternion(-90.0f, 0.0f, 0.0f, 0.0f); 124 ShadowSpriteRender.sprite = shadow2; 125 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>(); 126 return; 127 } 128 if (90 <= angle && angle < 120)//9時 129 { 130 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 131 this.transform.position = new Vector3(shadowblock.transform.position.x + 2.0f, shadowblock.transform.position.y, +1.0f); 132 this.transform.rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f); 133 ShadowSpriteRender.sprite = shadow1; 134 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>(); 135 return; 136 } 137 if (120 <= angle && angle < 150)//10時 138 { 139 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 140 this.transform.position = new Vector3(shadowblock.transform.position.x + 1.63f, shadowblock.transform.position.y - 1.04f, +1.0f); 141 this.transform.rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f); 142 ShadowSpriteRender.sprite = shadow2; 143 ShadowSpriteRender.gameObject.AddComponent<PolygonCollider2D>(); 144 return; 145 } 146 if (150 <= angle && angle < 180)//11時 147 { 148 Destroy(ShadowSpriteRender.GetComponent<PolygonCollider2D>()); 149 this.transform.position = new

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

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

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

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

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

sakura_hana

2018/07/13 04:18

書き出し先のOSと機種は何ですか? また、見た目以上に広くなるとはどう広くなるのですか?(図示してもらえると分かりやすいです)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問