回答編集履歴

5

追記

2018/10/24 11:47

投稿

退会済みユーザー
test CHANGED
@@ -12,7 +12,15 @@
12
12
 
13
13
 
14
14
 
15
+ ### 追記(訂正)
16
+
17
+ ものすごくいまさらですが、追記分を訂正します。
18
+
19
+ わざわざ自分でRaycasterをC#で用意しなくても、次のような仕組みがあるようです。(https://qiita.com/JunShimura/items/4547563fbb2691f40626)
20
+
21
+
22
+
15
- *追記*
23
+ ~~*追記*~~
16
24
 
17
25
 
18
26
 

4

久しぶりにUnityを触りたくなったので、コードも用意してみました。

2018/10/24 11:47

投稿

退会済みユーザー
test CHANGED
@@ -9,3 +9,191 @@
9
9
  ちなみに、ちょっと関係ないかもしれませんが、おすすめのチュートリアルを紹介します([Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)
10
10
 
11
11
  )。その他、公式にいろいろあります。ビデオが英語なので面食らうかもしれませんが、その下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
12
+
13
+
14
+
15
+ *追記*
16
+
17
+
18
+
19
+ 久しぶりにUnityを触りたくなったので、コードも用意してみました。
20
+
21
+ [こちら](https://answers.unity.com/questions/1252688/how-to-activate-ontriggerenter-when-player-ray-hit.html)も参考にしました。
22
+
23
+
24
+
25
+ ######Ken.cs
26
+
27
+ 各Cubeに割り当ててください。色はインスペクターで設定してください。
28
+
29
+ ```C#
30
+
31
+ using UnityEngine;
32
+
33
+
34
+
35
+ public class Ken : MonoBehaviour, IHitReceiver
36
+
37
+ {
38
+
39
+ // Inspectorで色を設定してください
40
+
41
+ public Color OriginalColor;
42
+
43
+ public Color OtherColor;
44
+
45
+ Material Material;
46
+
47
+
48
+
49
+ void Start()
50
+
51
+ {
52
+
53
+ // マテリアルをあらかじめ取得します
54
+
55
+ this.Material = this.GetComponent<Renderer>().material;
56
+
57
+ // 色を設定します
58
+
59
+ this.Material.color = OriginalColor;
60
+
61
+ }
62
+
63
+
64
+
65
+ void Update()
66
+
67
+ {
68
+
69
+ }
70
+
71
+
72
+
73
+ public void OnHit()
74
+
75
+ {
76
+
77
+ // 色を変えます
78
+
79
+ if (Input.GetMouseButtonDown(0))
80
+
81
+ this.Material.color = this.OtherColor;
82
+
83
+ // 色を元に戻します
84
+
85
+ else if (Input.GetMouseButtonDown(1))
86
+
87
+ this.Material.color = this.OriginalColor;
88
+
89
+ }
90
+
91
+ }
92
+
93
+ ```
94
+
95
+
96
+
97
+ ######IHitReceiver.cs
98
+
99
+ これはファイルを用意するだけで、ゲームオブジェクトには割り当てません。
100
+
101
+ Ken.csと同じフォルダに放り込んでください。
102
+
103
+ ```c#
104
+
105
+ namespace Assets
106
+
107
+ {
108
+
109
+ interface IHitReceiver
110
+
111
+ {
112
+
113
+ void OnHit();
114
+
115
+ }
116
+
117
+ }
118
+
119
+ ```
120
+
121
+
122
+
123
+ ######InputRaycaster.cs
124
+
125
+ カメラに割り当ててください。
126
+
127
+ ```c#
128
+
129
+ using UnityEngine;
130
+
131
+
132
+
133
+ public class InputRaycaster : MonoBehaviour
134
+
135
+ {
136
+
137
+ void Start()
138
+
139
+ {
140
+
141
+ }
142
+
143
+
144
+
145
+ void Update()
146
+
147
+ {
148
+
149
+ // マウスボタンが押されたらレイキャストします
150
+
151
+ if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1))
152
+
153
+ Raycast();
154
+
155
+ }
156
+
157
+
158
+
159
+ void Raycast()
160
+
161
+ {
162
+
163
+ // メインカメラ上のマウスカーソルのある位置からRayを飛ばす
164
+
165
+ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
166
+
167
+ RaycastHit hit;
168
+
169
+
170
+
171
+ if (Physics.Raycast(ray, out hit, Mathf.Infinity))
172
+
173
+ {
174
+
175
+ var target = hit.collider.gameObject;
176
+
177
+
178
+
179
+ // Debug: Rayが当たるオブジェクトがあった場合はそのオブジェクト名をログに表示
180
+
181
+ Debug.Log(target.name);
182
+
183
+
184
+
185
+ // レイキャストの衝突対象が、入力を受け付けるインターフェースを持っていればヒット判定を出します。
186
+
187
+ var hitReciever = target.GetComponent<IHitReceiver>();
188
+
189
+ if (hitReciever != null)
190
+
191
+ hitReciever.OnHit();
192
+
193
+ }
194
+
195
+ }
196
+
197
+ }
198
+
199
+ ```

3

あるべき姿について追記しました。

2018/10/20 14:48

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,8 @@
1
1
  「クリックした地点からカメラの向きに沿ったレイを飛ばし、それが当たったCubeの色を変える」という仕組みが必要です。
2
+
3
+
4
+
5
+ といっても、手習いとしてはそれでいいのですが、本来であればもう少し工夫したほうがよいかもしれません。「オブジェクト自身に自分の色を変えるという関数を持たせておき、レイが当たったらその関数を呼び出す」という作りにしたほうが多くの場合自然です。
2
6
 
3
7
 
4
8
 

2

xxx

2018/10/19 04:49

投稿

退会済みユーザー
test CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
 
4
4
 
5
- ちなみに、ちょっと関係ないかもしれませんが、おすすめのチュートリアルです。公式にいろいろあります
5
+ ちなみに、ちょっと関係ないかもしれませんが、おすすめのチュートリアルを紹介します([Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)
6
6
 
7
- ビデオ英語でがその下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
7
+ )。その他、公式にいろいろあります。ビデオ英語なの面食らうかもしれませんその下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
8
-
9
- [Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)

1

チュートリアル情報を追加しました。

2018/10/19 04:43

投稿

退会済みユーザー
test CHANGED
@@ -1 +1,9 @@
1
1
  「クリックした地点からカメラの向きに沿ったレイを飛ばし、それが当たったCubeの色を変える」という仕組みが必要です。
2
+
3
+
4
+
5
+ ちなみに、ちょっと関係ないかもしれませんが、おすすめのチュートリアルです。公式にいろいろあります。
6
+
7
+ ビデオは英語ですがその下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
8
+
9
+ [Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)