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

回答編集履歴

5

追記

2018/10/24 11:47

投稿

退会済みユーザー
answer CHANGED
@@ -5,8 +5,12 @@
5
5
  ちなみに、ちょっと関係ないかもしれませんが、おすすめのチュートリアルを紹介します([Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)
6
6
  )。その他、公式にいろいろあります。ビデオが英語なので面食らうかもしれませんが、その下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
7
7
 
8
- *追記*
8
+ ### 追記(訂正)
9
+ ものすごくいまさらですが、追記分を訂正します。
10
+ わざわざ自分でRaycasterをC#で用意しなくても、次のような仕組みがあるようです。(https://qiita.com/JunShimura/items/4547563fbb2691f40626)
9
11
 
12
+ ~~*追記*~~
13
+
10
14
  久しぶりにUnityを触りたくなったので、コードも用意してみました。
11
15
  [こちら](https://answers.unity.com/questions/1252688/how-to-activate-ontriggerenter-when-player-ray-hit.html)も参考にしました。
12
16
 

4

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

2018/10/24 11:47

投稿

退会済みユーザー
answer CHANGED
@@ -3,4 +3,98 @@
3
3
  といっても、手習いとしてはそれでいいのですが、本来であればもう少し工夫したほうがよいかもしれません。「オブジェクト自身に自分の色を変えるという関数を持たせておき、レイが当たったらその関数を呼び出す」という作りにしたほうが多くの場合自然です。
4
4
 
5
5
  ちなみに、ちょっと関係ないかもしれませんが、おすすめのチュートリアルを紹介します([Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)
6
- )。その他、公式にいろいろあります。ビデオが英語なので面食らうかもしれませんが、その下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
6
+ )。その他、公式にいろいろあります。ビデオが英語なので面食らうかもしれませんが、その下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
7
+
8
+ *追記*
9
+
10
+ 久しぶりにUnityを触りたくなったので、コードも用意してみました。
11
+ [こちら](https://answers.unity.com/questions/1252688/how-to-activate-ontriggerenter-when-player-ray-hit.html)も参考にしました。
12
+
13
+ ######Ken.cs
14
+ 各Cubeに割り当ててください。色はインスペクターで設定してください。
15
+ ```C#
16
+ using UnityEngine;
17
+
18
+ public class Ken : MonoBehaviour, IHitReceiver
19
+ {
20
+ // Inspectorで色を設定してください
21
+ public Color OriginalColor;
22
+ public Color OtherColor;
23
+ Material Material;
24
+
25
+ void Start()
26
+ {
27
+ // マテリアルをあらかじめ取得します
28
+ this.Material = this.GetComponent<Renderer>().material;
29
+ // 色を設定します
30
+ this.Material.color = OriginalColor;
31
+ }
32
+
33
+ void Update()
34
+ {
35
+ }
36
+
37
+ public void OnHit()
38
+ {
39
+ // 色を変えます
40
+ if (Input.GetMouseButtonDown(0))
41
+ this.Material.color = this.OtherColor;
42
+ // 色を元に戻します
43
+ else if (Input.GetMouseButtonDown(1))
44
+ this.Material.color = this.OriginalColor;
45
+ }
46
+ }
47
+ ```
48
+
49
+ ######IHitReceiver.cs
50
+ これはファイルを用意するだけで、ゲームオブジェクトには割り当てません。
51
+ Ken.csと同じフォルダに放り込んでください。
52
+ ```c#
53
+ namespace Assets
54
+ {
55
+ interface IHitReceiver
56
+ {
57
+ void OnHit();
58
+ }
59
+ }
60
+ ```
61
+
62
+ ######InputRaycaster.cs
63
+ カメラに割り当ててください。
64
+ ```c#
65
+ using UnityEngine;
66
+
67
+ public class InputRaycaster : MonoBehaviour
68
+ {
69
+ void Start()
70
+ {
71
+ }
72
+
73
+ void Update()
74
+ {
75
+ // マウスボタンが押されたらレイキャストします
76
+ if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1))
77
+ Raycast();
78
+ }
79
+
80
+ void Raycast()
81
+ {
82
+ // メインカメラ上のマウスカーソルのある位置からRayを飛ばす
83
+ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
84
+ RaycastHit hit;
85
+
86
+ if (Physics.Raycast(ray, out hit, Mathf.Infinity))
87
+ {
88
+ var target = hit.collider.gameObject;
89
+
90
+ // Debug: Rayが当たるオブジェクトがあった場合はそのオブジェクト名をログに表示
91
+ Debug.Log(target.name);
92
+
93
+ // レイキャストの衝突対象が、入力を受け付けるインターフェースを持っていればヒット判定を出します。
94
+ var hitReciever = target.GetComponent<IHitReceiver>();
95
+ if (hitReciever != null)
96
+ hitReciever.OnHit();
97
+ }
98
+ }
99
+ }
100
+ ```

3

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

2018/10/20 14:48

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,6 @@
1
1
  「クリックした地点からカメラの向きに沿ったレイを飛ばし、それが当たったCubeの色を変える」という仕組みが必要です。
2
2
 
3
+ といっても、手習いとしてはそれでいいのですが、本来であればもう少し工夫したほうがよいかもしれません。「オブジェクト自身に自分の色を変えるという関数を持たせておき、レイが当たったらその関数を呼び出す」という作りにしたほうが多くの場合自然です。
4
+
3
5
  ちなみに、ちょっと関係ないかもしれませんが、おすすめのチュートリアルを紹介します([Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)
4
6
  )。その他、公式にいろいろあります。ビデオが英語なので面食らうかもしれませんが、その下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。

2

xxx

2018/10/19 04:49

投稿

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

1

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

2018/10/19 04:43

投稿

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