精华内容
下载资源
问答
  • Unity射线与UI碰撞检测

    2020-11-11 20:48:22
    结合博客,实现了UI与射线的碰撞检测。当枪口对准UI的时候,UI显示边框,点击鼠标左键,触发按钮对应的函数
  • Unity射线

    2021-11-06 09:37:47
    射线 //创建射线,提前给定射线的发射位置和方向 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //Ray ray = camera.ScreenPointToRay(Input.mousePosition); //Ray ray = new Ray(startPosition,...

    射线

    //创建射线,提前给定射线的发射位置和方向
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    //Ray ray = camera.ScreenPointToRay(Input.mousePosition);
    //Ray ray = new Ray(startPosition,endPosition);
    
    //碰撞信息,用于接收碰撞到的物体是谁以及碰撞点的位置和信息
    RaycastHit hit;
    if (Physics.Raycast(ray, out hit))
    	{
    	//真正的发射射线的地方,需要指定发射哪一条射线,并传入一个Out参数,用于接收碰撞信息,返回值为true时表示碰到了物体
    	if (Input.GetMouseButtonDown(0))
    		{
    		Destroy(hit.collider.gameObject);
    		}
        }
    

    射线的击穿

    1.第一种方式

    //第二个参数表示射线射的距离
    RaycastHit[] hits; 
    hits =  Physics.RaycastAll(ray, 100);
    

    2.第二种方式

    
    int layerMask = 1 << 9;
    
    Physics.Raycast(ray, out hit, 100, layerMask)
    

    3.防止射线穿透UI

    //如果当前鼠标在 ui 上返回true 否则返回false
    EventSystem.current.IsPointerOverGameObject()  
    
    展开全文
  • Unity射线销毁

    千次阅读 2021-11-27 09:07:46
    2、点击鼠标左键发射一条100米长的射线,当射线碰撞到游戏对象,游戏对象3秒后消失 public GameObject other; float timer = 3f; void Update() { //2、点击鼠标左键发射一条100米长的射线,当射线碰撞到游戏...

    2、点击鼠标左键发射一条100米长的射线,当射线碰撞到游戏对象,游戏对象3秒后消失

      public GameObject other;
        float timer = 3f;
        void Update()
        {
            //2、点击鼠标左键发射一条100米长的射线,当射线碰撞到游戏对象,游戏对象3秒后消失
            if (Input.GetMouseButtonDown(0))
            {
                //Ray ray = Camera.main.ViewportPointToRay(Input.mousePosition);
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit,100))
                {
                        print("11");
                        Destroy(hit.collider.gameObject,3);    
                }
            }
        }

    展开全文
  • Unity 射线碰撞检测

    2021-11-05 15:33:47
    射线碰撞检测,就是由某一物体发射出一道射线射线碰撞到物体之后,可以得到该物体的相关信息,然后就可以对该物体进行一些操作了。 2 原理 步骤如下: 获取屏幕点击点的位置; 从主摄像机作出射线到屏幕点击点; ...

    1 定义

    射线是在三维世界中从一个点沿一个方向发射的一条无限长的线。在射线的轨迹上,一旦与添加了碰撞器的模型发生碰撞,将停止发射。射线碰撞检测,就是由某一物体发射出一道射线,射线碰撞到物体之后,可以得到该物体的相关信息,然后就可以对该物体进行一些操作了。

    2 原理

    步骤如下:

    1. 获取屏幕点击点的位置;
    2. 从主摄像机作出射线到屏幕点击点;
    3. 使用 RayCast 函数计算。

    3 代码实现

    public class ExampleClass : MonoBehaviour
    {
        //参数hit 为out类型,可得到碰撞检测的返回值;
        RaycastHit hit;
     
        void Update()
        {  
        	//判断是否点击了鼠标左键
    		if (Input.GetMouseButtonDown(0))
    		{
    			//参数ray 为射线碰撞检测的光线(返回一个从相机到屏幕鼠标位置的光线)
    			Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    
    			if (Physics.Raycast(ray, out hit)) //如果碰撞检测到物体
    			{
    				Debug.Log(hit.collider.gameObject.name);//打印鼠标点击到的物体名称
    			}
    		}
        }
    }
    

    4 关键函数

    从摄像头到 position 的射线:public Ray ScreenPointToRay(Vector3 position);
    检测在这个射线中碰撞的函数 Physics.Raycast(有16个重载),下面列举一些:

    public static bool Raycast(Ray ray, out RaycastHit hitInfo);
    
    public static bool Raycast(Ray ray, float distance, int layerMask);
    
    public static bool Raycast(Ray ray, out RaycastHit hitInfo, float distance, int layerMask);
    
    public static bool Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask);
    
    public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float distance, int layerMask );
    
    • 参数 ray 为射线碰撞检测的光线。
    • 参数 hitInfo 为 out 类型,可得到碰撞检测的返回值。
    • 参数 distance 为碰撞检测的射线长度。
    • 参数 layerMask 在指定层上碰撞检测。
    • 参数 origin 是在世界坐标,射线的起始点。
    • 参数 direction 是射线的方向。

    返回值:bool,如果碰撞检测成功就返回1,否则为0。

    展开全文
  • Unity 射线测距以及网格变形

    热门讨论 2021-02-08 14:46:37
    Unity 射线测距以及网格变形射线测距以及网格变形 代码很简单没有难度,自己看一下应该就能明白。 OK 老规矩,直接上代码: 射线测距以及网格变形 using System.Collections; using System.Collections.Generic; ...

    Unity 射线测距以及网格变形


    代码很简单没有难度,自己看一下应该就能明白。
    OK 老规矩,直接上代码:

    射线测距以及网格变形

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    /// <summary>
    /// 网格变形器输入 & GL  距离绘制
    ///  
    /// </summary>
    
    public class MeshDeformerInput_ZH : MonoBehaviour
    {
    
        //GL 起始  结束点
        private Vector3 _Target, _End;
    
    	//距离
    	private float _Distance = 0;
    	//距离文字
    	private string _DistanceStr = "";
    
    	//点击计数
    	private int _Number = 1;
    
    	[Header("GUI 线段")]
    	public Color _ColorGUI;
    	[Header ("GUI 文字")]
    	public Color _ColorStr;
    
    	void Update()
    	{
    		if (Input.GetMouseButtonDown(1))
    		{
    			_Number++;
    
    			Ray _GLRay = Camera.main.ScreenPointToRay(Input.mousePosition);
    			RaycastHit _GLHit;
    			if (Physics.Raycast(_GLRay, out _GLHit))
    			{
    				if (_GLHit.transform.tag == "Crash")
    				{
    					_Target = _GLHit.point;
    
    					if (_Number == 2)
    					{
    						Ray _DistanceRay = Camera.main.ScreenPointToRay(Input.mousePosition);
    						///射线碰到了物体,hit为鼠标碰到的物体,hit1是从该物体发出的射线碰撞到的物体
    						RaycastHit _Hit1;
    						if (Physics.Raycast(_DistanceRay, out _Hit1))
    						{
    							_End = _Hit1.point;
    
    							Debug.DrawLine(_Target, _End);
    
    							_Number = 0;
    						}
    					}
    				}
    			}
    
    			//防止越界
    			if (_Number > 2)
    			{
    				_Number = 1;
    			}
    			print(_Number);
    		}
    	}
    
    
    
    	/// <summary>
    	/// GL  绘制
    	/// </summary>
    	private void GLDrawLine(Vector3 _Target, Vector3 _End)
    	{
    
    		//返回这个向量的长度(只读)
    		_Distance = (_End - _Target).magnitude;
    
    		//如果距离不等于0
    		if (_Distance != 0.0)
    		{
    			//显示位置
    			_DistanceStr = _Distance.ToString("f2") + "M";
    
    			//GL 绘制类型 (线段)
    			GL.Begin(GL.LINE_STRIP);
    			//线段颜色
    			GL.Color(_ColorGUI);
    			//开始位置
    			GL.Vertex3(_Target.x, _Target.y, _Target.z);
    			//结束位置
    			GL.Vertex3(_End.x, _End.y, _End.z);
    			//绘制结束
    			GL.End();
    		}
    	}
    
    
    	public float _SizeVector2;
    
    	/// <summary>
    	/// GUI  文字显示
    	/// </summary>
    
    	private void GUIStr(string _DistanceStr)
        {
            //如果距离文字不为空
            if (_DistanceStr != "")
            {
                //世界空间位置
                Vector3 _WorldPosition = new Vector3(((_Target + _End) / 2).x, ((_Target + _End) / 2).y, ((_Target + _End) / 2).z);
                //从世界空间转换到屏幕空间的位置
                Vector3 _Position = Camera.main.WorldToScreenPoint(_WorldPosition);
                //生成位置  在起始点到终点 的一半
                _Position = new Vector2(_Position.x, Screen.height - _Position.y);
    
                //GUI 颜色
                GUI.color = _ColorStr;
                //文字大小
                Vector2 _StrSize = GUI.skin.label.CalcSize(new GUIContent(_DistanceStr));
    			//在屏幕上创建一个文本或纹理标签
    			GUI.Label(new Rect(_Position.x - (_StrSize.x / 2), _Position.y - _StrSize.y, _StrSize.x +_SizeVector2, _StrSize.y +_SizeVector2), _DistanceStr);
    
            }
        }
    
    
        private void OnGUI()
        {
            if (_Number==1)
            {
    			GUIStr(_DistanceStr);
    		}
    	}
    
        private void OnPostRender()
    	{
    		if (_Number == 1)
    		{
    			GLDrawLine(_Target, _End);
    		}
    	}
    
    	
    }
    
    
    组件搭载:
    

    在这里插入图片描述

    最终效果:
    
    射线测距
    

    在这里插入图片描述

    网格变形
    

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    暂时先这样吧,如果有时间的话就会更新,实在看不明白就留言,看到我会回复的。
    路长远兮,与君共勉。

    展开全文
  • unity 射线拾取物品

    2021-10-22 11:39:12
    //划出射线,只有在scene视图中才能看到 GameObject gameObj = hitInfo.collider.gameObject; Debug.Log("click object name is= " + gameObj.name); if(gameObj.tag == "boot")//当射线碰撞目标为boot类型的物品 ,...
  • Unity射线实现灯光,门的开关动画,初学者很受用 希望可以帮到大家
  • unity射线系统

    千次阅读 2020-05-21 11:35:09
    由于我们在看到屏幕上的显示效果时是在2D的一个平面的效果,为了体现出屏幕的纵深从而呈现出3D的效果,设计了射线系统。 射线是有摄像机发出的。射线是从一个点向另外一个点发生的一条线,一旦与其他模型发生碰撞将...
  • Unity射线(Ray)是用来检测碰撞体或触发器的,不带碰撞体的是检测不到的,不检测触发器要在物理设置里设置 表示bool值: Physics.Raycast(Ray, out hitInfo, range, mask){} 四个参数第一个必须要有 Ray:射线...
  • RayCast 射线检测本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!...Chinar教程效果:全文高清图片,点击即可放大观看(很多人竟然不知道)1Raycast —— 射线检测Unity 中提供了一种控...
  • Unity射线检测层处理 Layer 指定层有效: Physics.Raycast(ray, out hit, 1000, 1 << LayerMask.NameToLayer(“MAP”)); 或写成:Physics.Raycast(ray, out hit, 1000, 1 << 9);//第9层有效。 指定层...
  • Unity中,可以从一个点向一个方向发射虚拟球体,指定球体半径、投射长度。 在发射轨迹中与其他物体发生碰撞时,它将终止,并返回碰撞信息。 核心代码: Physics.SphereCastAll所有球体投射 ​ static ...
  • unity 射线获取坐标

    千次阅读 2020-06-11 16:55:57
    射线:碰到障碍物就会断开 鼠标点击屏幕获得一个二维坐标,通过相机的射线转换为三维世界坐标 private Vector3 worldPos;//鼠标点击的点所对应的世界里面的位置 //点击鼠标右键 if (Input.GetMouseButton(1)) ...
  • 1.普通射线检测(一般用于检测某一个物体)Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);Debug.DrawRay(ray.origin ,ray.direction , Color.red);RaycastHit hit;if(Physics .Raycast (ray,out hit,...
  • unity射线检测碰撞

    2020-09-07 20:46:28
    使用普通的碰撞体检测,检测时不连续的,是每隔0.02秒进行的离散检测,这样在被检测的物体速度比较快时,就会由直接穿过物体的可能,这个时候,就需要使用射线检测了。 为了实现高速状态下的碰撞检测,要使用连续的...
  • 是比较小的,大的看不出来,大的即使晚更新几帧肉眼也看不出来)物体A进行射线检测。如果出现射线有时判true,有时判false。可能是以下原因。 首先,只有在FixedUpdate执行完后才会更新物理,此处说的更新物理是...
  • 第一人称游戏往往有一个准星UI,如果要往准星UI的位置发射一条射线,就可以使用"屏幕位置"来获取准星UI的位置。 如图: 在unity中,左下角的屏幕位置为(0,0),右上角的屏幕位置是(Screen.width,Screen....
  • unity 射线检测总结

    千次阅读 2018-11-04 18:59:19
    3D射线检测: 1.射线普通检测,如果 Ray 跟系统命名冲突,只需要在前面加上 UnityEngine. 就行了 UnityEngine.Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; ...
  • unity射线

    千次阅读 2018-12-13 17:14:33
    1.摄像机位置投放射线,鼠标点到哪移动到哪 using UnityEngine; using System.Collections; public class RayTest : MonoBehaviour { private Ray ray; private RaycastHit hit;//射线碰到的碰撞信息 private Nav...
  • 射线检测 简介 作用 代码实现 实际用法 简介 射线检测是Unity开发游戏中经常会用到的一个东西,其原理是鼠标点击之后,从摄像机发出一条射线,选中第一个所照射到的物体,需要注意的是,这里的射线只是假象的,并不...
  • unity射线为什么不能够和模型检测 今天在做作业的时候,在进行使用射线进行检测碰到的是模型,并且碰到模型做出来特定的动作,但是怎么都不能进行检测成功,后来查了半天,发现给模型加上一个碰撞体就行了; ...
  • unity 射线Ray指定和忽略层LayerMask

    千次阅读 2021-11-11 09:42:54
    eg:   以下表示32位全是零:   0000 0000 0000 0000 0000 0000 0000 0000   默认情况下Unity使用前8层作为内置层。所以当你在不使用任何图层参数掩码参数的情况下调用光线投射方法时,它会对所有默认的这8层...
  • Unity 射线检测

    千次阅读 2020-02-25 16:10:42
    要使用射线检测,物体必须是触发器或者碰撞器。 ...射线检测函数在Physics 类中。由于射线无法看见,调试起来...Unity 给我们提供了一个画射线的方法Debug.DrawRay,便于调试。Debug.DrawRay需要在Update中使用,否则渲...
  • Unity 射线检测 UGUI

    千次阅读 2019-05-28 11:46:51
    1.鼠标通过射线检测 UI ,记得 EventSystem和 GraphicRaycaster赋值,变量已经 Public直接拖拽上去即可 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine....
  • unity 射线检测2D物体

    千次阅读 2021-10-23 19:21:36
    Vector3 mousepoint = Input.mousePosition; mousepoint.z =Mathf.Abs( Camera.main.transform.position.z);//非常重要,如果不是正交摄像机,就需要转换 var v = Camera.main.ScreenToWorldPoint(mouspoint);...
  • ``` void Update () { RaycastHit hit; Vector3 fwd = transform.TransformDirection(Vector3.forward);...还有一个问题,这么写, 即使我在射线中添加 box 有碰撞体,但是射线还是能传过去。。。。。
  • Unity 射线案例

    2020-04-01 11:33:29
    Unity 学习笔记汇总 Debug.DrawRay官方API使用文档 文章目录1. 前台2. 代码3. 结果 1. 前台 2. 代码 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ...
  • startPos = transform.position + transform.right * 0.6f;... // 每条射线都在forward_left的基础上偏转一点,最后一个正好偏转90度到视线最右侧 Vector3 v = Quaternion.Euler(0, 0, (90.0f / 30) * i) * forwar...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,025
精华内容 3,210
关键字:

unity射线

友情链接: KEIL支持文件.zip