• 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

     

  • 相关阅读:
    两个不起眼的站内小细节,决定你的独立站转化率
    FFmpeg 命令:从入门到精通 | ffmpeg 命令转封装
    2022-09-19 C++并发编程(二十三)
    JDK安装
    C现代方法(第3、4章)笔记
    附录7-使用bootstrap组件
    QTimer::singleShot问题及用法
    基于JAVA中文网络小说平台系统计算机毕业设计源码+系统+数据库+lw文档+部署
    Java+SpringBoot+Vue+MySQL:农业管理新篇章
    2. 在node中使用ts
  • 原文地址:https://blog.csdn.net/qq_51701007/article/details/126513302