Unity制作射击游戏案例01

2023-09-22 10:14:46

 整理逻辑思路:

//【业务逻辑】这个脚本用来1.控制物体移动旋转(WASD)、   2.发射子弹(空格键)

//【程序逻辑2】

首先检测用户没有按下空格键 2.如果按下呢执行发射子弹函数    3.克隆子弹 4.让克隆的子弹往前跑

搭建场景

为子弹模板添加刚体,并且限制旋转

 

编写脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RoleControl : MonoBehaviour
{

    //【业务逻辑】这个脚本用来1.控制物体移动旋转(WASD)、
    //2.发射子弹(空格键)
    //【程序逻辑2】首先检测用户没有按下空格键 2.如果按下呢执行发射子弹函数 
    //3.克隆子弹 4.让克隆的子弹往前跑
    //用代码创建游戏物体

    GameObject OneMuban;
    GameObject ZIdanborn;
    GameObject ZidanFather;
    Rigidbody zidanRigi;

    GameObject TEMPZidan;//这个变量是用来存储临时克隆的物体
    float Speed = 10f; //用来提供移动旋转速度
    public float Forcedaxiao=10f;

    //-------------------------
    void Start()
    {
        OneMuban = GameObject.Find("Zidan");
        ZIdanborn = GameObject.Find("ZIdanborn");
        ZidanFather = GameObject.Find("ZidanFather");
    }
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Debug.Log("用户按下空格");
            FPSshot();
            Debug.Log("子弹克隆完毕");
        }
        Object.Destroy(TEMPZidan,3f);//3秒后自动销毁子弹

        ControlRole();//用来控制物体移动和旋转
    }
    void FPSshot()//这是一个自定义函数用来执行子弹的克隆与发射,3.克隆子弹 4.让克隆的子弹往前跑
    {
         Debug.Log("开始执行发射子弹");
         TEMPZidan= GameObject.Instantiate(OneMuban, ZIdanborn.transform.position,  Quaternion.Euler(90, 0, 0), ZidanFather.transform);
        //TEMPobj.transform.Translate(new Vector3(0, 100, 0));
        //添加一个力,只需添加一次,就会一直往前跑
        zidanRigi = TEMPZidan.GetComponent<Rigidbody>();//获取克隆的子弹的刚体组件
        //给克隆的子弹的刚体组件添加力
        zidanRigi.AddForce(ZIdanborn.transform.forward*Forcedaxiao, ForceMode.Impulse);
       
    }
    void ControlRole()
    {
        Debug.Log("控制物体角色移动旋转");
        float X = Input.GetAxis("Horizontal");
        float Y = Input.GetAxis("Vertical");
        transform.Translate(new Vector3(X * Speed * Time.deltaTime, 0, Y * Speed * Time.deltaTime), Space.Self);//这个函数是获取WASD参数X,Y得到-1-1,然后赋值到三维向量作为移动函数的数值
        float RoteteY = Input.GetAxis("Mouse X");
        transform.Rotate(new Vector3(0, RoteteY * Speed, 0));
    }
    
}

//类=变量+函数(计算方法)

更多推荐

400电话的办理和申请流程详解

导语:随着企业的发展和市场竞争的加剧,越来越多的企业开始关注客户服务体验的提升。而办理400电话成为了企业提升客户服务质量的重要手段之一。本文将详细介绍400电话的办理和申请流程,帮助企业了解如何顺利获得400电话。一、了解400电话的概念和优势400电话是一种虚拟电话号码,以400开头,由运营商提供的电话服务。相比于

QT&C++ day12

注册登录界面widget.h#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QIcon>#include<QPushButton>#include<QLineEdit>#include<QLabel>#include<QDebug>#include<QMe

Ubuntu 22 Docker的使用和安装

确认系统内核版本不低于3.10,并且是64位系统,在终端执行以下命令验证内核及系统信息:$uname-aLinuxVM-4-14-ubuntu5.15.0-76-generic#83-UbuntuSMPThuJun1519:16:32UTC2023x86_64x86_64x86_64GNU/Linux通过上面的输出可知

面经学习三

目录Java与C++的区别面向对象和面向过程的区别面向对象特性Java的基本数据类型深拷贝和浅拷贝Java创建对象的几种方式final,finally,finalize的区别Java与C++的区别Java是纯粹的面向对象语言,所有的对象都继承自java.lang.Object,C++兼容C,不但支持面向对象也支持面向过

Spring Cloud Alibaba

单体应用优点:1、系统的简易性:系统语言风格、业务结构,接口格式均具有一致性,服务都是耦合在一起的,不存在各个业务通信问题。2、易于测试:单体应用一旦部署,所有的服务或特性就都可以使用了,简化了测试过程,无需额外测试服务间的依赖,测试均可在部署完成后开始。3、易于部署与升级:相对于微服务架构中的每个服务独立部署,单体系

Java基础面试题精选:深入探讨哈希表、链表和接口等

目录1.ArrayList和LinkedList有什么区别?🔒2.ArrayList和Vector有什么区别?🔒3.抽象类和普通类有什么区别?🔒4.抽象类和接口有什么区别?🔒5.HashMap和Hashtable有什么区别?🔒6.HashMap底层是如何实现的?🔒7.HashMap和HashSet有什么区别

【每日一题Day330】LC337打家劫舍Ⅲ | 动态规划

打家劫舍Ⅲ【LC337】小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。除了root之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。给定二叉树的root。返回在

基于开源模型搭建实时人脸识别系统(六):人脸识别(人脸特征提取)

文章目录人脸识别的几个发展阶段基于深度学习的人脸识别技术的流程闭集和开集(Openset)识别人脸识别的损失Insightface人脸识别数据集模型选型参考文献结语人脸识别系统项目源码前面我们讲过了人脸检测、人脸质量、人脸关键点、人脸跟踪,接下来就是人脸识别系统里面的重中之重人脸识别了,或者叫人脸特征提取,这个算法是来

深入JVM:探索Java虚拟机

文章目录1.JVM简介1.1定义与核心作用1.2JVM的跨平台特性2.JVM内部结构深度探索2.1类加载机制2.1.1双亲委派模型2.1.2OSGI框架2.1.3类加载器分类2.2JVM运行时数据区2.2.1程序计数器2.2.2本地方法栈2.2.3Java虚拟机栈2.2.4堆2.2.5元数据区2.3JVM内存区域的性能

论文阅读 Extended Feature Pyramid Network for Small Object Detection

ExtendedFeaturePyramidNetworkforSmallObjectDetectionAbstract小目标检测仍然是一个未解决的挑战,因为仅凭几个像素很难提取小目标的信息。虽然特征金字塔网络中的scale-levelcorrespondingdetection减轻了这个问题,但我们发现不同尺度的特征

C++:constexpr 和 const 的区别

constexpr是C++11标准新添加的关键字,原先的标准中是只有const关键字的,作用是表示只读常量。但是,其实只读常量是两个属性,分为只读和常量,都用const来表示会产生歧义。看下面的例子#include<iostream>#include<array>usingnamespacestd;constintfu

热文推荐