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

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

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

时间: 2024-11-03 21:38:58

【转】Unity3D 射线Ray实现点击拾取的相关文章

Unity3d 发射射线Ray

Ray Camera.main.ScreenPointToRay(Vector3 pos)   返回一条射线Ray从摄像机到屏幕指定一个点 Ray Camera.main.ViewportPointToRay(Vector3 pos)  返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点 RaycastHit 光线投射碰撞信息 bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layer

unity3d 射线扫描 忽略图层

原地址:http://blog.csdn.net/w88193363/article/details/38331205 函数说明 static RaycastHit2D[] RaycastAll(Vector2origin,Vector2direction,float distance = Mathf.Infinity,int layerMask = DefaultRaycastLayers,float minDepth = -Mathf.Infinity,float maxDepth = Ma

unity3d射线控制移动

看看效果图 代码: 1 using UnityEngine; 2 using System.Collections; 3 4 public class T2 : MonoBehaviour 5 { 6 7 // Use this for initialization 8 void Start() 9 { 10 11 } 12 13 //定义射线 14 Ray ray; 15 RaycastHit hit; 16 //是否移动 17 bool isMove; 18 //移动方向 19 Vector

Unity3D射线检测。

int groundLayerIndex = LayerMask.GetMask (Tags.Ground); Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hitInfo; if(Physics.Raycast (ray, out hitInfo, 200, groundLayerIndex)) { Vector3 target = hitInfo.point; target.y = trans

Unity3D开发之NGUI点击事件穿透响应处理

http://www.xuebuyuan.com/1936292.html 在使用NGUI 开发2D项目的时候,发现了一个问题,就是如果点出一个菜单,然后点击菜单上面的按钮的时候就会使得按钮下面的物品也会触发点击事件(如果有的话), 经过查阅相关资料,发现了一个很方便的处理方法:分层处理.就是把菜单层和游戏显示层分为不同的Layer:比如: 和 然后,在NGUI的UICamera的脚本那里,设定它的事件响应: 这样的话,他就会响应到相应的层了,当然还可以更灵活地去用代码控制设定使用,这里只是一个

【转】Unity3D 入门小技巧——鼠标拾取并移动物体

http://blog.csdn.net/sysujackjiao/article/details/69396274 一.鼠标拾取物体的原理 在Unity3D当中,想要在观察面(Aspect)中拾取物体(有碰撞属性)的方法一般如下: 1.声明一个观察的摄像机.一个从摄像机原点出发的射线Ray以及一个用于检测碰撞的RaycastHit: 2.将射线Ray定义为从摄像机原点出发并且指向当前鼠标所在的坐标(屏幕坐标): 3.定义碰撞RaycastHit为射线Ray与有碰撞属性的物体的碰撞点. 具体代码

【Unity笔记】经典的鼠标点击射线检测碰撞

void Update (){ if(Input.GetMouseButton(0)){ //从摄像机发出到点击坐标的射线 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if(Physics.Raycast(ray,out hitInfo)){ //划出射线,只有在scene视图中才能看到 Debug.DrawLine(ray.origin,hitInfo.point); Game

unity3d点击屏幕选中物体

原文  http://blog.csdn.net/mycwq/article/details/19906335 前些天接触unity3d,想实现点击屏幕选中物体的功能.后来研究了下,实现原理就是检测从屏幕发出的射线与物体发生碰撞,而这个发生碰撞的物体就是你选中的物体. void MobilePick() { if (Input.touchCount != 1 ) return; if (Input.GetTouch(0).phase == TouchPhase.Began) { RaycastH

关于Unity3D中鼠标移动指定物体的解决方案

一.鼠标拾取物体的原理 在Unity3D当中,想要在观察面(Aspect)中拾取物体(有碰撞属性)的方法一般如下: 1.声明一个观察的摄像机.一个从摄像机原点出发的射线Ray以及一个用于检测碰撞的RaycastHit: 2.将射线Ray定义为从摄像机原点出发并且指向当前鼠标所在的坐标(屏幕坐标): 3.定义碰撞RaycastHit为射线Ray与有碰撞属性的物体的碰撞点. 具体代码实现如下(C#代码): using System.Collections; using System.Collecti