要点
和3D物体的碰撞一样,都要遵循【主动运行的物体,必须添加刚体;两个物体其中一个,必须勾选“isTrigger”】的原则。可以完全把要碰撞的两个图片当做3D物体,添加相应组件以及代码,但“图片”毕竟是二维物体,宜用2D的组件进行碰撞,且代码也要用2D的方法。(之上“2D组件”包括:BoxCollider2D、Rigidbody2D;“2D方法”是指“private void OnTriggerEnter2D(Collider2D other){}”),要特别注意的是对Rigidbody2D组件的调整:正常添加,BodyType类型是Dynamic,Mass是1,即使把Mass调成0,它仍然显示0.0001——这样会导致图片缓慢下落,因此,需要把BodyType选为Kinematic。
情景
图片ImageA加拖拽代码,被鼠标拖着去碰ImageB,碰撞函数打印“碰到了《我的照片》”
步骤
1、主动运行的ImageA,添加刚体Rigidbody2D,并调整其BodyType为Kinematic;两张图片,都添加BoxCollider2D,并勾选其中一张的IsTrigger,(注意新加上的BoxCollider2D是一个绿点儿,没有尺寸,需调整大小)
ImageA
ImageB(本次是勾选的ImageA BoxCollider2D组件的IsTrigger)
2、给ImageA加拖拽脚本、碰撞检测脚本
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class DragTexture : MonoBehaviour, IDragHandler
{
public void OnDrag(PointerEventData eventData)
{
SetDraggedPosition(eventData);
}
private void SetDraggedPosition(PointerEventData eventData)
{
var rt = gameObject.GetComponent<RectTransform>();
Vector3 globalMousePos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(rt, eventData.position, eventData.pressEventCamera, out globalMousePos))
{
rt.position = globalMousePos;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ColliderTest_BoxCollider2D : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D other)
{
Debug.Log("碰到了《 我的照片》");
}
}