Unity3d--碰撞检测(一)
程序员文章站
2022-07-12 23:34:04
...
碰撞分为三个阶段:
- Collider.OnCollisionEnter
两个物体刚接触时,有点像物理中的时刻,只触发一次
Collider.OnCollisionEnter传送门 - Collider.OnCollisionStay
两个物体接触一段时间,可以触发多次
Collider.OnCollisionStay 传送门 - Collider.OnCollisionExit
两个物体刚离开的时刻,只触发一次
Collider.OnCollisionExit传送门
演示一下吧:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player1 : MonoBehaviour {
private Rigidbody rd; //创建一个刚体类型的对象
public float force=5.0f; //定义成public类型,就可以在Inspector面板上直接更改值
// Use this for initialization
void Start () {
rd = GetComponent<Rigidbody>(); //得到当前物体的刚体组件属性,并赋值给rd
}
// Update is called once per frame
void Update () {
//用来得到水平的按键 a返回-1 d返回1
float h = Input.GetAxis("Horizontal");
//用来得到水平的按键 s返回-1 w返回1
float v = Input.GetAxis("Vertical");
rd.AddForce(new Vector3(h, 0, v)*force);
}
//---------------------------------------------------------
void OnCollisionEnter(Collision collision)
{
// collision.collider 获取碰撞物体上的collider组件
string name = collision.collider.name;
print(name);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player1 : MonoBehaviour {
private Rigidbody rd; //创建一个刚体类型的对象
public float force=5.0f; //定义成public类型,就可以在Inspector面板上直接更改值
// Use this for initialization
void Start () {
rd = GetComponent<Rigidbody>(); //得到当前物体的刚体组件属性,并赋值给rd
}
// Update is called once per frame
void Update () {
//用来得到水平的按键 a返回-1 d返回1
float h = Input.GetAxis("Horizontal");
//用来得到水平的按键 s返回-1 w返回1
float v = Input.GetAxis("Vertical");
rd.AddForce(new Vector3(h, 0, v)*force);
}
//碰撞检测 会有实际的物理效果
void OnCollisionEnter(Collision collision)
{
// collision.collider 获取碰撞物体上的collider组件
//string name = collision.collider.name; //得到碰撞物体的名字为字符串类型
//print(name); 在Console面板中输出名字
if(collision.collider.tag=="pickup")
{
//如果碰撞物体的标签是pickup就销毁
Destroy(collision.collider.gameObject);
}
}
}
下一篇: 【Unity3D】UGUI组件的监听