码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Unity笔记(10):SHOOT GAME EXAMPLE【2D】


    目录

    1、素材准备

     2、调整大小设为预制体

    3、创建空物体设置开火点

     4、给物体创建移动脚本

    5、为武器设计一个开火动画

     6、给子弹预制体添加刚体组件

    7、添加碰撞盒

     8、编辑 shoot()

     9、给预制体子弹添加移动脚本

     10、给目标添加碰撞盒和刚体组件

     Finsh


     

    1、素材准备

            三张图片

     2、调整大小设为预制体

     

    3、创建空物体设置开火点

     4、给物体创建移动脚本

            让手枪跟随鼠标移动

            不带旋转角:

    Unity 代码实现物体跟随鼠标移动_红叶920的博客-CSDN博客_unity物体跟随鼠标移动

            带旋转角:

    Unity让物体跟随鼠标移动_李公子lm的博客-CSDN博客_unity物体跟随鼠标

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class Movement : MonoBehaviour
    5. {
    6. // Start is called before the first frame update
    7. void Start()
    8. {
    9. }
    10. // Update is called once per frame
    11. void Update()
    12. {
    13. // 此时的摄像机必须转换 2D摄像机 来实现效果(即:摄像机属性Projection --> Orthographic)
    14. Vector3 dis = Camera.main.ScreenToWorldPoint(Input.mousePosition); //获取鼠标位置并转换成世界坐标
    15. dis.z = this.transform.position.z; //固定z轴
    16. this.transform.position = dis; //使物体跟随鼠标移动
    17. }
    18. }

     可以看到,开火点会跟随手枪移动

    5、为武器设计一个开火动画

     

     动画变量

    脚本控制

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class Movement : MonoBehaviour
    5. {
    6. public Animator animator;//加载动画组件
    7. bool isFire;
    8. void Start()
    9. {
    10. isFire = false;
    11. }
    12. // Update is called once per frame
    13. void Update()
    14. {
    15. // 此时的摄像机必须转换 2D摄像机 来实现效果(即:摄像机属性Projection --> Orthographic)
    16. Vector3 dis = Camera.main.ScreenToWorldPoint(Input.mousePosition); //获取鼠标位置并转换成世界坐标
    17. dis.z = this.transform.position.z; //固定z轴
    18. this.transform.position = dis; //使物体跟随鼠标移动
    19. if (Input.GetMouseButtonDown(0))
    20. {//按下鼠标左键
    21. isFire = true;
    22. animator.SetBool("Fire", isFire);
    23. }else
    24. {
    25. isFire = false;
    26. animator.SetBool("Fire", isFire);
    27. }
    28. }
    29. }

     开火按钮也可写做

     if (Input.GetButtonDown("Fire1"))

    因为默认设置的Fire1就是鼠标左键

     也可以改为其他按键(space-空格或者abcd……)

     6、给子弹预制体添加刚体组件

     Collision Detection改为Continuous为了在快速移动中检测所有物体。

    Constraints中的勾选是为了限制沿z轴的旋转。

    7、添加碰撞盒

     8、编辑 shoot()

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class Movement : MonoBehaviour
    5. {
    6. public Animator animator;//加载动画组件
    7. public Transform firePoint;//获取开火点位置
    8. public GameObject bulletPrefeb;//获取子弹预制体
    9. bool isFire;
    10. void Start()
    11. {
    12. isFire = false;
    13. }
    14. // Update is called once per frame
    15. void Update()
    16. {
    17. // 此时的摄像机必须转换 2D摄像机 来实现效果(即:摄像机属性Projection --> Orthographic)
    18. Vector3 dis = Camera.main.ScreenToWorldPoint(Input.mousePosition); //获取鼠标位置并转换成世界坐标
    19. dis.z = this.transform.position.z; //固定z轴
    20. this.transform.position = dis; //使物体跟随鼠标移动
    21. if (Input.GetButtonDown("Fire1"))
    22. {//按下鼠标左键
    23. isFire = true;
    24. animator.SetBool("Fire", isFire);
    25. //开火逻辑
    26. Shoot();
    27. }else
    28. {
    29. isFire = false;
    30. animator.SetBool("Fire", isFire);
    31. }
    32. }
    33. //开火函数
    34. void Shoot()
    35. {
    36. //预制体实例化
    37. Instantiate(bulletPrefeb, firePoint.position, firePoint.rotation);//预制体文件、位置、旋转
    38. }
    39. }

    很鬼畜,子弹刚出来就掉下去了,因此,我们要给子弹添加速度 

     9、给预制体子弹添加移动脚本

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class Bullet : MonoBehaviour
    5. {
    6. public float speed = 20f;
    7. public Rigidbody2D rb;
    8. void Start()
    9. {
    10. rb.velocity = transform.right * speed;//让子弹沿着初始方向飞一会~
    11. }
    12. void OnCollisionEnter2D()//发生碰撞,则销毁子弹
    13. {
    14. Destroy(gameObject);
    15. }
    16. void OnTriggerEnter2D()
    17. {//使用时需要在刚体组件里面勾选Trigger
    18. Destroy(gameObject);
    19. }
    20. }

    刚体组件拖过来

     10、给目标添加碰撞盒和刚体组件

     Finsh

     

  • 相关阅读:
    【机器学习】21天挑战赛学习笔记(六)
    SUSE 12 SP5 安装MySQL后第一次修改mysql密码
    矿山定位系统-矿井人员定位系统在矿山自动化安全监控过程中的应用
    Ubuntu Flask 运行 gunicorn+Nginx 部署
    flutter开发报错The instance member ‘widget‘ can‘t be accessed in an initializer
    Elastic Stack--09--ElasticsearchRestTemplate
    [附源码]SSM计算机毕业设计班级风采网站JAVA
    部署WekaFS并行文件系统的10大理由
    JavaScript | 闭包
    2023 ICCV和 CVPR论文集合
  • 原文地址:https://blog.csdn.net/qq_51701007/article/details/126513302
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号