unity基础开发1.射线碰撞器的原理和用法

unity基础开发1.射线碰撞器的原理和⽤法
⼀. Unity3d 碰撞器与触发器
1. 要产⽣碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,
刚体可以让物体物理影响下运动。碰撞体是物理组件的⼀类,它要与刚体⼀起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在⼀起,除⾮两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。物体发⽣碰撞的必要条件两个物体都必须带有碰撞器(Collider),其中⼀个物体还必须带有Rigidbody刚体。
2. 在unity3d中,能检测碰撞发⽣的⽅式有两种,⼀种是利⽤碰撞器,另⼀种则是利⽤触发器。
碰撞器: ⼀组件,它包含了很多种类,⽐如:Box Collider(盒碰撞体),Mesh Collider(⽹格碰撞体)等,这些碰撞器应⽤的场合不同,但都必须加到GameObjecet⾝上。触发器 ,只需要在检视⾯板中的碰撞器组件中勾选IsTrigger属性选择框。
Is Trigger(是否为触发器) 这个选项是供脚本使⽤的,如果勾选了这个则不会有碰撞的物理效果,但是游戏引擎会通知脚本有物体发⽣了碰撞。
Material(碰撞器材质) 在这⾥可以选择⼀种物理材质,来模拟更真实的碰撞效果,⽐如⾦属之间的碰撞与⽯头之间的碰撞效果肯定是不⼀样的。
Center(碰撞器中⼼点) 可以调整碰撞器离物体中⼼的距离,也就是移动绿框。
Size(碰撞器⼤⼩) 调整碰撞器的缩放⼤⼩,调整XYZ可以让碰撞器变成任意⼤⼩的长⽅体。
3. 触发信息检测:
1.MonoBehaviour.OnTriggerEnter(Collider collider)当进⼊触发器
2.MonoBehaviour.OnTriggerExit(Collider collider)当退出触发器
3.MonoBehaviour.OnTriggerStay(Collider collider)当逗留触发器
碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进⼊碰撞器
2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay(Collision collision)  当逗留碰撞器
4. 两个物体相接触时到底执⾏OnTriggerEnter还是执⾏OnCollisionEnter⽅法,这两个⼜有什么区别呢?
为了验证碰撞器与触发器的区别,现设计⼀个简单的游戏,让⼩汽车与⼩球发⽣碰撞。新建⼀个C#脚本⽂件,把它拖给⼩汽车对象,双击该脚本⽂件进⼊脚本编辑器,在该脚本中加⼊如下两个⽅法,并分别设置⼀个断点:
void OnTriggerEnter(Collider collider)
{
//进⼊触发器执⾏的代码
}
void OnCollisionEnter(Collision collision)
{
//进⼊碰撞器执⾏的代码
}
当未勾选碰撞器的Is Trigger选项时汽车与球体发⽣碰撞,进⼊⽅法OnCollisionEnter,碰撞之后汽车产⽣被球体撞飞的效果:
如果将碰撞器的Is Trigger属性选中,再次启动游戏让球体与汽车产⽣接触,这时进⼊⽅法OnTriggerEnter。之后球体直接穿过汽车,但球体与汽车都没有产⽣碰撞效果:
5. unity3d中的碰撞器和触发器的区别?
碰撞器是触发器的载体,⽽触发器只是碰撞器⾝上的⼀个属性
当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产⽣碰撞的效果,可以调⽤OnCollisionEnter/Stay/Exit函数;
当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调⽤OnTriggerEnter/Stay/Exit函数。
如果既要检测到物体的接触⼜不想让碰撞检测影响物体移动或要检测⼀个物件是否经过空间中的某个区域这时就可以⽤到触发器
例⼦:
碰撞器:汽车被撞飞、⽪球掉在地上⼜弹起效果
触发器:⼈站在靠近门的位置门⾃动打开效果
⼆.  unity3d射线的原理⽤法
1. Rap简介
陶瓷膜过滤系统
射线:射线是3D世界中⼀个点向⼀个⽅向发射的⼀条⽆终点的线,在发射轨迹中与其他物体发⽣碰撞时,它将停⽌发射 。 ⽤途:射线应⽤范围⽐较⼴, 多⽤于碰撞检测(如:⼦弹飞⾏是否击中⽬标)、⾓⾊移动等 等。
2. 相关API:
1、Ray Camera.main.ScreenPointToRay(Vector3 pos)  返回⼀条射线Ray从摄像机到屏幕指定⼀个点
2、Ray Camera.main.ViewportPointToRay(Vector3 pos)  返回⼀条射线Ray从摄像机到视⼝(视⼝之外⽆效)指定⼀个点
3、Ray 射线类
4、RaycastHit 光线投射碰撞信息
5、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)
当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask)
在场景中投下可与所有碰撞器碰撞的⼀条光线,并返回碰撞的细节信息()。
bool Physics.Raycast(Ray ray, float distance, int layerMask)
当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int layerMask)
当光线投射与任何碰撞器交叉时为真,否则为假。
注意:如果从⼀个球型体的内部到外部⽤光线投射,返回为假。
参数理解:
  origin : 在世界坐标中射线的起始点
  direction: 射线的⽅向
  distance: 射线的长度
  hit: 使⽤c#中out关键字传⼊⼀个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。
  layerMask: 只选定Layermask层内的碰撞器,其它层内碰撞器忽略。选择性的碰撞
6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask)
新型碾米机环保型投射⼀条光线并返回所有碰撞,也就是投射光线并返回⼀个RaycastHit[]结构体。
3. 下⾯是⼀个利⽤射线做的⼩例⼦:
场景中放置了2个Cube
代码如下,直接添加给MainCamera
using UnityEngine;
using System.Collections;
public class RayCamera : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonUp(0))
{
Ray ray = Camera.main.usePosition);
三聚氰胺甲醛树脂RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo))
{
Debug.igin, hitInfo.point);
//1. 第⼀种写法
//GameObject gameObject = llider.gameObject;
//Debug.Log("click object name is " + gameObject.name);
//if (gameObject.tag == "boot")
//{
//    Debug.Log("pick up!");
//}
//2. 第⼆种写法
Debug.Log("Click object name is " + llider.gameObject);
if (llider.gameObject.name == "Cube2")
{
Debug.Log("Click Cube2!");
}
}
}
}
Touch版本如下:
<span > </span>foreach (Touch touch uches)
{
if (uchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
Ray ray = Camera.main.ScreenPointToRay(new Vector3(touch.position.x,touch.position.y,0));                RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
Debug.igin, hit.point);
便携式存储// 显⽰当前选中对象的名称
铝合金切削油llider.gameObject);
if (llider.gameObject.name == "Cube")
{
}
}
运⾏结果如下:
电池充电座

本文发布于:2024-09-24 04:16:52,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/204765.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:碰撞   物体   射线   物理   触发器   游戏   效果   光线
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议