经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
Fire Balls 07——砖块的淡出,消失以及砖塔的下落
来源:cnblogs  作者:优梦创客  时间:2019/9/10 10:30:15  对本文有异议

版权申明:

  • 本文原创首发于以下网站:
  1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
  2. 优梦创客的官方博客:https://91make.top
  3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
  4. 『优梦创客』的微信公众号:umaketop
  • 您可以自由转载,但必须加入完整的版权声明

目标

  • 砖块的消失
  • 砖块的淡出效果
  • 砖块的下落

砖块的消失

  • 首先我们先打开我们的Tower脚本,编写如下代码
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Tower : MonoBehaviour
  5. {
  6. public int Height;
  7. public Color[] Colors = new Color[2];
  8. public GameObject brickPrefab;
  9. public List<GameObject> bricks = new List<GameObject>();
  10. public bool isRisenUp = false;//砖块是不是全部从地下钻上来了
  11. // Start is called before the first frame update
  12. void Start()
  13. {
  14. for(int i = 0; i < Height; i++)
  15. {
  16. GameObject goBrick = Instantiate(brickPrefab);
  17. goBrick.transform.SetParent(transform,false );
  18. goBrick.transform.Translate(0, i, 0,Space.Self);
  19. goBrick.GetComponent<MeshRenderer>().material.color = Colors[i % 2];
  20. goBrick.transform.Rotate(0, i*10, 0,Space.Self);
  21. bricks.Add(goBrick);
  22. }
  23. StartCoroutine(RiseUpFormUnderground());
  24. }
  25. IEnumerator RiseUpFormUnderground()
  26. {
  27. transform.Translate(0, -Height * transform.lossyScale.y, 0, Space.Self);
  28. while (transform.position.y<0.5*transform.lossyScale.y)
  29. {
  30. transform.Translate(0, 5 * Time.deltaTime, 0, Space.Self);
  31. yield return null;
  32. }
  33. isRisenUp = true;
  34. }
  35. // Update is called once per frame
  36. void Update()
  37. {
  38. transform.Rotate(0, 45 * Time.deltaTime, 0,Space.Self);
  39. }
  40. public void DropTower()
  41. {
  42. //启动一个协成
  43. StartCoroutine(DestoryAndDrop());
  44. }
  45. IEnumerator DestoryAndDrop()
  46. {
  47. //第一步:找到最底下一层砖块,然后销毁
  48. GameObject brick = bricks[0];
  49. bricks.RemoveAt(0);
  50. //第二步:设置砖块进入淡出动画状态
  51. //第三步:让上面的每一层砖块往下落一层
  52. //第四步,销毁砖块
  53. Destroy(brick,2f);
  54. yield return null;
  55. }
  56. }
  • 随后打开我们的Projectile脚本并在我们的OnCollisionEnter函数里添加如下代码:
  1. private void OnCollisionEnter(Collision collision)
  2. {
  3. if(collision.gameObject.tag == "Tower")
  4. {
  5. Destroy(gameObject);
  6. collision.transform.parent.GetComponent<Tower>().DropTower();
  7. }
  8. if(collision.gameObject.tag == "Arch")
  9. {
  10. lober.endPos = player.transform.position;
  11. lober.enabled = true;
  12. player.gameover = true;
  13. }
  14. }
  • 修改完成后运行我们的游戏就可以看到砖块消失的效果了。

    砖块的淡出效果

  • 首先我们先新建一个脚本重命名为Brick并编写如下的代码:

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public class Brick : MonoBehaviour
  6. {
  7. private bool isFadeout = false;
  8. public Vector3 targetScale;//目标缩放大小
  9. public float speed = 0.5f;//淡出的速度
  10. private void Start()
  11. {
  12. targetScale = transform.localScale * 3;
  13. }
  14. internal void setFadeout()
  15. {
  16. isFadeout = true;
  17. }
  18. private void Update()
  19. {
  20. if (isFadeout)//如果砖块正在淡出
  21. {
  22. //1.砖块变大
  23. float t = 1 / speed * Time.deltaTime;
  24. transform.localScale = Vector3.Lerp(transform.localScale, targetScale, t);
  25. //2.砖块颜色变透明
  26. Color c = GetComponent<MeshRenderer>().material.color;
  27. c.a = Mathf.Lerp(c.a, 0, t);
  28. GetComponent<MeshRenderer>().material.color = c;
  29. }
  30. }
  31. }
  • 其次打开我们的Tower脚本找到我们刚刚编写的DestoryAndDrop函数并添加如下代码:
  1. IEnumerator DestoryAndDrop()
  2. {
  3. //第一步:找到最底下一层砖块,然后销毁
  4. GameObject brick = bricks[0];
  5. bricks.RemoveAt(0);
  6. //第二步:设置砖块进入淡出动画状态
  7. brick.GetComponent<Brick>().setFadeout();
  8. //第三步:让上面的每一层砖块往下落一层
  9. //第四步,销毁砖块
  10. Destroy(brick,2f);
  11. yield return null;
  12. }
  • 最后双击打开我们的砖块的材质把材质的Rendering Mode改为Fade即可。

砖块的下落

  • 依旧是打开我们的Tower脚本找到我们刚刚编写的DestoryAndDrop函数并添加如下代码:
  1. IEnumerator DestoryAndDrop()
  2. {
  3. //第一步:找到最底下一层砖块,然后销毁
  4. GameObject brick = bricks[0];
  5. bricks.RemoveAt(0);
  6. //第二步:设置砖块进入淡出动画状态
  7. brick.GetComponent<Brick>().setFadeout();
  8. //第三步:让上面的每一层砖块往下落一层
  9. for (int i = 0; i < bricks.Count; i++)
  10. {
  11. Vector3 p = bricks[i].transform.position;
  12. p.y = p.y - 1;
  13. bricks[i].transform.position = p;
  14. }
  15. //第四步,销毁砖块
  16. Destroy(brick,2f);
  17. yield return null;
  18. }

原文链接:http://www.cnblogs.com/raymondking123/p/11471190.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号