射线

射线,类比的理解就是游戏中的子弹。是在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。

【Unity 3D】学习笔记四十:射线的更多相关文章

  1. 【Unity 3D】学习笔记四十二:粒子特效

    粒子特效 粒子特效的原理是将若干粒子无规则的组合在一起.来模拟火焰,爆炸.水滴,雾气等效果. 要使用粒子特效首先要创建,在hierarchy视图中点击create--particle system就可 ...

  2. Android学习笔记四十Preference使用

    Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preferenc ...

  3. unity 3D 学习笔记

    1.父对象的初始位置设,即刚开始的空对象的根节点位置应当设置成(0,0,0) 这样设置可以避免以后出现奇怪的坐标. GameObject实际上就是一些组件的容器. unity 使用公用变量原因是,在U ...

  4. JavaScript学习笔记(四十四) 装饰器

    装饰器模式(Decorator) 在装饰器模式中,可以在运行时给一个对象动态的添加额外的功能.当和静态类打交道的时候(static classes),这可能是一个挑战.但在JavaScript中,对象 ...

  5. Unity 3D学习笔记(三)——关于脚本

    在脚本中定义的类成员,如果是公共的话,在脚本与游戏对象绑定之后,是可以在Inspector中编辑的,例如下面这个脚本: using UnityEngine; using System.Collecti ...

  6. VSTO学习笔记(十四)Excel数据透视表与PowerPivot

    原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...

  7. Python学习笔记(十四)

    Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...

  8. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  9. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

随机推荐

  1. HDU 1847 Good Luck in CET-4 Everybody!

    题解:巴什博弈,2^k+1=3N或2^k2=3N,所以3N为P-position,3N+r为N-position. #include <cstdio> int main(){ int n; ...

  2. Python学习入门基础教程(learning Python)--2.2.1 Python下的变量解析

    前文提及过变量代表内存里的某个数据,这个说法有根据么? 这里我们介绍一个python内建(built-in)函数id.我们先看看id函数的帮助文档吧.在python查某个函数的帮助文档很简单,只用he ...

  3. GDAL1.9.1 IN VS2008 C#中的编译及使用

    下载gdal1.9.1到官网:http://www.gdal.org/ GDAL库的简洁.高效深受开发人员的喜爱,很多开源的GIS软件甚至是商业GIS软件都使用了这个库.GDAL使用C++,在Visu ...

  4. 【剑指Offer学习】【面试题36:数组中的逆序对】

    题目:在数组中的两个数字假设前面一个数字大于后面的数字.则这两个数字组成一个逆序对.输入一个数组.求出这个数组中的逆序对的总数. 举例分析 比如在数组{7, 5, 6, 4 中, 一共存在5 个逆序对 ...

  5. .net c# 提交包含文件file 的form表单 获得文件的Stream流

    1.前台html代码 要写一个有id的form,可是不能有runat="server"属性.由于一个页面中,有这个属性的form表单仅仅能有一个. 再要有一个有name的ifram ...

  6. pre标签 首行会自动换行解决方案

    利用pre标签可以 解决文本文档里面的空格及换行在页面上不显示的方案, 自行换行 加 white-space: pre-wrap; word-wrap: break-word; 英文字母换行 word ...

  7. U盘安装Win7系统教程

    U盘安装系统教程: http://wiki.jd.com/knowledge/6699.html

  8. 写一个背景渐变的TextView输入框

    1:在res文件夹下新建一个drawble文件夹,并新建一个背景文件如writebg.xml <?xml version="1.0" encoding="utf-8 ...

  9. Vmware中Ubuntu挂ISO到虚拟光驱

    Ubuntu 下挂ISO到虚拟光驱的方法 https://i.cnblogs.com/EditPosts.aspx?opt=1 如果要ubuntu找到rpm软件包,需要把iso挂载到/media/cd ...

  10. 如何查看.Net源代码vs版本号以及C#项目中各文件的含义

    查看.Net源代码vs版本号以及C#项目中各文件的含义 用记事本打开vs项目的.sln文件. 第2行就是这个源代码包的开发软件vs版本号了 注意了,如果是vs2003的sln文件通常没有这行,可以判断 ...