当前位置: 首页 > news >正文

【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.mrgr.cn/news/34121.html

相关文章:

  • 【Linux】指令和权限的这些细节,你确定都清楚吗?
  • Ubuntu的基本用法与指令(为后面学习ROS打基础)
  • 【BEV 视图变换】Ray-based(2): 代码复现+画图解释 基于深度估计、bev_pool(代码一键运行)
  • SpringBootWeb响应
  • 如何在产品上扩展大储存?外挂SPI Flash库轻松搞定!
  • 二维矩阵的行、列、斜线特征(二维数组)
  • 深入理解MySQL InnoDB中的B+索引机制
  • 【LLM论文日更】| GRIT如何统一文本生成与嵌入
  • HTTP、FTP 和 DICT,这三个协议,你真的了解吗?
  • JavaScript:数组遍历
  • 小程序开发设计-小程序的宿主环境:组件⑦
  • qt中QTatlewidget类常用操作表格的函数有哪些?
  • Cherry Studio:开启AI智能工作的新篇章
  • 倍增算法——AtCoder Beginner Contest 370 F
  • 【Linux系统编程】第二十二弹---操作系统核心概念:进程创建与终止机制详解
  • 众数信科 AI智能体政务服务解决方案——寻知智能审查系统
  • 跳蚤市场小程序|基于微信小程序的跳蚤市场(源码+数据库+文档)
  • 计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-19
  • UTON生态开发者签约大会圆满成功
  • 华为海思Hi3519DV500支持四路sensor 输入,支持 4K@30fps 内置双核 A55和 2.5Tops NN 算力