回答編集履歴

5 追記

退会済みユーザー

退会済みユーザー

2018/10/24 20:47  投稿

「クリックした地点からカメラの向きに沿ったレイを飛ばし、それが当たったCubeの色を変える」という仕組みが必要です。
といっても、手習いとしてはそれでいいのですが、本来であればもう少し工夫したほうがよいかもしれません。「オブジェクト自身に自分の色を変えるという関数を持たせておき、レイが当たったらその関数を呼び出す」という作りにしたほうが多くの場合自然です。
ちなみに、ちょっと関係ないかもしれませんが、おすすめのチュートリアルを紹介します([Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)
)。その他、公式にいろいろあります。ビデオが英語なので面食らうかもしれませんが、その下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
*追記*
### 追記(訂正)
ものすごくいまさらですが、追記分を訂正します。
わざわざ自分でRaycasterをC#で用意しなくても、次のような仕組みがあるようです。(https://qiita.com/JunShimura/items/4547563fbb2691f40626)
~~*追記*~~
久しぶりにUnityを触りたくなったので、コードも用意してみました。
[こちら](https://answers.unity.com/questions/1252688/how-to-activate-ontriggerenter-when-player-ray-hit.html)も参考にしました。
######Ken.cs
各Cubeに割り当ててください。色はインスペクターで設定してください。
```C#
using UnityEngine;
public class Ken : MonoBehaviour, IHitReceiver
{
   // Inspectorで色を設定してください
   public Color OriginalColor;
   public Color OtherColor;
   Material Material;
   void Start()
   {
       // マテリアルをあらかじめ取得します
       this.Material = this.GetComponent<Renderer>().material;
       // 色を設定します
       this.Material.color = OriginalColor;
   }
   void Update()
   {
   }
   public void OnHit()
   {
       // 色を変えます
       if (Input.GetMouseButtonDown(0))
           this.Material.color = this.OtherColor;
       // 色を元に戻します
       else if (Input.GetMouseButtonDown(1))
           this.Material.color = this.OriginalColor;
   }
}
```
######IHitReceiver.cs
これはファイルを用意するだけで、ゲームオブジェクトには割り当てません。
Ken.csと同じフォルダに放り込んでください。
```c#
namespace Assets
{
   interface IHitReceiver
   {
       void OnHit();
   }
}
```
######InputRaycaster.cs
カメラに割り当ててください。
```c#
using UnityEngine;
public class InputRaycaster : MonoBehaviour
{
   void Start()
   {
   }
   void Update()
   {
       // マウスボタンが押されたらレイキャストします
       if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1))
           Raycast();
   }
   void Raycast()
   {
       // メインカメラ上のマウスカーソルのある位置からRayを飛ばす
       Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
       RaycastHit hit;
       if (Physics.Raycast(ray, out hit, Mathf.Infinity))
       {
           var target = hit.collider.gameObject;
           // Debug: Rayが当たるオブジェクトがあった場合はそのオブジェクト名をログに表示
           Debug.Log(target.name);
           // レイキャストの衝突対象が、入力を受け付けるインターフェースを持っていればヒット判定を出します。
           var hitReciever = target.GetComponent<IHitReceiver>();
           if (hitReciever != null)
               hitReciever.OnHit();
       }
   }
}
```
4 久しぶりにUnityを触りたくなったので、コードも用意してみました。

退会済みユーザー

退会済みユーザー

2018/10/20 23:48  投稿

「クリックした地点からカメラの向きに沿ったレイを飛ばし、それが当たったCubeの色を変える」という仕組みが必要です。
といっても、手習いとしてはそれでいいのですが、本来であればもう少し工夫したほうがよいかもしれません。「オブジェクト自身に自分の色を変えるという関数を持たせておき、レイが当たったらその関数を呼び出す」という作りにしたほうが多くの場合自然です。
ちなみに、ちょっと関係ないかもしれませんが、おすすめのチュートリアルを紹介します([Survival Shooter tutorial](https://unity3d.com/jp/learn/tutorials/s/survival-shooter-tutorial)
)。その他、公式にいろいろあります。ビデオが英語なので面食らうかもしれませんが、その下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
)。その他、公式にいろいろあります。ビデオが英語なので面食らうかもしれませんが、その下にスクリプト(台本)が用意されており、例えばChromeだと右クリックで日本語翻訳できます。
*追記*
久しぶりにUnityを触りたくなったので、コードも用意してみました。
[こちら](https://answers.unity.com/questions/1252688/how-to-activate-ontriggerenter-when-player-ray-hit.html)も参考にしました。
######Ken.cs
各Cubeに割り当ててください。色はインスペクターで設定してください。
```C#
using UnityEngine;
public class Ken : MonoBehaviour, IHitReceiver
{
   // Inspectorで色を設定してください
   public Color OriginalColor;
   public Color OtherColor;
   Material Material;
   void Start()
   {
       // マテリアルをあらかじめ取得します
       this.Material = this.GetComponent<Renderer>().material;
       // 色を設定します
       this.Material.color = OriginalColor;
   }
   void Update()
   {
   }
   public void OnHit()
   {
       // 色を変えます
       if (Input.GetMouseButtonDown(0))
           this.Material.color = this.OtherColor;
       // 色を元に戻します
       else if (Input.GetMouseButtonDown(1))
           this.Material.color = this.OriginalColor;
   }
}
```
######IHitReceiver.cs
これはファイルを用意するだけで、ゲームオブジェクトには割り当てません。
Ken.csと同じフォルダに放り込んでください。
```c#
namespace Assets
{
   interface IHitReceiver
   {
       void OnHit();
   }
}
```
######InputRaycaster.cs
カメラに割り当ててください。
```c#
using UnityEngine;
public class InputRaycaster : MonoBehaviour
{
   void Start()
   {
   }
   void Update()
   {
       // マウスボタンが押されたらレイキャストします
       if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1))
           Raycast();
   }
   void Raycast()
   {
       // メインカメラ上のマウスカーソルのある位置からRayを飛ばす
       Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
       RaycastHit hit;
       if (Physics.Raycast(ray, out hit, Mathf.Infinity))
       {
           var target = hit.collider.gameObject;
           // Debug: Rayが当たるオブジェクトがあった場合はそのオブジェクト名をログに表示
           Debug.Log(target.name);
           // レイキャストの衝突対象が、入力を受け付けるインターフェースを持っていればヒット判定を出します。
           var hitReciever = target.GetComponent<IHitReceiver>();
           if (hitReciever != null)
               hitReciever.OnHit();
       }
   }
}
```
3 あるべき姿について追記しました。

退会済みユーザー

退会済みユーザー

2018/10/19 13:49  投稿

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

退会済みユーザー

退会済みユーザー

2018/10/19 13:43  投稿

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

退会済みユーザー

退会済みユーザー

2018/10/19 13:41  投稿

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る