転載:クリックイベントのアプリケーション

 

オリジナル住所:のhttp://blog.sina.com.cn/s/blog_c3e21e750102yfnm.html

Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

 
タグ: 

それ

カテゴリー:  ユニティ
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

Unity3D - マウスクリックイベントを追加するには、シーン内の3Dオブジェクトは、
オブジェクトをクリックする3Dマウスは本質的には、ユニティをトリガするために、2があります:1は1がオブジェクト(線)の判断を通過する放射線によって誘発され、トリガされたイベント(イベント)を介してです。これらの2つの原則に関係なく、彼らがトリガすることができます前に、トリガが異なる原理、トリガーが同じではありません要件、3つの異なる方法の以下の詳細な説明から、満たさなければならないものを、違いはありませんトリガされます。
 
Unityバージョン5.6.2fユニティAPIバージョン2019.1 
 
 
まず、イベントを通じて、インタフェースを実装IPointerClickHandler 
最初のインターフェイスIPointerClickHandlerは、他のインタフェースを実現することができるものを下に見て、この木の関係はUnityEngine.EventSystems.Interfaces.IPointerClickHandlerあり、理解します
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト
IPointerClickHandlerここで使用する例としては、(APIで説明します):
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト
後に実施OnPointerClick、この方法をクリックして操作した後の処理で、私たちのクラスにクリックされたインタフェースを実装しています。
 
それはイベントがあるので、すべての最初は、イベントトリガの要件を満たしています。
 
1.シーンカメラにPhysicsRaycasterスクリプトを追加します。
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

 
操作2に示すように、シーンにEventSystemシステムイベントを追加します。
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

図は、デフォルトの追加]をクリックした後に表示されます...:
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

3.ここでの焦点は、設定は、オブジェクト(3D)オブジェクトをクリックしてフリップフロップ(衝突)を持参して、クリックされたオブジェクトに掛かってスクリプトをクリックしてくださいです。
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

到这里,需要我们开发的只有一个脚本,Demo里的EventClick.cs 
 
 
using UnityEngine;
using UnityEngine.EventSystems;
 
public class EventClick : MonoBehaviour,IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        print("点击了::"+this.name);
    }
}
 
运行点击cube:
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

 
二、通过事件,附加脚本EventTrigger
 
这里也是同过事件来实现的,也要按照 一 里满足事件触发的要求(不懂!往上翻看下):
1.给场景中的Camera添加PhysicsRaycaster脚本。
2.在场景中添加事件系统EventSystem;
完成以上两步后,3就和一里的不一样了。
3.这里有两种做法,分别是3.1 和 3.2 ,只是在用法上不同,原理是一样的。
首先给被点击的物体添加EventTrigger脚本。
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

3.1,是静态添加事件触发
给EventTrigger添加事件类型,根据需要选择,
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

Demo里选择点击事件PointerClick
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

给PointerClick添加触发后执行函数
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

这里的执行函数,是下面我们开发的类ClickEventTrigger.cs,把这个脚本添加到被点击的物体上即可。
 
 
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
 
public class ClickEventTrigger : MonoBehaviour 
{
public void OnClick()
    {
        print("MyOnClick 点击了::"+this.name);
    }
}
 
到这里,静态添加事件就完成了,运行效果:
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

3.2,是动态添加事件触发
动态触发,在Unity编辑器中操作就方便多了,只需要在被点击物体上添加EventTrigger就可以了,然后再把我们的脚本ClickEventTrigger.cs添加到被点击物体上,剩下的都在代码中完成。
 
 
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
 
public class ClickEventTrigger : MonoBehaviour {
 
// Use this for initialization
void Start () {
 
        //获取或添加EventTrigger组件
        EventTrigger trigger = transform.GetComponent();
        if (trigger == null)
        {
            trigger = transform.gameObject.AddComponent();
        }
        //初始化EventTrigger.Entry的数组 如果这里初始化了事件触发数组,那么在ide静态添加的事件会丢失
        //trigger.triggers = new List();
        //创建各种 EventTrigger.Entry的类型
        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = EventTriggerType.PointerEnter;//设置Entry的eventID类型 即EventTriggerType的各种枚举(比如鼠标点击,滑动,拖动等)
        UnityAction callback = new UnityAction(OnPointerEnter);  //注册代理
        entry.callback.AddListener(callback);//添加代理事件到EventTrigger.Entry
 
        EventTrigger.Entry entry2 = new EventTrigger.Entry();
        entry2.eventID = EventTriggerType.PointerDown;
        UnityAction callback1 = new UnityAction(OnPointerDown);
        entry2.callback.AddListener(callback1);
 
        //在EventTrigger.Entry的数组添加EventTrigger.Entry
        trigger.triggers.Add(entry);
        trigger.triggers.Add(entry2);
    }
 
    private void OnPointerDown(BaseEventData arg0)
    {
        Debug.Log("OnPointerDown");
    }
 
    private void OnPointerEnter(BaseEventData arg0)
    {
        Debug.Log("OnPointerEnter");
    }
}
 
运行结果:
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

三、通过射线,RayCastHitControl
这个方法主要是通过,射线发射,判断射线穿过的物体,根据特定的标志来判断是否点击到了该物体(比如:物体的标签Tag,还有物体的名称)
这里只需要3d物体,并且有明确的唯一标识,再加上我们开发的ClickRayCastHitControl.cs就可以。
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

1.在场景中创建一个物体(Cube),然后点击Inspector面板下Tag - AddTag...- 在Tags列表中,点击+,输入你要添加的Tag名称就可以。创建Tag完成后,回到场景给这个Cube选择刚才创建的Tag。
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

2.在创建一个Cube,demo中起名(BeiJiChaun),这个名字就是射线穿过判断的标识,这个物体就创建完成了。
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

3.创建单独层,挂载我们开发的脚本即可。
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

运行结果:
Unity3D- 3Dは、クリックイベントを追加するためにシーン内のオブジェクト

完整代码:
 
 
using UnityEngine;
 
public class ClickRayCastHitControl : MonoBehaviour {
 
    Ray ray;
    RaycastHit hit;
    GameObject obj;
    // Use this for initialization
    void Start () {
 
}
 
    // Update is called once per frame
    
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("点击鼠标左键");
            ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                Debug.Log(hit.collider.gameObject.name);
                obj = hit.collider.gameObject;
                //通过名字
                if (obj.name.Equals("BeiJiChuan"))
                {
                    Debug.Log("点中" + obj.name);
                }
                //ラベルにより、
                もし(obj.tag == "ClicObj")
                {
                    DEBUG.LOG( "点" + obj.name)。
                }
            }
        }
    }
}
 
 

おすすめ

転載: www.cnblogs.com/zbyglls/p/11356418.html