射线是从一个点向另外一个点发生的一条线,一旦与其他模型发生碰撞,它将停止发射。注意这条线是逻辑上的,界面上看不到。一般使用射线判断是否发射至某个游戏对象上或者获得鼠标点击的游戏对象等。
射线是从摄像机发出的。
关键代码:
//定义射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//射线透射
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
print("射线碰到的物体是:" + hit.collider.name);
//_VecRemoteRayPosition = hit.point;
}
现在用一个简单的sample来介绍射线的使用。
1.首先建立场景,如图所示。该Demo实现了点击鼠标新建球体发射,需要检测鼠标点击的位置并发射射线。
2.新建脚本,射线检测,实例化球体。
实现代码如下:
using UnityEngine;
using System.Collections;
//射线学习
public class TestRaycast2 : MonoBehaviour
{
private Vector3 _VecRemoteRayPosition; //射线点位置
private GameObject GoBullet; //子弹
// Update is called once per frame
void Update()
{
//定义射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//射线透射
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
//print("射线碰到的物体是:" + hit.collider.name);
_VecRemoteRayPosition = hit.point;
}
//鼠标点击射击
if (Input.GetMouseButtonDown(0))
{ //创建子弹
GoBullet = GameObject.CreatePrimitive(PrimitiveType.Sphere);
GoBullet.renderer.material.color = Color.red;
//给子弹定义方位
GoBullet.transform.position = Camera.main.transform.position;
//给子弹添加刚体
GoBullet.AddComponent<Rigidbody>();
//给子弹添加冲击力
GoBullet.rigidbody.AddForce((_VecRemoteRayPosition -
GoBullet.transform.position) * 15, ForceMode.Impulse);
}
}
}
3.运行效果:
红色的球即是新建的球,根据鼠标点击位置以及射线检测。
点击鼠标,就能新建实例化球体向前发射,这就实现了射线的使用。