Unity中,对于游戏对象的碰撞检测有多种方法,今后在开发的过程中,可视情况而定,选用哪一种检测方法.
首先,忽略两个物体碰撞可采用如下语句:
Physics.IgnoreCollision(newBullet.GetComponent
1.1 在需要检测碰撞的物体上添加碰撞器,如:Box Collider、capsule Collider、Sphere Collider等.然后编写脚本,使用如下方法检测碰撞状态,此方法的好处是,只需要将脚本挂在检测物体对象上即可,无需将检测脚本挂在游戏角色身上,减轻角色挂载脚本的负荷.
private void OnTriggerEnter(Collider other) //检测函数,并将检测的结果放入other变量中.
{
if (other.gameObject.tag=="player") //将检测结果的碰撞对象标签与player标签对比.判断是否相等
{
theDoor.GetComponent
Debug.Log("Collide the door");
}
1.2 相对应的,离开碰撞区域的函数如下:
private void OnTriggerExit(Collider other1)
{
if (other1.gameObject.tag=="player")
{
Debug.Log("exit the mat");
}
}
2.1光线投射方法,此方法无论射线碰到什么物体都会有反应,且没有存储射线碰到物体的信息,代码如下:
//光线发射起点Vector3,方向Vector3,发射距离float.直接返回bool类型.对应if语句内的操作
if (Physics.Raycast(transform.position, transform.forward, 3))
}
2.2 //创建一条从游戏物体发射至前面3米的射线
Ray myRay = new Ray(transform.position, (transform.position + transform.forward * 3));
RaycastHit hit; //创建RaycastHit型变量,用于存放射线碰撞信息
//发设一条射线,myRay距离3长,碰撞到的物体信息存放在hit中,放在下面进行判断。
if (Physics.Raycast(myRay,out hit,3))3.取得游戏对象上 CharacterController组件的控制权,再利用碰撞语句检测是否发生碰撞.代码如下:
bool grounded=false;
void Upda(){
CharacterController controller = GetComponent
//将游戏物体的运动情况存在变量flags中,以便下面对游戏物体进行检测
CollisionFlags flags= controller.Move(moveDirection * Time.deltaTime);
//检测游戏角色碰撞信息flags与CollisionFlags.CollidedSides中存放的信息进行二进制与运算.并将结果返回
/*
CollisionFlags.CollidedBelow 底部发生了碰撞"flags & CollisionFlags.CollidedBelow"返回1;
CollisionFlags.CollidedNone 没发生碰撞"flags & CollisonFlags.CollidedNone"返回1;
CollisionFlags.CollidedSides 四周发生碰撞"flags & CollisionFlags.CollidedSides"返回1;
CollisionFlags.CollidedAbove 顶端发生了碰撞"flags & CollisionFlags.CollidedAbove"返回1;
*/
}
4. 关于2D物体碰撞的检测,具体检测函数可参考API编程手册,以下是其中碰撞检测的一个函数应用举例:
首先需要给检测的两个物体都添加Rigidbody2D及Box Collider碰撞检测组件。函数如下:
void OnTriggerEnter2D(Collider2D other)
{
Debug.Log("Collider");
if (other.tag == "Player")
{
Destroy(other.gameObject);
}
}
其他关于2D碰撞的检测函数参考API编程手册中搜索Collider。
如上三种碰撞检测方法,都可在游戏开发中使用,可根据实际情况选择.