43236人加入学习
(204人评价)
【旧版】Unity初级案例 - 愤怒的小鸟

制作完成于 2018-1-22 本教程基于 Unity 2017.2开发

价格 免费

任务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(转化为数值)

[展开全文]

spritranderer rander 调用图片

public sprite hurt 获取图片hurt

render.sprite=hurt;

[展开全文]

关于OnCollisionEnter2D和OnTriggerEnter2D两种碰撞触发

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//相对速度

[展开全文]

授课教师

SIKI学院老师

课程特色

图文(1)
下载资料(1)
视频(44)