射线

射线,类比的理解就是游戏中的子弹。是在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. poj 3264 Balanced Lineup(线段树、RMQ)

    题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...

  2. robomongo

    Robomongo 是一个可视化的mongodb数据库工具,提供对mongodb的操作,javascript执行及语法高亮提示. 安装教程

  3. Special Subsequence(离散化线段树+dp)

    Special Subsequence Time Limit: 5 Seconds      Memory Limit: 32768 KB There a sequence S with n inte ...

  4. 【科研论文】基于文件解析的飞行器模拟系统软件设计(应用W5300)

    摘要: 飞行器模拟系统是复杂飞行器研制和使用过程中的重要设备,它可以用来模拟真实飞行器的输入输出接口,产生与真实系统一致的模拟数据,从而有效避免因使用真实飞行器带来的高风险,极大提高地面测发控系统的研 ...

  5. Ext JS学习第五天 Ext_window组件(二)

    此文用来记录学习笔记 •上一讲我们已经学过了window的使用,那么在这将中,我们将结合然后把Ext中需要注意的地方,以及组建的使用给予介绍.indow做几个Web开发的经典示例. •ExtWeb实战 ...

  6. 无法编辑的word解密

    打开文档后,将其另存为XML文件,然后用UltraEdit(或者EditPlus,下载华军里搜索一下就行了)这个编辑软件打开刚刚存储的 XLM文件,查找<w:documentProtection ...

  7. Eclipse安装反编译插件JD(Java Decompiler)

    JD安装说明:*****Eclipse 插件安装*****1. 在网上搜索并下载jdeclipse_update_site.zip2. Eclipse -> Install New Softwa ...

  8. Ownership qualifiers of Objective-C: In Details

    虽然这里讲的大部分知识以前都看过,但是时不时出现某些点让我如茅塞顿开: 以前经常会忘记一些细节,这篇文章可以更好的理解细节,巩固知识体系. Ownership qualifiers In Object ...

  9. js中的typeof

    typeof的几种返回结果的分类: 转自:http://www.360doc.com/content/14/0718/15/8790037_395279403.shtml typeof运算符介 绍:t ...

  10. java集群

    java集群 分类: java学习2011-05-12 09:12 7531人阅读 评论(9) 收藏 举报 java服务器负载均衡ejb集群数据库 序言 越来越多的关键应用运行在J2EE(Java 2 ...