最近项目中要使用3D渲染,门外汉一抹黑,经过一段时间的尝试,发现Unity的开发效率和效果精细程度还不错。从今天开始,一边学习一边整理下学习历程。
一、简介
Unity3D是一个商业引擎,他它具有以下核心特点:
- 引擎:帮我们实现了很多复杂的底层逻辑,比如:物理系统,粒子系统,寻路系统,图形渲染等等。通过可视化编程,不需要具备太多专业而复杂的计算机专业知识,就可以进行游戏开发。可视化编程无法实现部分,使用C#语言开发。
- 跨平台:只需要进行一次开发,通过Unity提供的跨平台功能,可以在各种不同平台上发布使用。
- 游戏类型:3D游戏、2D游戏、VR(虚拟现实)游戏、AR(增强现实)游戏等。说直白点,只要是游戏它都能做。
- 免费:可以在一定程度上免费使用,至少在学习阶段是完全免费的。如果要用来做商业项目或使用更多的高级功能需要付费。
市面上采用Unity3D开发的几个典型产品:
二、安装
1.安装Unity Hub
为方便统一管理,我使用UnityHub来安装和管理所有相关的软件、组件、许可证等。
下载地址:https://unity.cn/releases
下载后安装即可。
2.安装Unity、中文语言包
*注意:一定别选Documentation!选了之后安装进度到90%左右就会卡住不动,导致无法安装。估计是因为文档只能从国外服务器下载被墙的原因。
3.安装VS、Android、IOS编译发布支持
在安装成功的Unity版本上点添加模块,选择要添加的模块安装即可:
4.激活个人版许可证
三、修改官方学习项目
1.下载学习项目
2.编辑场景
添加各种装饰3d模型,修改速度、颜色等属性
参考教程:卡丁车游戏修改:装饰您的世界
3.运行游戏
4.添加事件效果
参考教程:卡丁车游戏修改:自定义触发器
四、从零开始新项目
1.新建项目
2.创建地面Panel
3.保存场景Scene
4.创建方块和球
5.模拟物理运动
使立方体受重力快速落下,并在撞到地面时停止。(运行后可以看到效果)
6.鼠标触发对象跳动
创建Player.cs C#脚本:
//Player.cs 用户自定义事件脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
protected float jump_speed = 5.0f; //设置起跳时的速度
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(Input.GetMouseButtonDown(0)){ //点击鼠标左键
this.GetComponent<Rigidbody>().velocity = Vector3.up * this.jump_speed; //设定向上速度
}
}
}
拖拽Player.cs脚本到Player对象上,成功后右侧能看到脚本关联成功
点击运行,立方体自由落体后,点击鼠标左键,将能看到立方体跳起;连续点击立方体将会越跳越高。
7.添加材质
创建3个材质,设定颜色,并分别拖拽到立方体、球体、平面对象上。
8.调整画面尺寸
创建自定义画面尺寸并选中
启动游戏,不停的点击鼠标左键让球跳起:
换个角度想想,这不就是游戏里点击让小人跳起的动画实现吗?只需要把方块换成小人模型就好了,想想还有点小激动呢!
9.让小球飞起来
为小球添加Rigidbody组件,同时创建一个Ball.cs脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
this.GetComponent<Rigidbody>().velocity = new Vector3(-8.0f, 8.0f, 0.0f); //设置向左上方的速度
}
// Update is called once per frame
void Update()
{
}
//游戏对象跑出画面外时被调用的方法
void OnBecameInvisible()
{
Destroy(this.gameObject); //删除游戏对象
}
}
游戏开始后,小球将向画面左上方飞去
10.创建多个小球
为了能够随时创建出小球对象,首先需要对小球对象进行预设。
a.将层级视图中的Ball项文本拖拽到项目视图中
项目视图中将出现Ball项。同时,层级视图中的Ball项文本将会变为蓝色。
b.将项目视图中的Ball预设拖拽到场景视图中
可以看到场景中会多出一个小球对象。
c.把Floor、Player也都做成预设
为了方便管理,建个Prefabs文件夹统一管理预设。
11.发射小球
a.创建发射台空对象,并做成预设
b.创建Launcher.cs脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Launcher : MonoBehaviour
{
public GameObject ballPrefab; //小球预设
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(1)){ //点击鼠标右键后触发
Instantiate(this.ballPrefab); //创建ballPrefab的实例
}
}
}
在Launcher预设上点击添加组件按钮,绑定此Launcher.cs脚本:
为Launcher预设的Ball Prefab属性绑定Ball预设:
运行效果:
12.碰撞与反弹
a.刚体反弹
由于Ball和Player都是刚体,默认碰撞时会有自然的碰撞反应,同时发射小球+跳起方块
b.碰撞质量影响
修改Ball预设,打开Rigidbody标签,将Mass质量值由1改为0.01(两个游戏对象发生碰撞时,Mass值较大的物体将保持原速度继续运动,相反Mass值较小的物体则容易因受到冲击而改变移动的方向),改动后可以发现碰撞后球因为质量较小被弹开,方块基本没被撞歪。
c.碰撞材质影响
创建一个物理材质命名为BallPhysicMaterial,设置弹跳Bounciness=1。Bounciness值越大,游戏对象越容易被“弹开”。
为ball预设添加BallPhysicMaterial材质,可以看到添加此材质后,球碰撞后被强烈反弹回来了。
13.调整相机位置
选中Camera相机,用移动工具调整摄像机的位置,用旋转工具调整摄像机的角度
重新启动,可以看到调整后的相机视角离Floor更近,视角更高了
鼠标控制Player方块的跳起类似游戏里让小人跳起的控制、发射小球类似模拟发射弹珠遇到刚体后的反弹效果,替换成对应的3D模型和场景布置后效果会好很多。是不是感觉离做个小游戏更进一步了呢?想想还有点小激动呢! :)
为了更便于后续的学习,大家需要耐心的学习Unity对象管理,有些枯燥,但它是后续进行更复杂开发的基础,就不在这里详细展开了。
yan 7.31
参考: