【转】Unity3D 射线Ray实现点击拾取

        游戏中经常会有鼠标移动到某个对象上来拾取它的功能,我们可以用Unity3D中的射线Ray实现这一效果。原理是在我们鼠标的位置,从屏幕射出一条射向世界空间的射线,当这条射线碰撞到我们需要拾取的对象时,我们就销毁对象,把它添加到我们的背包中。

         我们来做一个简单的Demo,我们在场景中添加一个方块Cube,一个小球Sphere,当我们鼠标放在方块上时没有任何反应,而当我们把鼠标放在小球上时,小球会消失。

        新建一个项目,我们命名为“RayTest”,然后在场景中新建一个小球,方块,和添加灯光,最终结果如图所示:

                

         新建一个C#脚本文件,重命名为“rayScript”,具体代码如下所示:

 

[csharp] view plain copy
 
  1. <span style="font-family:Microsoft YaHei;font-size:14px;">using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class rayScript : MonoBehaviour {  
  5.   
  6.     // Use this for initialization  
  7.     void Start () {  
  8.       
  9.     }  
  10.       
  11.     // Update is called once per frame  
  12.     void Update () {  
  13.   
  14.         //创建一条射线,产生的射线是在世界空间中,从相机的近裁剪面开始并穿过屏幕position(x,y)像素坐标(position.z被忽略)  
  15.         Ray ray = camera.ScreenPointToRay(Input.mousePosition);  
  16.         //RaycastHit是一个结构体对象,用来储存射线返回的信息  
  17.         RaycastHit hit;  
  18.         //如果射线碰撞到对象,把返回信息储存到hit中  
  19.         if (Physics.Raycast(ray, out hit))  
  20.         {  
  21.             //如果碰撞的对象是小球,则销毁它  
  22.             if (hit.transform.gameObject.name == "Sphere")  
  23.             {  
  24.                 Destroy(hit.transform.gameObject);  
  25.             }  
  26.         }  
  27.     }  
  28. }</span>  


        运行,我们可以看到当鼠标放在小球上时,小球消失了。

 

     

附上项目源码下载地址:点此下载

原文地址:https://www.cnblogs.com/mimime/p/6765084.html