先に回答した「回答1」はRaycast
を使う方法です。後に「回答2」にEventSystem
を使う方法を追加しました。どちらでも動かせます。
#回答1
EventTrigger
ではなくRayCast
を使う方法ですが、参考まで。
部位をクリックしてDebug.Logに出力しています。アニメーションの処理に置き換えてください。
1. 部位にコライダーとタグを設定する
ユニティちゃんのモデルは Character1_Reference
以下にボーンが設定されています。
クリックしたい部位に空のゲームオブジェクトをアタッチして、コライダー(IsTrigger)と識別用のタグをセットしておきます。コライダーは位置と大きさを調整してください。
下図では左手の箇所に設定しています。
2. スクリプトを作る
以下のようなスクリプトを作り、適当なオブジェクトにアタッチしておきます。
C#
1using System.Collections;
2using System.Collections.Generic;
3using UnityEngine;
4
5public class ClickObject : MonoBehaviour
6{
7 private void Update ()
8 {
9 // マウスの左クリック
10 if ( Input.GetMouseButtonDown ( 0 ) )
11 {
12 // カメラからマウス位置へのRay
13 var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
14
15 // Rayがヒットしたら処理を行う
16 if ( Physics.Raycast ( ray, out var hit, maxDistance: 100f ) )
17 {
18 // ヒットしたコライダーのタグをチェック
19 if ( hit.collider.CompareTag ( "Hidarite" ) )
20 {
21 Debug.Log ( "左手をクリックした" );
22 }
23 }
24 }
25 }
26}
以上です。左手部分のコライダーをクリックするとDebug.Logに出力されます。
同じようにして各部位をクリックしたときの処理を追加してください。
#回答2
EventSystem
を使う方法も追記しておきます。
1.カメラに PhysicsRaycaster
コンポーネントをアタッチする
2. EventSystem オブジェクトを追加する
UI > Event System
を追加する
3. 部位にコライダーを設定する
回答1と同じ。タグはスクリプトで使用しないなら不要。
4. 部位にスクリプトを設定する
部位ごとに以下のようなスクリプトをアタッチする。部位ごとに具体的な処理を書く。
C#
1using UnityEngine;
2using UnityEngine.EventSystems;
3
4public class OnClicked : MonoBehaviour, IPointerClickHandler
5{
6 public void OnPointerClick ( PointerEventData eventData )
7 {
8 Debug.Log ( "Clicked" );
9 }
10}
以上です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/14 21:24