射线

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

    题解:尼姆博弈,对于1至1000计算SG函数,每次取最小的前继值,SG值异或为0则为P-position. #include <cstdio> #include <cstring&g ...

  2. android LinearLayout和RelativeLayout实现精确布局

    先明确几个概念的区别: padding margin:都是边距的含义,关键问题得明白是什么相对什么的边距padding:是控件的内容相对控件的边缘的边距. margin  :是控件边缘相对父空间的边距 ...

  3. leetCode解题报告5道题(六)

    题目一: Longest Substring Without Repeating Characters Given a string, find the length of the longest s ...

  4. java Script 中的keyCode 和charCode

    其实很长一段时间,我都没有完全弄明白keyCode 和charCode ,自己也认真看过,但是就是理解不透彻,为了防止以后再出现混乱,写篇博客记录一下吧! 首先  在不同的浏览器中,他们有不同的说法哦 ...

  5. ADO.NET(一) 空间 ADO.NET结构 命名空间(车延禄) System.Data—— 所有的一般数据访问类 S(转载)

    ADO.NET(一) 空间   ADO.NET结构 命名空间(车延禄)System.Data—— 所有的一般数据访问类System.Data.Common—— 各个数据提供程序共享(或重写)的类Sys ...

  6. excel条型图示例

    不怎么用这个功能,今天同事问我,研究了半天,有的地方还是有糊涂的地方,网上,书上都介绍的比较少.比如一张表里没有数据内容时,形成表时会有问题.但形成表后,再删除单元格数据,表却没有问题. 有点矛盾.

  7. 抄书(B - 二分查找)

    抄书  (二分查找+贪心) 提示:二分查找一般写成非递归形式 时间复杂度:O(logn) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action? ...

  8. openstack 入门1

    介绍 Rackspace & NASA软件开源项目的组合安装配置复杂基础设施资源的系统管理平台 (网络,计算,存储)个人打井 vs 自来水厂 组件&原理 Horizon -- UI模块 ...

  9. Muduo 网络编程示例之零:前言

    陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/ ...

  10. IT第十天 - String和StringBuffer的比较、编程设计技巧整理、本周总结 ★★★

    IT第十天 上午 String 1.String在进行多次的+扩展时,会严重的降低处理效率,因为String长度是不可变的,在进行+运算改变字符串时,会自动创建很多临时字符串,并不是在原字符串上追加, ...