最近开发中要用到射线,就在网上搜了一下,写的版本都较老,在新的unity版本中不再可用,今天就Unity3D4.6.3来看看射线的用法:
具体的类及其中的函数在此不做详述,请参见官方文档,下面就开发中可能会经常用到的一个功能来加以叙述:
用鼠标点击游戏物体实现相关事件的触发
注:开发过程中鼠标左键点击事件在手持设备上会自动转化为单点触屏事件
直接上代码:
<span style="font-size:14px;">using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Sample : MonoBehaviour {</span>
<span style="font-size:14px;"> void Update()
{
//鼠标左键点击事件
if (Input.GetMouseButtonDown(0))
{
//获取摄像机到鼠标位置的射线,老版的unity中可在Physics2D.Raycast()中直接使用该射线,4.6.3已不支持
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//通过刚才获得的射线获取相应初始点和方向
Vector2 origin = new Vector2(ray.origin.x, ray.origin.y);
Vector2 direction = new Vector2(ray.direction.x, ray.direction.y);
//获取2D射线碰撞物体,老版返回值为bool型,通过out关键字输出碰撞物体,新版返回值即为碰撞物体
RaycastHit2D hit = Physics2D.Raycast(origin, direction);
if (hit != null)
{
//碰撞物体辨别
if (hit.collider == gameObject.collider2D)
{
Debug.Log("Raycast the gameobject success!");
}
}
}
}
}</span>
将脚本绑定到一个2D物体上运行即可,注意物体必须在摄像机可见范围内,否则射线检测不到!