射线

射线,类比的理解就是游戏中的子弹。是在3D世界里中一个点向一个方向发射的一条无终点的线。在发射的过程中,一旦与其它对象发生碰撞,就停止发射。

射线的原理

创建一个射线时,首先须要知道射线的起点和终点在3D世界里的坐标。

using UnityEngine;
using System.Collections; public class Script_06_08 : MonoBehaviour { void Update()
{
//创建射线,从零点发射到对象
Ray ray = new Ray(Vector3.zero, transform.position);
//计算射线的起点和终点
RaycastHit hit;
Physics.Raycast(ray, out hit, 100);
//使用调试方法绘制这条线(调试方法记载scene视图中存在)
Debug.DrawLine(ray.origin, hit.point);
} }

执行后:

上述代码中,Debug.DrawLine(  )方法仅仅有在scene视图中才干看到。假设想将射线绘制在游戏中,须要使用GL图形库或者LineRenderer方法。

碰撞监測

射线是能够用来推断与游戏其它对象的碰撞,如这样例,以摄像机的位置为原点,向鼠标移动点发射一条射线。就好比向靶心打了一枪,来推断是否打中。

using UnityEngine;
using System.Collections; public class Script_06_09 : MonoBehaviour { //靶心贴图
public Texture texture;
//提示信息
private string info; void Update()
{
//创建从摄像机位置到鼠标位置之间的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; //推断该射线是否打中游戏对象
if(Physics.Raycast(ray, out hit))
{
info ="打中靶心";
}else
{
info ="未打中靶心";
} } void OnGUI()
{
//计算准心贴图的坐标
Rect rect = new Rect(Input.mousePosition.x -(texture.width >>1 ) ,Screen.height - Input.mousePosition.y - (texture.height >> 1),texture.width,texture.height);
//绘制准心贴图
GUI.DrawTexture(rect,texture);
//输入打靶子的信息
GUILayout.Label(info + ",打中的坐标为:"+Input.mousePosition);
}
}

执行后:

上述代码使用Camera.main.ScreenPointToRay方法来穿件一条由摄像机向鼠标当前位置发射的射线,然后使用Physics.Raycast推断这条射线是否与某游戏相交,相交返回true,否者返回false。

最新文章

  1. C#Light(包括unity一切C#环境可用嵌入式脚本)0.10B稳定版发布,功能已定型
  2. arc如何破循环或交叉引用
  3. CENTOS修改主机名
  4. 20135202闫佳歆--week 8 实验:理解进程调度时机跟踪分析进程调度与进程切换的过程--实验及总结
  5. [收藏转贴]WCFRESTFul服务搭建及实现增删改查
  6. gmail
  7. Codeforces Round #206 (Div. 2)
  8. 2014联合三所学校 (HDU 4888 HDU 4891 HDU 4893)
  9. blur事件
  10. Linux 小知识翻译 - 「RFC」
  11. Bing.com在.NET Core 2.1上运行!
  12. spark、standalone集群 (1)
  13. Sqoop 使用详解(内含对官方文档的解析)
  14. Quartz.net入门
  15. Google Maps V3 之 路线服务
  16. 43-2-CAN协议
  17. XML文件怎么添加注释
  18. Redis实现分布式锁原理与实现分析
  19. 关于RestFul API 介绍与实践
  20. html如何让label在div中的垂直方向居中显示?

热门文章

  1. [转载]cin、cin.get()、cin.getline()、getline()、gets()函数的用法
  2. 黄聪:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
  3. CSS样式中ClearBoth的理解
  4. Web开发者的10个最好的云开发环境
  5. linker command failed with exit code 1 (use -v to see invocation),经典Xcode编译错误的出现和解决!
  6. 【转载】国内网站博客数据统计选免费Google Analytics还是百度统计
  7. 在Visual Studio 2010中安装iGraph
  8. Unable to connect to your virtual device!解决方法
  9. 数据切分——Mysql分区表的管理与维护
  10. java学习之tcp与udp的实现