素材巴巴 > 程序开发 >

Unity:Roll A Ball 学习笔记

程序开发 2023-09-09 23:53:32

一、创建项目、初始设置

1.1创建一个3D项目

1.2 在Assets文件夹下创建Scenes子文件夹用来保存游戏场景

创建一个游戏场景,命名为MiniGame,记得保存游戏项目。
在这里插入图片描述

1.3 创建游戏平面(Creat->3D Object->Plane)

将其重命名为Ground;将position设置为0,0,0。或者右上角选择重置,会将该游戏对象放置在场景0,0,0处。
改变平面的大小,可以直接沿坐标方向拉伸,也可以Transform中的Scale设置,这里将其设置成2,1,2
在这里插入图片描述
在这里插入图片描述

1.4 创建球体(Creat->3D Object->Sphere)

重命名为Player,重置位置,确保他在原点。但会发现球被埋在下面一点,所以将球上移,y=0.5
在这里插入图片描述

1.5 给场地和小球设置颜色:

在Assets文件夹下创建Materials子文件夹用来保存材质属性
创建材质(creat->Material),将其重命名为Background(要放在上面的文件夹下),设置颜色。单击文件夹中的素材,将其拖到场景上。
同样的方法创建另一个材质,命名为Player,选择颜色,拖拽到小球上。
在这里插入图片描述
在这里插入图片描述

二、移动小球

2.1 给小球对象添加刚体(rigidbody)属性关联游戏对象。

先选中小球对象,选择下方的添加组件(Add Component),选择rigidbody,会出现:
在这里插入图片描述

2.2 在Assets文件夹下创建Scripts子文件夹用来保存代码脚本

选中小球对象,添加组件,选择scripts,命名为PlayerController。
在这里插入图片描述
在这里插入图片描述

2.3 编辑PlayerController脚本

双击打开脚本文件(要用vs打开,且vs需要安装unity相关组件,否则没办法使用unity库) 编写代码,一下代码可以实现小球移动和跳跃。

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;public class PlayerController : MonoBehaviour
 {public float speed;public Text countText;private Rigidbody rb;// Start is called before the first frame updatevoid Start(){rb = GetComponent();}// Update is called once per framevoid FixedUpdate(){float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");bool moveUp = Input.GetKey("space");Vector3 pos = rb.transform.position;bool ground = false;if (pos.y <= 0.5f) ground = true;Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);if (ground && moveUp){movement = new Vector3(moveHorizontal, 120.0f, moveVertical);}rb.AddForce(movement * speed);}
 }
 

可以在界面设置小球的速度。我将其设置为8,太小的话小球反应很慢。
在这里插入图片描述
这时,进入游戏模式小球已经可以移动和跳跃了。

三、移动摄像机

3.1 设置相机参数

在这里插入图片描述

3.2 编写脚本让摄像机跟随小球移动

点击摄像机,添加组件scripts,命名为CameraController
在这里插入图片描述
脚本:

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;public class CameraController : MonoBehaviour
 {public GameObject player;private Vector3 offset;// Start is called before the first frame updatevoid Start(){offset = transform.position - player.transform.position;}// Update is called once per framevoid LateUpdate(){transform.position = player.transform.position + offset;}
 }
 

3.3 将小球对象拖到以下位置与摄像机绑定:

在这里插入图片描述

四、设置游戏场地

4.1 设置游戏边界

创建游戏对象命名为Walls,作为所有墙体的父对象
在这里插入图片描述

4.2 创建一个新的游戏对象(3D Object->Cube),命名为West Wall, 并将他拉到Walls对象下,作为它的子对象。

在这里插入图片描述

4.3 设置West Wall的位置和大小:

在这里插入图片描述效果:
在这里插入图片描述

4.4 同理,复制West Wall创建出East Wal、North Wall、South Wall,同样将其放在Walls下作为它的子对象

在这里插入图片描述

4.5 设置其他三个墙的参数,使其将场地围成封闭空间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
效果:
在这里插入图片描述

