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


    射线

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


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

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


  • 相关阅读:
    【CF516D】Drazil and Morning Exercise(换根DP预处理+暴力双指针)
    【CF538G】Berserk Robot(思维)
    【CF521D】Shop(贪心)
    【洛谷4827】[国家集训队] Crash 的文明世界(斯特林数+换根DP)
    斯特林数的基础性质与斯特林反演的初步入门
    【CF566C】Logistical Questions(点分治)
    【CF980D】Perfect Groups(仔细一想是道水题)
    【洛谷2597】[ZJOI2012] 灾难(支配树)
    2020CCPC长春站题解A D F H J K
    2020CCPC长春站自我反省
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4496424.html
Copyright © 2020-2023  润新知