小猪学U3D—入门

最近项目中要使用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

 

参考:

官网中文手册

Unity入门教程(上)

Unity入门教程(下)

基于U3D的桌球游戏

发表评论

邮箱地址不会被公开。