愤怒的小鸟 Day 1

怼烎@ 2022-04-15 20:07 315阅读 0赞

目录

1.资源导入,场景简单搭建

  1. springjoint组建介绍

  2. 小鸟的拖拽

4.拖拽距离最大限定

5.小鸟的飞出

6.猪的受伤

7.弹弓划线操作

9.死亡、加分特效的制作


1.资源导入,场景简单搭建

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tvdXpodWFuamluZzE4NDk_size_16_color_FFFFFF_t_70

2. springjoint组建介绍

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tvdXpodWFuamluZzE4NDk_size_16_color_FFFFFF_t_70 1

给小鸟添加SpringJoint2D组件

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tvdXpodWFuamluZzE4NDk_size_16_color_FFFFFF_t_70 2

3. 小鸟的拖拽

首先在小鸟身上添加Circle collider 2D组件,然后给小鸟添加Bird类

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Bird : MonoBehaviour {
  5. private bool isClick = false;
  6. private void OnMouseDown()//鼠标按下
  7. {
  8. isClick = true;
  9. }
  10. private void OnMouseUp()//鼠标抬起
  11. {
  12. isClick = false;
  13. }
  14. private void Update()
  15. {
  16. if (isClick)//鼠标一直按下,进行位置的跟随
  17. {
  18. transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
  19. //transform.position += new Vector3(0, 0, 10);
  20. transform.position += new Vector3(0, 0, -Camera.main.transform.position.z);
  21. }
  22. }
  23. }

4.拖拽距离最大限定

  1. public Transform rightPos;
  2. public float maxDis = 3;
  3. private void Update()
  4. {
  5. if (isClick)//鼠标一直按下,进行位置的跟随
  6. {
  7. transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
  8. //transform.position += new Vector3(0, 0, 10);
  9. transform.position += new Vector3(0, 0, -Camera.main.transform.position.z);
  10. if (Vector3.Distance(transform.position, rightPos.position) > maxDis)
  11. {
  12. //进行位置限定
  13. Vector3 pos = (transform.position - rightPos.position).normalized;//单位化向量
  14. pos *= maxDis;//最大长度向量
  15. transform.position = pos + rightPos.position;
  16. }
  17. }
  18. }

5.小鸟的飞出

当鼠标松开时,消除小鸟身的SpringJoint组件,让它飞出去

  1. private SpringJoint2D sp;
  2. private Rigidbody2D rg;
  3. private void Awake()
  4. {
  5. sp = GetComponent<SpringJoint2D>();
  6. rg = GetComponent<Rigidbody2D>();
  7. }
  8. private void OnMouseDown()//鼠标按下
  9. {
  10. isClick = true;
  11. rg.isKinematic = true;
  12. }
  13. private void OnMouseUp()//鼠标抬起
  14. {
  15. isClick = false;
  16. rg.isKinematic = false;
  17. Invoke("Fly", 0.1f);
  18. }
  19. void Fly()
  20. {
  21. sp.enabled = false;
  22. }

6.猪的受伤

场景中添加猪,添加必要的组件,然后创建Pig脚本

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Pig : MonoBehaviour {
  5. public float maxSpeed = 10;
  6. public float minSpeed = 5;
  7. private SpriteRenderer render;
  8. public Sprite hurt;
  9. private void Awake()
  10. {
  11. render = GetComponent<SpriteRenderer>();
  12. }
  13. private void OnCollisionEnter2D(Collision2D collision)
  14. {
  15. if (collision.relativeVelocity.magnitude > maxSpeed)
  16. {
  17. //直接死亡
  18. Destroy(gameObject);
  19. }else if(collision.relativeVelocity.magnitude > minSpeed && collision.relativeVelocity.magnitude < maxSpeed)
  20. {
  21. render.sprite = hurt;
  22. }
  23. }
  24. }

运行程序如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tvdXpodWFuamluZzE4NDk_size_16_color_FFFFFF_t_70 3

7.弹弓划线操作

添加LineRenderer在right和left上,在Brid中添加代码生成弹弓划线

  1. public LineRenderer right;
  2. public Transform rightPos;
  3. public LineRenderer left;
  4. public Transform leftPos;
  5. /// <summary>
  6. /// 划线
  7. /// </summary>
  8. void Line()
  9. {
  10. right.SetPosition(0, rightPos.position);
  11. right.SetPosition(1, transform.position);
  12. left.SetPosition(0, leftPos.position);
  13. left.SetPosition(1, transform.position);
  14. }
  15. }
  16. private void Update()
  17. {
  18. if (isClick)//鼠标一直按下,进行位置的跟随
  19. {
  20. transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
  21. //transform.position += new Vector3(0, 0, 10);
  22. transform.position += new Vector3(0, 0, -Camera.main.transform.position.z);
  23. if (Vector3.Distance(transform.position, rightPos.position) > maxDis)
  24. {
  25. //进行位置限定
  26. Vector3 pos = (transform.position - rightPos.position).normalized;//单位化向量
  27. pos *= maxDis;//最大长度向量
  28. transform.position = pos + rightPos.position;
  29. }
  30. Line();
  31. }
  32. }

运行程序,结果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tvdXpodWFuamluZzE4NDk_size_16_color_FFFFFF_t_70 4

9.死亡、加分特效的制作

添加boom特效,并给它添加自动销毁的方法

添加得分的效果

  1. public GameObject boom;
  2. public GameObject score;
  3. void Dead()
  4. {
  5. Destroy(gameObject);
  6. Instantiate(boom, transform.position, Quaternion.identity);
  7. GameObject go = Instantiate(score, transform.position + new Vector3(0, 0.5f, 0), Quaternion.identity);
  8. Destroy(go, 1.5f);
  9. }

运行程序,结果如下

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tvdXpodWFuamluZzE4NDk_size_16_color_FFFFFF_t_70 5

发表评论

表情:
评论列表 (有 0 条评论,315人围观)

还没有评论,来说两句吧...

相关阅读

    相关 愤怒小鸟 Day 1

    目录 1.资源导入,场景简单搭建 2. springjoint组建介绍 3. 小鸟的拖拽 4.拖拽距离最大限定 5.小鸟的飞出 6.猪的受伤 7.弹弓划线操作

    相关 愤怒小鸟 Day 2

    目录 1.游戏逻辑的判定,实现多只小鸟的飞出 2.解决重复划线,小鸟轮换速度突然变大的问题 3.添加小鸟飞出的拖尾效果 4.整合场景,解决无法显示划线弹弓的问题 5.

    相关 愤怒小鸟 Day 3

    目录 1.添加镜头跟随 2.音乐的添加 3.添加黄色小鸟 4.添加绿色的小鸟 5.添加黑色小鸟 6.处理黑色小鸟的爆炸问题 7.处理星星数组越界的问题 8.制作