• 【转】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>  


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

     

         

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

  • 相关阅读:
    Maven的使用--Eclipse在线安装Maven插件m2e
    Maven的使用--安装
    oracle 函数
    oracle dblink使用
    【JVM】应用CPU冲高问题
    【Git】git操作(转)
    【java】判断两个对象是否相等
    【JDK】JDK自带工具应用——堆分析
    【script】Github上的工具脚本useful-scripts
    【JWT】JWT实现用户认证(转)
  • 原文地址:https://www.cnblogs.com/mimime/p/6765084.html
Copyright © 2020-2023  润新知