10.collision.relative velocity
10.collision.relative velocity
任务10-猪的受伤
搭建场景
新建【空物体】:env,空物体归零
找图片:THEME_01_THEME_1,修改【Sprite Mode】为Multiple -- 裁一下 --图片拖上去--添加【碰撞盒Box Cllider 2D】,碰撞盒上面不要填满
主题拖到env下边--大量复制【command+D】
给小鸟增加阻力
bird--Rigibody 2D--Angular Drag:2
加入 【猪:pig】 编码:103
更改猪的图层为:player
给猪加一个【Rigibody 2D Angular Drag:2 】、【Circle Collider 2D radius:0.35】
猪的死亡和受伤
添加脚本:Pig
2个碰撞检测方法
OnCollisionEnter2D(Collision2D collision)//碰撞检测
OnTriggerEnter2D(Collision2D collision)//触发检测
定义2个变量
public float maxSpeed = 10;//最大速度
public float minSpeed = 5; //最小速度
判断一下
引出概念:相对速度
if (collision.relativeVelocity.magnitude > maxSpeed)//直接死亡
{
Dead();
} else if (collision.relativeVelocity.magnitude > minSpeed && collision.relativeVelocity.magnitude < maxSpeed) {
render.sprite = hurt;//更换图片:104
获取组件
private SpriteRenderer render;
在Awake下进行赋值
private void Awake()
{
render = GetComponent<SpriteRenderer>();
}
获取组件
最大速度改为:8
最小速度改为:4
猪的受伤
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class lostHP : MonoBehaviour
{
public int miaosha_sudu_zuidazhi = 10;
public int banxue_sudu_zuidazhi = 5;
public SpriteRenderer pig;
public Sprite banxue_tupian;
private void OnCollisionEnter2D(Collision2D collision)
{
Debug.Log(collision.relativeVelocity.magnitude);
if(collision.relativeVelocity.magnitude > miaosha_sudu_zuidazhi)
{
Destroy(gameObject);
}
else if (collision.relativeVelocity.magnitude < miaosha_sudu_zuidazhi && collision.relativeVelocity.magnitude > banxue_sudu_zuidazhi)
{
pig.sprite = banxue_tupian;
}
}
}
碰撞
onCollisionEnter
onTriggerEnter
relativeVelocity//获取速度向量
magnitude//转化为固定值
circle collider 和box collider区别
碰撞盒与触发器
Collision.relativeVelocity 相对速度
两个碰撞物体的相对线性速度(只读)。
.magnitude
返回此向量的长度(只读)。
写在小猪脚本里,用碰撞体
collision2D.relativeVelocity.magnitude
添加空的Creat Empty
再将图片拖入,添加碰撞盒,进行调整
碰撞检测
OnCollisionEnter
触发检测
OnTriggerEnter
相对速度
collision.relativeVelocity.magnitude
第10节
地面的BoxCollider2D最好与顶部稍微离开一点
将小鸟RGD中角阻力调节为2,增加与地面摩擦力效果
if(collision.relativeVelocity.magnitude>maxSpeed){...}
relativeVelocity相对速度(向量的形式,所以要转化为数值).magnitude(转化为数值)
OnCllisioEnter
spritranderer rander 调用图片
public sprite hurt 获取图片hurt
render.sprite=hurt;
sindyra 2019-06-01 18:27:04 4839 收藏 7
分类专栏: Unity 文章标签: OnTriggerEnter和OnCollisionEnte
转自:https://blog.csdn.net/renatqiang/article/details/47682449 做下笔记。
一:产生碰撞的条件
1:若要产生碰撞,必须双方都要有碰撞器。
2:运动的一方一定要有刚体,另一方有无刚体无所谓,但需要注意的是如果是静止的物体带刚体,一开始效果跟运动的物体带刚体一样,但由于刚体放在静止的物体上会休眠,所以一般要将刚体放在运动的物体身上。简而言之就是至少要有一方有刚体,一般为运动方。
注:如果运动的一方无刚体,它去碰撞静止的不带刚体的物体,相当于没有撞上,即使双方带碰撞体也会相互穿过。
如果运动的一方有刚体,它去碰静止的不带刚体的物体(即没有物理演算),则该物体不会因为被碰撞而发生移动。
总的来说,如果想要两个物体碰撞后都有因为物理演算而发生位移,则双方都要有刚体和碰撞器。
二:接触的两种方式
1:Collision碰撞,造成物理碰撞,可以在碰撞时执行OnCollision事件。
2:Trigger触发,取消所有的物理碰撞,可以在触发时执行OnTrigger事件。
注:两个物体接触不可能同时产生碰撞+接触,最多产生一种。但是可以AB产生碰撞,AC产生触发。
三:产生不同方式接触的条件
1:Collision碰撞
(1):双方都有碰撞体
(2):运动的一方必须有刚体
(3):双方不可同时勾选Kinematic运动学。
(4):双方都不可勾选Trigger触发器。
2:Trigger触发
(1):双方都有碰撞体
(2):运动的一方必须是刚体
(3):至少一方勾选Trigger触发器
四:接触后事件细分为Enter,Stay,Exit三种(以Trigger为例,分别为OnTriggerEnter、OnTriggerStay、OnTriggerExit)
1:Enter事件表示两物体接触瞬间,会执行一次。
2:Stay事件表示两物体持续接触,会不断执行。
3:Exit事件当两物体分开瞬间,会执行一次。
五:OnTriggerEnter这类的属于Trigger触发,OnCollisionEnter这类的属于Collision碰撞
总结:OnTriggerEnter和OnCollisionEnter的选择。
如果想实现两个刚体物理的实际碰撞效果时候用OnCollisionEnter,Unity引擎会自动处理刚体碰撞的效果。
如果想在两个物体碰撞后自己处理碰撞事件用OnTriggerEnter。
猪的碰撞检测:
oncollisionenter2D【两个物体同时碰撞在刚体和碰撞盒子里面】或ontriggerenter2D【期中一个就行】
OncollisionEnter2D和OnTriggerEnter2D的区别
小猪的死亡。
主题1,裁切一下。collider
角阻力。
猪的角阻力, collider
碰撞检测,
相对速度。
collision.relativeVelocity相对速度,.magnitude 数值,
collisionEnter2d 因为是2d游戏。
碰撞检查
有一共有三种方法
private void OnCollisionEnter2D(Collision2D collision){
碰撞检测
}
private void OnTriggerEnter2D(Collider2D collision){
触发检测
}
定义两个速度
private flate
private void OnCollisionEnter2D(Collision2D collision) { if(collision.relativeVelocity.magnitude>num)//碰撞体.相对速度(单位:向量).转换为数值 { } }
bird
RigidBody 2D
Angular grag 1=>2减速类似空气阻力(脚阻力)
collision.relativeVelocity.magnitude//相对速度