滚球游戏笔记
1、准备工作
(1) 创建地面:3D Object-Plane,命名为Ground
(2) 创建小球:3D Object-sphere,命名为Player,PositionY= 0.5。添加Rigidbody组件
(3) 创建文件夹:Create-Foder,分别命名为Materials、Scripts、Audio
2、颜色设置
(1) 在Materials文件夹,Create-Material。命名为GroundMaterial,更改颜色(128,181,128)
颜色:透明度A(0~255) 红R(0~255) 绿G(0~255) 蓝B(0~255)


(2) 地面颜色:拖拽GroundMaterial 到Ground
(3) 小球颜色:同样的方法设置
2、使小球运动
(1) 原理:施加一个力(大小、方向、作用点)通过Input.GetAxes() 方法获取Axes中的名称
Edit-Project Setting

Input.GetAxis("Horizontal"):
获取水平轴的输入值。水平轴通常表示左右移动的输入。该函数会返回一个介于-1到1之间的值
即:玩家按下Negative Button,Horizontal 的取值向-1偏移(一般表示向左移)
玩家持续按住不放,Horizontal 持续为 -1。(方向持续向左)
当玩家没有输入或处于中立位置时,这个值通常接近 0
(2) 添加 PlayerCtrller.cs 组件
public float speed = 10f;private Rigidbody rb;//声明刚体void Start(){rb =this.GetComponent<Rigidbody>();//获取挂载此脚本物体(小球)的Rigidbody组件,并将之赋值给rb;方便后续设置小球运动}void Update(){float moveH = Input.GetAxis("Horizontal");//获取水平轴的输入值,并赋值给moveHfloat moveV = Input.GetAxis("Vertical");//垂直方向//力的方向Vector3 movement = new Vector3(moveH, 0,moveV);//movement * speed: 力的方向和大小//将力施加到刚体上,使刚体(小球)根据物理规则移动。rb.AddForce(movement*speed);}
3、创建环境
(1) 3D Object-Cube。命名为Wall。设置颜色、大小、位置
(2) 用同样的方法制作另外三面墙
4、创建旋转的金币
(1) 3D Object-Cube。设置颜色、大小、位置
(2) 旋转的原理
旋转角度的表示方式之一:欧拉角
旋转的顺序是:Z轴—X轴—Y轴
(3) CoinCtrller.cs 组件
public float speed = 5f;void Update(){this.transform.Rotate(new Vector3(30,45,90)*speed*Time.deltaTime);}
(4) 将金币制成预制件
5、接触事件——金币消失
(1) 打开PlayerCtrller.cs
private void OnTriggerEnter(Collider other){if (other.gameObject.CompareTag("coin")){other.gameObject.SetActive(false);}}
(2) 不必要缓存处理:
方法一:给金币添加Rigidbody组件(从静态Collider变为动态Collider)后勾选Is Kinematic或取消勾选Use Gravity