五、创建收集物

5.1 创建新的游戏对象(3D Object->Cube),命名为Pick Up, 设置它的大小,位置,以及倾斜程度;

在这里插入图片描述
效果:
在这里插入图片描述

5.2 编写脚本让收集物旋转起来

选中收集物,添加Scripts组件,命名为Rotator,放到文件夹下:
在这里插入图片描述
脚本:

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;public class Rotator : MonoBehaviour
 {// Update is called once per framevoid Update(){transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime);}
 }
 

5.3 将PickUp设置为预设

在Assets文件夹下创建Prefabs文件夹,将Hierarchy视图下的PickUp拖到文件夹中,此时就创建了一个预设资源:
在这里插入图片描述

5.4 创建一个空的游戏对象的承载Pick Up对象,将其命名为Pick Ups:

在这里插入图片描述

5.5 更换成顶部和全局视角:放大后方便放置其他的收集物

在这里插入图片描述

5.6 复制Pick Up,创建和摆放其他的收集物

在这里插入图片描述
效果:
在这里插入图片描述

5.7 为收集物创建颜色

新建Materials,命名为Pick up将其拖到小方块上,为收集物设置颜色。将Materials文件夹中的Pick Up直接拖到Prefabs中的Pick Up上,直接处理预设,所有小方块都变色。
在这里插入图片描述

六、收集物品

6.1 重新补充编写PlayerControlle的脚本,新增碰撞器方法

    void OnTriggerEnter(Collider other){if (other.gameObject.CompareTag("Pick Up")){other.gameObject.SetActive(false);count = count + 1;SetCountText();}
 }
 

6.2 为Pick Up设置tag:

选择Pick Up的预设资源,在标签出下拉选择add tag,点击+,取名为Pick Up
在这里插入图片描述
选择标签Pick Up:
在这里插入图片描述
设置完这些后,小球可以对小方块有了碰撞的效果,但是不会收集而是会反弹。

6.3 设置方块的碰撞触发器

选中预设PickUp,勾选:
在这里插入图片描述
此时,小球与方块碰撞之后,方块就会消失,呈现出拾起的效果。

6.4 为PickUp预设添加刚体组件并设置属性,让方块变成动态碰撞器,优化效果。

在这里插入图片描述

七、显示分数和文本

7.1 完善PlayerController脚本

新增展示分数和文本的方法:

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;public class PlayerController : MonoBehaviour
 {public float speed;public Text countText;public Text winText;private Rigidbody rb;private int count;// Start is called before the first frame updatevoid Start(){rb = GetComponent();count = 0;SetCountText();winText.text = "";}// Update is called once per framevoid FixedUpdate(){float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");bool moveUp = Input.GetKey("space");Vector3 pos = rb.transform.position;bool ground = false;if (pos.y <= 0.5f) ground = true;Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);if (ground && moveUp){movement = new Vector3(moveHorizontal, 120.0f, moveVertical);}rb.AddForce(movement * speed);}void OnTriggerEnter(Collider other){if (other.gameObject.CompareTag("Pick Up")){other.gameObject.SetActive(false);count = count + 1;SetCountText();}}void SetCountText(){countText.text = "Count:" + count.ToString();if (count >= 12){winText.text = "You Win!";}}
 }
 

7.2 创建UI显示文本

Create->UI->Text,命名为Count Text,再创建一个Win Text
在这里插入图片描述
设置文本的大小,颜色,字体:
在这里插入图片描述
在这里插入图片描述

7.3 在playerController中绑定文本:将文本拉入。

在这里插入图片描述
效果:
在这里插入图片描述

八、编译游戏:

8.1 创建_Build文件夹(自定义)存放生成文件

8.2 生成游戏文件

file->Build Settings
在这里插入图片描述

8.3 程序生成

在这里插入图片描述

九、直接在unity外中运行

点击运用程序打开游戏:
在这里插入图片描述
收集完小方块:
在这里插入图片描述


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。