博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity(射线)
阅读量:6987 次
发布时间:2019-06-27

本文共 1851 字,大约阅读时间需要 6 分钟。

#1、描述

此课程说明射线的使用,并且举例一个鼠标点击游戏对象移动的示例,注意,如果想要被射线响应到,必须给物体加上碰撞器,不然没有效果

#2、示例

public int speen;	private Vector3 targer;	private bool isOver = true;	// Use this for initialization	void Start () {		}		// Update is called once per frame	void Update () {		//当按下鼠标左键的时候		if (Input.GetMouseButtonDown(0)) {						//根据屏幕坐标转换世界坐标,生成一条射线返回			Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);			//创建射线于游戏对象交叉时生成的信息接受类			RaycastHit hit = new RaycastHit ();			//如果射线于一个游戏对象碰撞交叉时,返回true为真,会把碰撞的信息out到hit对象中			if (Physics.Raycast (ray, out hit)) {								//从信息类中判断游戏对象名字是否是地板				if (hit.collider.name.Equals ("Plane")) {										targer = hit.point; //把坐标赋值给目标对象					targer.y = 0.5f;  // 重新设置他的y坐标					isOver = false; // 设置是否结束为false,这样就会执行moveto方法了				}			}		}		//始终执行移动方法,只有当isOver == true的时候执行		MoveTo (targer);	}	public void MoveTo(Vector3 vector3){				//如果没有结束		if (!isOver) {						//画出一条Debug线,从自身延伸到目标的地方,连出一条线,这里说明一下,drawline只会绘画一次,速度很快,如果要一直显示,后面还有个duraline字段			Debug.DrawLine(transform.position,vector3,Color.blue);			//用目标向量 - 当前向量 , 获取出两个位置的差异向量			Vector3 distance =  vector3 - transform.position;			//移动游戏对象到目标位置 			//distance.normalized :确定方向			//speen : 速度			//Time.deltaTime : 确保一秒执行speen速度的距离			transform.Translate (distance.normalized * speen * Time.deltaTime);			//计算两个点相差的距离,如果差别不大,就结束移动			if (Vector3.Distance (vector3, transform.position) <= 0.1f) {				isOver = true;				transform.position = vector3; 			}		}	}复制代码

#3 射线的技巧 在执行 Physics.Raycast方法的时候,有个参数是int layerMask,这个参数是用于过滤掉不处理的层级的,但是也有一些讲究,比如player层级,他要怎么表示这个层级呢,就比较用

1 << LayerMask.NameToLayer("player")复制代码
Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers)其实很简单:1 << 10  打开第10的层。~(1 << 10) 打开除了第10之外的层。~(1 << 0) 打开所有的层。(1 << 10) | (1 << 8) 打开第10和第8的层。复制代码

转载于:https://juejin.im/post/5b3ac96d6fb9a025051946d0

你可能感兴趣的文章
Git 与 GitHub
查看>>
Spring Cloud:多环境配置、eureka 安全认证、容器宿主机IP注册
查看>>
【leetcode】667. Beautiful Arrangement II
查看>>
【leetcode】955. Delete Columns to Make Sorted II
查看>>
JDK源码阅读-Integer
查看>>
Java修行之路
查看>>
接口(工厂模式&代理模式)
查看>>
3月个人随笔
查看>>
netty入门
查看>>
iOS 组件化流程详解(git创建流程)
查看>>
搜索关键字高亮显示,就比微信多个多音字搜索
查看>>
1303: [CQOI2009]中位数图
查看>>
在数组的开头插入键值对
查看>>
LTTng
查看>>
常用模块
查看>>
HTTPS = HTTP + SSL
查看>>
Copy修饰的NSArray
查看>>
eclipse新建web项目
查看>>
gnuplot
查看>>
GraphQL(三):GraphQL集成SpringBoot原理
查看>>