09 Roll A Ball 碰撞检测与触发检测

输出碰撞物体的名字

rigibody Messages里面声明了3个方法

(刚接触立马分开 待一段时间离开)

  1. 接触的那一刻
  2. 接触时
  3. 分开时
    在这里插入图片描述
void OnCollisionEnter(Collision collision) {
    //collision.collider 
    //获取碰撞到的游戏物体身上的Collider组件
    string name = collision.collider.name;
    //获取碰撞到游戏物体的名字
    print(name); //把一个字符串输出显示到控制台
}

在这里插入图片描述
在这里插入图片描述

碰撞 警告 错误
在这里插入图片描述

碰撞检测

//碰撞检测
 void OnCollisionEnter(Collision collision) {
   if (collision.collider.tag == "PickUp"){
      Destroy(collision.collider.gameObject);
    }
 }
using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour
{

    private Rigidbody rd;   //声明一个钢体组件rd (通过rd去操作组件)

    void Start()
    {
        rd = GetComponent<Rigidbody>();      //得到游戏物体的钢体组件并赋给rd
    }

    // Update is called once per frame
    void Update()
    {   //如何得到左右按键(A D)和前后按键(W S)
        float h = Input.GetAxis("Horizontal");//得到水平轴的值 是个小数 h返回—1到1的值(负数A键)
        float v = Input.GetAxis("Vertical");
        rd.AddForce(new Vector3(h, 0, v)*5);  // 让它一直运动 通过 . 去调用方法
                                              //new Vector3(x,y,z)创建1个向量(一个向量有3个值) 
                                              //*5速度放大5倍
    }

     void OnCollisionEnter(Collision collision) {
        //collision.collider 获取碰撞到的游戏物体身上的Collider组件
        //string name = collision.collider.name;//获取碰撞到游戏物体的名字
        //print(name);//把一个字符串输出显示到控制台
        if (collision.collider.tag == "PickUp")
        {
            Destroy(collision.collider.gameObject);
        }

    }
}

触发检测

PickUp设置为触发器 不再是碰撞器了

在这里插入图片描述
在这里插入图片描述
这时食物是触发器 主角身上是碰撞检测 检测不到 所以直接穿过去了
触发区域

//触发检测
     void OnTriggerEnter(Collider collider){
        if (collider.tag == "PickUp"){
            Destroy(collider.gameObject);
        }
    }
using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour
{

    private Rigidbody rd;   //声明一个钢体组件rd (通过rd去操作组件)

    void Start()
    {
        rd = GetComponent<Rigidbody>();      //得到游戏物体的钢体组件并赋给rd
    }

    // Update is called once per frame
    void Update()
    {   //如何得到左右按键(A D)和前后按键(W S)
        float h = Input.GetAxis("Horizontal");//得到水平轴的值 是个小数 h返回—1到1的值(负数A键)
        float v = Input.GetAxis("Vertical");
        rd.AddForce(new Vector3(h, 0, v)*5);  // 让它一直运动 通过 . 去调用方法
                                              //new Vector3(x,y,z)创建1个向量(一个向量有3个值) 
                                              //*5速度放大5倍
    }

     void OnCollisionEnter(Collision collision) {
        //collision.collider 获取碰撞到的游戏物体身上的Collider组件
        //string name = collision.collider.name;//获取碰撞到游戏物体的名字
        //print(name);//把一个字符串输出显示到控制台
        if (collision.collider.tag == "PickUp"){
            Destroy(collision.collider.gameObject);
        }
    }
     void OnTriggerEnter(Collider collider){
        if (collider.tag == "PickUp"){
            Destroy(collider.gameObject);
        }
    }
}


在这里插入图片描述
触发检测 没有物理的那种碰撞效果
在这里插入图片描述
上一篇:控制食物的旋转
下一篇:Roll A Ball显示分数和胜利检测

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值