teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

改善案を追記

2018/01/01 05:46

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -39,4 +39,52 @@
39
39
  }
40
40
  */
41
41
  }
42
- ```
42
+ ```
43
+
44
+ ###[追記]
45
+ 最初のスクーターのスクリーンショットですが、どうやらキャラクターがコライダー内部へ侵入しており、レイ起点がコライダーの内側となっているために判定に失敗している可能性がありそうですね。
46
+ 対策案として、レイキャストに失敗した場合、[OverlapSphere](https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html)を使って、レイ起点を中心とする半径0の球...要するにレイ起点が、何らかのコライダーとオーバーラップしているかを追加判定するというのはどうでしょうか。
47
+
48
+ ```C#
49
+ public void TryInteract()
50
+ {
51
+ RaycastHit hit;
52
+ Collider collider = null;
53
+
54
+ if (Physics.Raycast(transform.position, transform.forward, out hit, 1f))
55
+ {
56
+ collider = hit.collider; // レイキャストに成功したらコライダーをcolliderに格納
57
+ }
58
+
59
+ if (collider == null)
60
+ {
61
+ var colliders = Physics.OverlapSphere(transform.position, 0f); // レイキャストに失敗した場合、レイ起点とオーバーラップするコライダーを探す
62
+
63
+ if (colliders.Length > 0)
64
+ {
65
+ collider = colliders[0]; // もしオーバーラップするコライダーがあれば、とりあえずその0番目をcolliderに格納
66
+ }
67
+ }
68
+
69
+ if (collider != null)
70
+ {
71
+ // not working
72
+ if (collider.name == "Bike")
73
+ {
74
+ Debug.Log("Bike");
75
+
76
+ // working
77
+ }
78
+ else if (collider.name == "Cube")
79
+ {
80
+ Debug.Log("Cube");
81
+
82
+ }
83
+ else
84
+ {
85
+ Debug.Log("Other");
86
+ }
87
+ }
88
+ }
89
+ ```
90
+ 注意点として、もしプレイヤーキャラクター自身もコライダーを持っている場合、それとの交差も検出されてしまう可能性がありますので、適宜レイヤーマスクをかけるなりして不要な判定を除外する措置を加える必要があるかと思います。