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

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

价格 免费

屏幕坐标左下角(0,0)

世界坐标中间(0,0)

[展开全文]

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。

[展开全文]

裁切一整张素材图片:

点击图片素材把Sprite Mode改成Multiple

 

[展开全文]

猪的碰撞检测:

oncollisionenter2D【两个物体同时碰撞在刚体和碰撞盒子里面】或ontriggerenter2D【期中一个就行】

[展开全文]

图片裁剪Sprite Mode-Multiple -Sprite Editor-appy;

主角被盖住sorting Layer-Add Sorting Layer...- +;
 


 

[展开全文]

学会用order inLayer层

学会图片的切割

[展开全文]
  1. 小鸟的拖拽(最大距离限制)
  2. 小鸟的飞出
  3. 小鸟与猪、木头的碰撞(死亡/受伤)
  4. 皮筋的绘制
  5. 一只小鸟——>多只的转化
  6. 各种特效的制作
  7. 镜头跟随
  8. 游戏结束,胜利的判断
  9. 添加音效
[展开全文]

1、panel嵌板

2、anchored position锚点位置

[展开全文]

OncollisionEnter2D和OnTriggerEnter2D的区别

[展开全文]

 //相机跟随
        float posX = transform.position.x;
        Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, new Vector3(Mathf.Clamp(posX, 2, 15),
            Camera.main.transform.position.y, Camera.main.transform.position.z), smooth * Time.deltaTime);

[展开全文]

添加一个协程 StartCoroutine

StartCoroutine就是开启一个协程,yield return 是迭代器块返回调用迭代的地方

 

[展开全文]

将Sprite中的Single改为Multipe对多张图片进行裁剪成单个  Slice图片裁剪

[展开全文]