【Unity保龄球项目】的实现逻辑以及代码解释

1.BaoLQManager.cs

这个脚本实现了基本的保龄球游戏逻辑,包括扔球功能。 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class BaoLQManager : MonoBehaviour
{// 业务逻辑1:把保龄球扔出去// 业务逻辑2:保龄球走直线把前面的柱子撞倒// 业务逻辑3:如果撞倒一个就+一分// 业务逻辑4:如果撞到以后-间隔2秒消失// 程序逻辑1:把球和被撞柱子存到代码变量里// 程序逻辑2:当用户按下空格或者左键,就用Rigidbody类给球添加一个力 - 业务逻辑1:把保龄球扔出去// 程序逻辑3:Collider类-碰撞检测,如果有人碰到我,我就让变量+1加分public Rigidbody BaoLqRIGI; // 获取保龄球的刚体组件public float ForceStrength = 100f; // 定义施加力的强度bool IsShot = true; // 这是一个开关,用来控制是否允许加力void Start(){IsShot = true; // 初始化开关,允许加力}void FixedUpdate(){// 检查保龄球的刚体组件是否存在if (BaoLqRIGI != null){// 检查用户是否按下鼠标左键或空格键,并且是否允许加力if ((Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) && IsShot){// 给保龄球添加一个爆发力,方向为正Z轴,力的大小为ForceStrengthBaoLqRIGI.AddForce(new Vector3(0, 0, 1 * ForceStrength * Time.deltaTime), ForceMode.Impulse);// 设置开关为false,防止重复加力IsShot = false;}}else{// 如果保龄球的刚体组件不存在,输出调试信息Debug.Log("你的球已经没有了,怎么还在点");}}}

脚本概述

这个脚本名为 BaoLQManager,主要负责控制保龄球的行为,包括:

  1. 将保龄球扔出去。

  2. 保龄球走直线把前面的柱子撞倒。

  3. 如果撞倒一个柱子就加一分。

  4. 如果撞到柱子后,间隔2秒消失。

变量声明

csharp

复制

public Rigidbody BaoLqRIGI; // 获取保龄球的刚体组件
public float ForceStrength = 100f; // 定义施加力的强度
bool IsShot = true; // 这是一个开关,用来控制是否允许加力
  • BaoLqRIGI:保龄球的刚体组件,用于控制保龄球的运动。

  • ForceStrength:施加力的强度,控制保龄球被扔出去的力度。

  • IsShot:一个开关变量,用于控制是否允许给保龄球加力。

Start 方法

csharp

复制

void Start()
{IsShot = true; // 初始化开关,允许加力
}
  • 在游戏开始时,初始化 IsShot 为 true,允许加力。

FixedUpdate 方法

csharp

复制

void FixedUpdate()
{// 检查保龄球的刚体组件是否存在if (BaoLqRIGI != null){// 检查用户是否按下鼠标左键或空格键,并且是否允许加力if ((Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) && IsShot){// 给保龄球添加一个爆发力,方向为正Z轴,力的大小为ForceStrengthBaoLqRIGI.AddForce(new Vector3(0, 0, 1 * ForceStrength * Time.deltaTime), ForceMode.Impulse);// 设置开关为false,防止重复加力IsShot = false;}}else{// 如果保龄球的刚体组件不存在,输出调试信息Debug.Log("你的球已经没有了,怎么还在点");}
}
  • FixedUpdate 方法在每一帧中调用,用于处理物理相关的更新。

  • 首先检查保龄球的刚体组件 BaoLqRIGI 是否存在。

    • 如果存在,检查用户是否按下鼠标左键或空格键,并且 IsShot 为 true

      • 如果条件满足,给保龄球施加一个爆发力,方向为正Z轴,力的大小为 ForceStrength

      • 施加力后,将 IsShot 设置为 false,防止重复加力。

    • 如果保龄球的刚体组件不存在,输出调试信息。

总结

这个脚本的逻辑可以总结为以下几个步骤:

  1. 初始化:

    • 在 Start 方法中,初始化 IsShot 为 true,允许加力。

  2. 物理更新:

    • 在 FixedUpdate 方法中,每一帧检查保龄球的刚体组件是否存在。

    • 如果存在,检查用户是否按下鼠标左键或空格键,并且 IsShot 为 true

    • 如果条件满足,给保龄球施加一个爆发力,方向为正Z轴,力的大小为 ForceStrength

    • 施加力后,将 IsShot 设置为 false,防止重复加力。

    • 如果保龄球的刚体组件不存在,输出调试信息。

这个脚本实现了基本的保龄球扔出去的功能,通过用户输入来控制保龄球的运动。后续可以扩展这个脚本,添加碰撞检测、分数计算和柱子消失等功能。

2.BLqCollision  

这个脚本实现了保龄球的碰撞检测和分数计算功能,并且在特定条件下销毁碰撞到的物体或保龄球本身。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class BLqCollision : MonoBehaviour
{// 这个脚本实现,以保龄球的视角做碰撞检测,检测有没有碰到别人,如果碰到了就返回个信号int YourScore; // 定义一个整数变量,用于存储分数void Start(){YourScore = 0; // 初始化分数为0}// 当有物体碰撞到保龄球时调用此方法private void OnCollisionEnter(Collision collision) // 执行入口{// 这里是碰撞检测,一旦有物体碰到了我所在的脚本所挂的物体,就会被执行一次Debug.Log("有人碰到我了"); // 输出调试信息,表示有物体碰撞到了保龄球string name = collision.gameObject.name; // 获取碰撞到的物体的名称// 检查碰撞到的物体是否是 "Road" 或 "Plane"if (name == "Road" || name == "Plane"){Debug.Log("不好意思,没撞到,再接再厉!"); // 输出调试信息,表示没有撞到有效的目标}else{YourScore = YourScore + 1; // 如果碰撞到的不是 "Road" 或 "Plane",则分数加1Debug.Log("我的分数是:" + YourScore + " 我碰到的花瓶叫:" + name); // 输出调试信息,显示当前分数和碰撞到的物体名称}}// 当保龄球离开一个碰撞器时调用此方法private void OnCollisionExit(Collision collision){Debug.Log("球离开了一个碰撞器,离开的对象叫:" + collision.gameObject.name); // 输出调试信息,表示保龄球离开了某个碰撞器// 检查离开的物体是否是 "Road"if (collision.gameObject.name != "Road"){GameObject.Destroy(collision.gameObject, 2f); // 如果不是 "Road",则在2秒后销毁离开的物体}else{// 如果保龄球离开了 "Road",则立即销毁球Debug.Log("立即销毁球"); // 输出调试信息,表示立即销毁保龄球GameObject.Destroy(this.gameObject); // 销毁保龄球}}
}

详细注释:

  1. 变量声明:

    • YourScore:一个整数变量,用于存储分数。

  2. Start 方法:

    • 初始化 YourScore 为 0

  3. OnCollisionEnter 方法:

    • 当有物体碰撞到保龄球时调用此方法。

    • 输出调试信息,表示有物体碰撞到了保龄球。

    • 获取碰撞到的物体的名称。

    • 检查碰撞到的物体是否是 "Road" 或 "Plane"。

      • 如果是 "Road" 或 "Plane",输出调试信息,表示没有撞到有效的目标。

      • 如果不是 "Road" 或 "Plane",则分数加1,并输出调试信息,显示当前分数和碰撞到的物体名称。

  4. OnCollisionExit 方法:

    • 当保龄球离开一个碰撞器时调用此方法。

    • 输出调试信息,表示保龄球离开了某个碰撞器。

    • 检查离开的物体是否是 "Road"。

      • 如果不是 "Road",则在2秒后销毁离开的物体。

      • 如果是 "Road",则立即销毁保龄球,并输出调试信息,表示立即销毁保龄球。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544081.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

祝桥镇星光村火情闪电救援:速控之下,安全警钟长鸣

安科瑞武陈燕 在秋日的午后,阳光本应温柔地洒在浦东新区祝桥镇星光村的每一个角落,然而,一场突如其来的火灾打破了这份宁静。 9月2日中午12时许,该村1队的一户居民家中突然燃起熊熊大火,浓烟滚滚自二楼窗口腾空而起&…

gdb调试和makefile管理

一.gdb调试工具 命令 简写 作用 help h 按模块列出命令类 help class 查看某一类型的具体命令 lsit l 查看代码,可跟行号和函数名 quit q 退出gdb run r 全速运行程序 start 单步执行,运行程序,停在第一行执行语句 next …

Qt 窗口类的继承关系和作用

核心基类 [1] QObject:Qt中许多类的基类,支持Qt对象模型,包括信号和槽机制、对象树和事件系统等。虽然它本身不是直接用于创建窗口的,但它是许多窗口和控件类继承链中的重要一环。 注:如果你创建了一个自定义类&…

杰发科技——Eclipse环境安装

文件已传到网盘: 1. 安装文件准备 2. 安装Make 默认路径:C:\Program Files (x86)\GnuWin32\bin\ 不复制的话会报错 Error: Program "make" not found in PATH 3. 安装工具链 默认路径:C:\Program Files (x86)\Arm GNU Toolchain…

OpenAI converting API code from GPT-3 to chatGPT-3.5

题意:将OpenAI API代码从GPT-3转换为ChatGPT-3.5 问题背景: Below is my working code for the GPT-3 API. I am having trouble converting it to work with chatGPT-3.5. 以下是我用于GPT-3 API的工作代码。我在将其转换为适用于ChatGPT-3.5时遇到了…

Android Studio 真机USB调试运行频繁掉线问题

一、遇到问题 Android Studio使用手机运行项目时,总是频繁掉线,连接很不稳定,动不动就消失,基本上无法使用 二、问题出现原因 1、硬件问题:数据线 换条数据线试试,如果可以,那就是数据线的…

15年408-数据结构

第一题 解析: 栈第一次应该存main的信息。 然后进入到main里面,要输出S(1),将S(1)存入栈内, 进入到S(1)中,1>0,所以还要调用S(0) S(0)进入栈中,此时栈内从下至上依次是main(),S(1),S(0) 答案选A 第二题&…

昇腾AI异构计算架构CANN——高效使能AI原生创新

异构计算与人工智能的关系是什么?昇腾AI异构计算架构CANN是什么?有哪些主要特点?开发者如何利用CANN的原生能力进行大模型创新,构筑差异化竞争力?带着这些问题,我们来认识昇腾AI异构计算架构——CANN。 1 …

随机验证码验证【JavaScript】

这段 JavaScript 代码实现了随机验证码的生成和验证功能。 实现效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-…

Vue3教程 - 2 开发环境搭建

更好的阅读体验&#xff1a;点这里 &#xff08; www.foooor.com &#xff09; 2 开发环境搭建 要进行 Vue 开发&#xff0c;需要安装 Node.js&#xff0c;因为构建 Vue 项目的工具&#xff0c;例如 Webpack、Vite等&#xff0c;这些工具依赖于Node.js环境来运行。 Node.js…

OpenAI GPT-3 API: What is the difference between davinci and text-davinci-003?

题意&#xff1a;OpenAI GPT-3 API&#xff1a;davinci 和 text-davinci-003 有什么区别 问题背景&#xff1a; Im testing the different models for OpenAI, and I noticed that not all of them are developed or trained enough to give a reliable response. 我正在测试…

玩手机数据集 8201张玩手机的照片,有对应的xml和txt文件,可以用于yolo训练

玩手机数据集 8201张玩手机的照片&#xff0c;有对应的xml和txt文件&#xff0c;可以用于yolo训练 玩手机数据集&#xff08;Phone Usage Detection Dataset&#xff09; 数据集概述 该数据集专为检测人们使用手机的行为设计&#xff0c;旨在帮助研究人员和工程师开发高效的…

Sentinel-1 数据处理时如何手动下载高程数据

在Sentinel-1 数据数据预处理时&#xff0c;会使用高程数据进行地形校正。但选择自动下载高程时&#xff0c;由于网络原因经常会卡死&#xff0c;造成预处理过程不能正常进行&#xff01; 这个问题经过我的反复实践&#xff0c;可以通过手动下载高程数据来解决。下面是具体方法…

MySQL之基本查询(一)(insert || select)

目录 一、表的增删查改 二、表的增加insert 三、表的读取select where 条件子句 结果排序 筛选分页结果 一、表的增删查改 我们平时在使用数据库的时候&#xff0c;最重要的就是需要对数据库进行各种操作。而我们对数据库的操作一般来说也就是四个操作&#xff0c;CRUD :…

【学术会议征稿】第七届电力电子与控制工程国际学术会议(ICPECE 2024)

高录用|快检索|JPCS独立出版ISSN:1742-6596 连续6年EI检索&#xff0c;稳定且快速 见刊后均1个月检索 第七届电力电子与控制工程国际学术会议&#xff08;ICPECE 2024&#xff09; 2024 7th International Conference on Power Electronics and Control Engineering 2024年…

认知作战壳吉桔:未来认知战战略全案发展趋势

认知作战壳吉桔&#xff1a;未来认知战战略全案发展趋势 认知作战壳吉桔&#xff1a;未来认知战战略全案发展趋势 关键词&#xff1a;认知战战术融合, 数据驱动决策, 生成式人工智能AIGC, 影响力认知, 个性化定制, 沉浸式体验, 视频直播认知, 受众体验优化, 社交媒体互动, 可…

[PICO VR]Unity如何往PICO VR眼镜里写持久化数据txt/json文本

前言 最近在用PICO VR做用户实验&#xff0c;需要将用户实验的数据记录到PICO头盔的存储空间里&#xff0c;记录一下整个过程 流程 1.开启写入权限 首先开启写入权限&#xff1a;Unity->Edit->Player->安卓小机器人->Other Settings->Configuration->Wri…

如何用LightningChart Python实现地震强度数据可视化应用程序?

LightningChart Python是知名图表控件公司LightningChart Ltd正在研发的 Python 图表&#xff0c;目前还未正式推出&#xff0c;感兴趣的朋友可以戳文末链接申请试用&#xff01; 什么是地面震动强度 Python 应用程序&#xff1f; 地面震动是地震的基本特征&#xff0c;会对建…

【Linux】fork入门级使用

目录 一、前置准备 1、进程的基本概念 2、进程标识符PID、PPID 1&#xff09;pid介绍 2&#xff09;获取pid和ppid 二、fork函数 1、fork的基本介绍 1&#xff09;fork&#xff08;&#xff09;&#xff1a; 创建子进程 2&#xff09;对于函数具体的描述 3&#xff09…

yuque-dl-语雀知识库下载为本地markdown

之前有下载语雀的需求&#xff0c;发现了一个开源项目&#xff0c;用起来还是很顺手的 需要环境 需要前端的node环境 https://nodejs.cn/ Node.js 18.4 or later 插入 npm i -g yuque-dl 使用 $ yuque-dl --helpUsage:$ yuque-dl <url>Commands:<url> …