滚球游戏笔记

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;……}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css3多列布局

css3多列布局 colmns属性 columns属性是一个简写属性 column-count属性&#xff1a;定义列的数量或者允许的最大列数 auto 为默认值&#xff0c;用于表示列的数量由其他css属性决定number 必须是正整数&#xff0c;用于定义列数量 column-width属性&#xff1a;定义列的宽度 …

Java入门第01篇

文章目录 前言 一、Java是什么&#xff1f; 二、Java开发工具 1.Java 2.开发工具 3.构建工具 三、Java开发过程 1.IDEA操作 2.Maven操作 2.1本地jar包的情况 3.docker操作 总结 前言 机缘巧合&#xff0c;接触到了Java开发&#xff0c;那就把了解学习到的一些东西…

【Arc gis】使用DEM提取流域范围

地址&#xff1a;arcgis DEM 提取流域范围&#xff08;详细教程&#xff09;(空间分析--Hydrology)_gis的gridcode是什么意思-CSDN博客

AUTOSAR学习

文章目录 前言1. 什么是autosar&#xff1f;1.1 AP&#xff08;自适应平台autosar&#xff09;1.2 CP&#xff08;经典平台autosar)1.3 我的疑问 2. 为什么会有autosar3.autosar的架构3.1 CP的架构3.1.1 应用软件层3.1.2 运行时环境3.1.3 基础软件层 3.2 AP的架构 4. 参考资料 …

shell脚本中的变量

关于Linux操作系统中当前shell进程与子shell进程的详细解释 如上图所示&#xff0c;使用ps -f可以当前查看Linux操作系统中当前正在运行的进程。 然后敲bash后&#xff0c;相当于在当前的bash shell环境下又创建了一个子bash shell的进程&#xff0c; 如上图所示&#xff0c;…

Qt | QPalette 类(调色版)

01、简介 1、需要用到 QWidget类中的如下属性 palette:QPalette 访问函数:const QPalette &palette() const; void setPalette(const QPalette&);  该属性描述了部件的调色板。在渲染标准部件时,窗口部件的样式会使用调色板,而且不同的平台或不同的样式通常具…

win环境安装Node.js的多种方式

今天我们分享win环境安装Node.js的多种方式&#xff1a; 首先要明白Node.js是一个JavaScript运行环境&#xff0c;它基于Google的V8引擎进行封装&#xff0c;允许JavaScript运行在服务器端。Node.js让JavaScript成为一种与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语…

图神经网络入门(1)-networkx

简介 NetworkX是一个Python语言的图论建模工具&#xff0c;用于创建、操作复杂网络结构&#xff08;如图、有向图等&#xff09;。它提供了许多用于分析网络、生成随机网络、以及可视化网络的函数和工具。用户可以利用NetworkX来研究复杂网络的拓扑结构、节点间的关系以及路径查…

【GIS案例】居住环境适宜性评价

目的: 拟购买住宅,需在现有条件下,基于地理空间分析方法和空间认知模型对居住环境进行综合评价。通过该实验掌握基于GIS的地理空间认知方法及土地适宜性评价基本原理与方法。 数据: (1)人口调查图(pop); (2)公园入口图(parkgate); (3)医院分布图(hospital…

【RK3588/算能/Nvidia智能盒子】挑战「无电无网」部署AI算法,守护大亚湾荃美石化码头工地安全

“万顷碧波之上&#xff0c;一座千米钢栈桥如蛟龙出水&#xff0c;向大海蜿蜒。钢栈桥上的项目建设者正在加紧作业&#xff0c;为助推惠州大亚湾加快建设成为世界级绿色石化基地全力奋战。”这是不久前北京日报对大亚湾惠州港荃湾港区荃美石化码头工地的描述。 △ 图片来源于北…

vue项目cnpm i 报错

报错内容&#xff1a; Install fail! TypeError: Cannot convert undefined or null to object npminstall version: 3.28.1 npminstall args: C:\Program Files\nodejs\node.exe C:\Users\user\AppData\Roaming\nvm\v12.4.0\node_modules\cnpm\node_modules\npminstall\bin\i…

序列化与反序列化漏洞实例

实验环境&#xff1a; 本次的序列化与反序列化漏洞为2021年强网杯上的一道比赛题目&#xff0c;我使用phpstudy集成环境将其测试环境搭建在了本地&#xff0c;如下。涉及的几个页面php为&#xff1a; index.php function.php myclass.php index.php : <?php // inde…

2024年阿里巴巴全球数学竞赛首次向人工智能(AI)开放

大家好&#xff0c;我是微学AI&#xff0c;最近大家突然开始关注阿里巴巴全球数学竞赛了&#xff0c;在这个人工智能爆发的时代&#xff0c;2024年阿里巴巴全球数学竞赛首次向人工智能&#xff08;AI&#xff09;开放&#xff0c;要求参赛的AI模型在比赛前提交源代码&#xff0…

数据上云--科技感满满

迁移上云&#xff1a;目的 1 为什么要上云 ① 公司发展规划&#xff0c;需要上云 如果我自己公司是自研的 ② 国家要求&#xff0c;第二&#xff1a;自研产品&#xff0c;但是公司不是纯靠销售来去盈利发展&#xff0c;而还会设计需要将我们的技术服务&#xff0c;提供给客户…

个人博客测试用例设计

个人博客测试用例设计 个人博客测试用例 分别从功能、性能、安全、兼容及界面分别展开 个人博客测试用例

【长春理工大学主办 | EI检索稳定 | SPIE出版 | 过往4届均检索 】第五届计算机视觉和数据挖掘国际学术会议(ICCVDM 2024)

第五届计算机视觉和数据挖掘国际学术会议&#xff08;ICCVDM 2024&#xff09; 2024 5th International Conference on Computer Vision and Data Mining 会议简介 第五届计算机视觉与数据挖掘国际学术会议&#xff08;ICCVDM 2024&#xff09;将于2024年7月19-21日在中国长春…

内部类介绍

内部类&#xff08;Inner Class&#xff09;是在另一个类的内部定义的类。它可以访问外部类的所有成员&#xff0c;包括私有成员。内部类有两种主要形式&#xff1a;局部内部类&#xff08;定义在方法内部&#xff09;和成员内部类&#xff08;定义在类的内部&#xff0c;但不在…

day02论文学习:能够使大语言模型产生带有引用的文章

1.主题&#xff1a;Enabling Large Language Models to Generate Text with Citations&#xff08;能够使大语言模型产生带有引用的文章&#xff09; 引用出处&#xff1a; Gao, T., Yen, H., Yu, J., & Chen, D. (2023). Enabling Large Language Models to Generate Tex…

PostgreSQL源码分析——CREATE SERVER

我们分析一下外部数据包装器中创建外部服务器的CREATE SERVER命令的实现源码。前面已经分析过很多DDL的语法实现。这里简单描述一下大致过程。 主流程如下所示&#xff1a; exec_simple_query(query_string); --> pg_parse_query(query_string);--> raw_parser(query_s…

Java基础 - 练习(二)打印菱形

Java基础练习 打印菱形&#xff0c;先上代码&#xff1a; // 方法一&#xff1a;基础&#xff0c;好理解 public static void diamond() {//控制行数for (int i 1; i < 4; i) {//空格的个数for (int k 1; k < 4 - i; k) {System.out.print(" ");}//控制星星…