方法二:
if (other.gameObject.CompareTag("coin")){//Destroy(other.gameObject);}
6、镜头跟随
(1) 原理:使球与摄像机保持固定的角度和距离
(2) 给Main Camera添加CamraCtrller.cs组件
public Transform Player;//小球的Transformprivate Vector3 offset;//小球与摄像机位置的偏移(在三轴上的距离)void Start(){offset = Player.position - this.transform.position;}void LateUpdate(){this.transform.position = Player.position-offset;}
(3) 回到Unity赋值
7、PlayerCtrller.cs调整:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerCtrler : MonoBehaviour
{public float speed = 10f;private float moveH = 0;private float moveV = 0;private Rigidbody rb;//声明刚体// Start is called before the first frame updatevoid Start(){rb =this.GetComponent<Rigidbody>();//获取挂载此脚本物体(小球)的Rigidbody组件,并将之赋值给rb;方便后续设置小球运动}// Update is called once per framevoid Update(){moveH = Input.GetAxis("Horizontal");//获取水平轴的输入值,并赋值给moveHmoveV = Input.GetAxis("Vertical");//垂直方向}private void FixedUpdate(){//力的方向Vector3 movement = new Vector3(moveH, 0, moveV);//movement * speed: 力的方向和大小//将力施加到刚体上,使刚体(小球)根据物理规则移动。rb.AddForce(movement * speed);}private void OnTriggerEnter(Collider other){if (other.gameObject.CompareTag("coin")){other.gameObject.SetActive(false);//或者将other物体添加Rigidbody组件以清除缓存//Destroy(other.gameObject);}}}
注意:
若在Update中使用movement,需乘以Time.deltaTime以确保相同的速度在不同帧率下保持一致。而在FixedUpdate中使用movement时,不需要
8、UI交互——Score
(1) UI-Text,命名ScoreText。宽高:240*64;Alt+左上角锚点。文本改为Score,改变字号、颜色
(2) 打开PlayerCtrller.cs
using UnityEngine.UI;private int score = 0;
public Text scoreText;private void OnTriggerEnter(Collider other){if (other.gameObject.CompareTag("coin")){//……score++;scoreText.text ="Score:" + score.ToString();}}
(3) 赋值
9、UI交互——Win
(1) UI-Text,命名WinText。Reset。宽高:240*128;。文本改为Win,改变字号、颜色,居中
(2) 打开PlayerCtrller.cs
public Text winText;void Start(){……winText.gameObject.SetActive(false);}private void OnTriggerEnter(Collider other){if (other.gameObject.CompareTag("coin")){……if (score == 4){winText.gameObject.SetActive(true);//显示文本物体}}}
10、UI交互——按钮_01(出现和隐藏)
(1) UI-Button (Legacy),命名为RestartBtn。调整位置(-200,-100)和文本内容Restart
(2) UI-Button (Legacy),命名为QuitBtn。调整位置(200,-100)和文本内容Quit
(3) 打开PlayerCtrller.cs
public Button restartBtn;public Button QuitBtn;void Start(){……restartBtn.gameObject.SetActive(false);//隐藏按钮物体QuitBtn.gameObject.SetActive(false);//隐藏按钮物体}private void OnTriggerEnter(Collider other){if (other.gameObject.CompareTag("coin")){……if (score == 4){……restartBtn.gameObject.SetActive(true);QuitBtn.gameObject.SetActive(true) ;}}}
(4) 赋值
10、UI交互——按钮_02(按钮事件)
(1) 在Canvas下,Create Empty。命名为BtnCtrller
(2) 给空物体BtnCtrller添加BtnCtrller.cs
using UnityEngine.SceneManagement;public class BtnCtrller : MonoBehaviour
{public void OnRestart(){SceneManager.LoadScene("SampleScene");}public void OnQuit(){Application.Quit();//退出}
}
(2) 设置按钮的On Click
11、添加音效
(1) 将背景音乐 bgAudio 拖放到Hierarchy面板
(2) 选中 bgAudio,勾选开始运行就播放、循环播放。调节音量(volume)
![]()
(3) 将吃金币音效拖放到Hierarchy面板的Player上
(4) 选中 Player,取消勾选开始运行就播放、循环播放。调节音量(volume)
(5) 打开PlayerCtrller.cs
public AudioSource triggerAudio;if (other.gameObject.CompareTag("coin")){……triggerAudio.Play();score++;……}
(6) 赋值
(7) 同样的方法添加Win音乐
(8) 游戏结束,音乐停止
public AudioSource bgAudio;if (score == 4){……bgAudio.Stop();}
12、安卓版打包——添加手柄
(1) 下载并导入 资源包
(2) 打开Prefabs 文件夹,将 Fixed Joystick 拖放到Hierarchy面板上,调整大小和位置
(3) 打开PlayerCtrller.cs,调整脚本
public FixedJoystick fixedJoystick;void Start(){……fixedJoystick = GameObject.FindObjectOfType<FixedJoystick>();}private void FixedUpdate(){ ……//力的方向//Vector3 movement = new Vector3(moveH, 0, moveV);Vector3 movement = Vector3.forward* fixedJoystick.Vertical + Vector3.right * fixedJoystick.Horizontal;……}
相关文章:
滚球游戏笔记
1、准备工作 (1) 创建地面:3D Object-Plane,命名为Ground (2) 创建小球:3D Object-sphere,命名为Player,PositionY 0.5。添加Rigidbody组件 (3) 创建文件夹:Create-Foder,分别命名为Material…...
Mysql8死锁排查
Mysql8死锁排查 Mysql8 查询死锁的表 -- 查询死锁表select * from performance_schema.data_locks;-- 查询死锁等待时间select * from performance_schema.data_lock_waits;Mysql8之前的版本 查询死锁的表 -- 查询死锁表SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;-- 查询…...
程序猿成长之路之数据挖掘篇——决策树分类算法(1)——信息熵和信息增益
决策树不仅在人工智能领域发挥着他的作用,而且在数据挖掘中也在分类领域中独占鳌头。了解决策树的思想是学习数据挖掘中的分类算法的关键,也是学习分类算法的基础。 什么是决策树 用术语来说,决策树(Decision Tree)是…...
数据通信与网络(五)
交换机功能: 地址学习(端口/MAC地址映射表) 通信过滤(基于端口/MAC地址映射表) 生成树协议(断开环路) 隔离冲突域 生成树协议 隔离冲突域 交换机配置模式(用不同级别的命令对交换机进行配置) 普…...
数据中心容灾考题
abc cd abc c为啥...
win10远程桌面连接端口,远Win10远程桌面连接端口修改及无法连接解决方案
一、Win10远程桌面连接端口概述 Win10远程桌面连接功能允许用户从远程位置访问和控制另一台计算机。远程桌面连接默认使用TCP 3389端口,但出于安全或其他需求,用户可能希望修改此端口。 二、Win10远程桌面连接端口修改方法 要修改Win10远程桌面连接的…...
基于AT89C52单片机的温度报警系统
点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/89456321?spm=1001.2014.3001.5503 仿真构造:AT89C52+DS18B20温度模块+三按键+蜂鸣器+四位数码管显示+电源模块。 压缩包构造:源码+仿真图+设计文档+原理图+开题文档+元件…...
[保姆级教程]uniapp配置vueX
文章目录 注意新建文件简单的使用 注意 uniapp是支持vueX的只需配置一下就好 新建文件 在src文件中,新建一个store(如果有的话跳过) 在store中新建一个js文件,修改js文件名称和选择模板为default 在 uni-app 项目根目录下&…...
第二次IAG
IAG in NanJing City 我与南京奥体的初次相遇,也可能是最后一次! 对我来说,IAG 演唱会圆满结束啦! 做了两场充满爱[em]e400624[/em]的美梦 3.30号合肥站,6.21号南京站[em]e400947[/em] 其实,没想到昨天回去看呀!(lack of money […...
智慧校园综合管理系统的优点有哪些
在当今这个信息化飞速发展的时代,智慧校园综合管理系统正逐步成为教育领域的一股革新力量,它悄然改变着我们对传统校园管理的认知。这套系统如同一个无形的桥梁,将先进的信息技术与学校的日常运作紧密相连,展现出多维度的优势。 …...
如何跳出认知偏差,个人认知能力升级
一、教程描述 什么是认知力?认知力(cognitive ability),实际上就是指一个人的认知能力,是指人的大脑加工、储存和提取信息的能力,或者主观对非主观的事物的反映能力,如果变成大白话,…...
Scala中的map函数
Scala中的map函数 在 Scala 中,map 是一种常见的高阶函数,用于对集合中的每个元素应用一个函数,并返回应用了该函数后的新集合,保持原始集合的结构不变。它的主要作用有以下几点: 1. 遍历集合: map 可以遍历…...
linux安装conda环境实践
Conda介绍 conda 是一个开源的软件包管理系统和环境管理软件,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。 conda 分为 anaconda 和 miniconda,anaconda 是一个包含了许多常用库的集合版本,miniconda 是精简版…...
Flutter-实现头像叠加动画效果
实现头像叠加动画效果 在这篇文章中,我们将介绍如何使用 Flutter 实现一个带有透明度渐变效果和过渡动画的头像叠加列表。通过这种效果,可以在图片切换时实现平滑的动画,使 UI 更加生动和吸引人。 需求 我们的目标是实现一个头像叠加列表&…...
MSPM0G3507——特殊的串口0
在烧录器中有串口0,默认也是串口0通过烧录线给电脑发数据。 如果要改变,需要变一下LP上的跳线帽。 需要更改如下位置的跳线帽...
如何选择合适的大模型框架:LangChain、LlamaIndex、Haystack 还是 Hugging Face
节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…...
TCP 协议详解:三次握手与四次挥手
在网络通信中,确保数据准确无误地传递是至关重要的。TCP(Transmission Control Protocol,传输控制协议)作为一种面向连接的、可靠的、基于字节流的通信协议,在网络数据传输中起到了核心作用。本文将详细解析 TCP 的基本…...
Matlab 单目相机标定(内置函数,棋盘格)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 具体的标定原理可以参阅之前的博客Matlab 单目相机标定(内置函数),这里实现对棋盘格数据的标定过程。 二、实现代码 getCameraCorners.m function [camCorners, usedImIdx, imCheckerboard] = getCameraCorners(…...
C语言第17篇:预处理详解
1、预定义符号 C语言设置了一些预定义符号,可以直接使用。预定义符号也是在预处理期间处理的。 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSI…...
用 Git 玩转版本控制
前言 Git,作为当今最流行的版本控制系统,不仅深受程序员们的青睐,也逐渐成为非开发人员管理文档版本的强大工具。本文将从实用主义的角度出发,深入浅出地介绍 Git 的常用命令,并带领大家探索 Git 的高级功能ÿ…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
