经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
Fire Balls 05——子弹的命中及后续效果
来源:cnblogs  作者:优梦创客  时间:2019/9/10 10:31:16  对本文有异议

版权申明:

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

目标

  • 预制体Tag的更改
  • 子弹脚本的编写
  • 子弹碰到圆环后反弹

预制体Tag的更改

  • 首先我们先打开我们的砖块(任意)预制体然后在上方找到Tag选项
  • 单击打开后点击Add Tag,点击+号,增加两个如下Tag
  • 由于我们的圆环是动态创建的所以我们需要在脚本中添加更改Tag的代码,首先我们先Disc脚本找到对应的函数并添加第23行代码如下所示:
  1. private void CreateArch(int radius, int deg, int rot)
  2. {
  3. // 创建圆环
  4. ProBuilderMesh pbMesh = ShapeGenerator.GenerateArch(PivotLocation.FirstVertex,
  5. deg, radius, 0.5f, 1, 20, true, true, true, true, true);
  6. pbMesh.GetComponent<MeshRenderer>().material = mat;
  7. // 设置圆环的Tag
  8. pbMesh.gameObject.tag = "Arch";
  9. // 给圆环添加碰撞器
  10. pbMesh.gameObject.AddComponent<MeshCollider>();
  11. // 使圆环平躺
  12. pbMesh.transform.Rotate(-90, 0, 0);
  13. // 设置圆环的父节点,使其绕着父节点公转(父节点默认创建在原点)
  14. Transform xRig = new GameObject("xRig").transform;
  15. pbMesh.transform.SetParent(xRig, false);
  16. // 设置圆环初始在圆盘的旋转角度
  17. xRig.Rotate(0, rot, 0);
  18. Transform yRig = new GameObject("yRig").transform;
  19. xRig.SetParent(yRig, false);
  20. yRig.SetParent(this.transform, false);
  21. }
  22. }
  • 然后保存并关闭我们的脚本即可。
  • 由于我们的砖块是有预制体的,所以我们只需打开砖块的预制体然后把Tag改为Brick即可。

    子弹脚本的编写

  • 我们先新建一个脚本重命名为Porjectile并打开编写如下代码

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. // 子弹脚本
  5. public class Projectile : MonoBehaviour
  6. {
  7. private void Start()
  8. {
  9. }
  10. // 把子弹跟其他物体碰撞的脚本写在这里
  11. private void OnCollisionEnter(Collision collision)
  12. {
  13. // 子弹跟谁发生了碰撞?
  14. if (collision.gameObject.tag == "Arch")
  15. {
  16. print("你碰到了圆环!");
  17. }
  18. else if (collision.gameObject.tag == "Brick")
  19. {
  20. print("你碰到了砖块!");
  21. }
  22. }
  23. }
  • 并把脚本拖给子弹即可,由于子弹有可能会碰到平台,我们可以选中平台把平台的Mesh Colider组件给移除掉。注意,子弹上得添加Rigidbody和Sphere Colider组件,否则子弹不会产生碰撞效果。

子弹碰到圆环后反弹

  • 首先我们需要联系优梦创客的助教Alice老师她为我们提供完成本节课任务所需要的插件,然后把插件导入至我们的Unity,并打开我们的Projectile预制体并添加Lober脚本,并把左上角的√给取消掉,如下所示

    然后重新打开我们的Projectile脚本并把代码修改为如下所示:
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. // 子弹脚本
  5. public class Projectile : MonoBehaviour
  6. {
  7. private Lober lober;
  8. private Transform ply;
  9. private void Start()
  10. {
  11. lober = GetComponent<Lober>();
  12. ply = GameObject.FindWithTag("Player").transform;
  13. }
  14. // 把子弹跟其他物体碰撞的脚本写在这里
  15. private void OnCollisionEnter(Collision collision)
  16. {
  17. // 子弹跟谁发生了碰撞?
  18. if (collision.gameObject.tag == "Arch")
  19. {
  20. print("你碰到了圆环!");
  21. lober.endPos = ply.position;
  22. lober.enabled = true;
  23. }
  24. else if (collision.gameObject.tag == "Brick")
  25. {
  26. print("你碰到了砖块!");
  27. }
  28. }
  29. }

原文链接:http://www.cnblogs.com/raymondking123/p/11451123.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号