码迷,mamicode.com
首页 > 其他好文 > 详细

【Unity 3D】学习笔记四十:射线

时间:2014-07-23 13:21:46      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:unity   射线   射线碰撞   

射线

射线,类比的理解就是游戏中的子弹。是在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);
	}
	
}
运行后:

bubuko.com,布布扣

上述代码中,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);
	}
}
运行后:

bubuko.com,布布扣

bubuko.com,布布扣

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


【Unity 3D】学习笔记四十:射线

标签:unity   射线   射线碰撞   

原文地址:http://blog.csdn.net/u013289188/article/details/38058247

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!