IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity3D RPG实现 (上) -> 正文阅读

[游戏开发]Unity3D RPG实现 (上)

目录

环境搭建

安装URP

添加天空盒?

设定阴影渲染

修改光照渲染

环境搭建

扩大地图

实现导航

鼠标控制人物移动?

鼠标指针切换

相机跟随

后处理

动画控制器

遮挡剔除


环境搭建

安装URP

先安装URP

↑安装URP的unity package

新建一个渲染管线:

在edit里设置渲染管线:

升级URP,就可以将人物原本丢失的材质补回来。

?

添加天空盒?

然后在rendering-lighting-environment里可以更换天空盒

然后可以在此设置天空盒:

设定阴影渲染

这个设置可以设置最大渲染的阴影的距离,超过这个距离则不再渲染,这个可以节省资源

这里可以调整阴影的各种参数:

这个地方可以修改虚实阴影分成几级,比如这里,超过1级12.5m渲染出来的阴影就会比较虚了。?

注意要开启HDR,方便后期进行后处理

这里还可以添加抗锯齿

修改光照渲染

在window-lighting添加光照文件:

修改模式为烘培,图形为GPU?

然后点击右下角的生成光照:

然后点击生成光照:

一般不勾选自动生成

?

注意到此时光变成了蓝紫色,这是因为光照默认是用skybox的颜色的,可以在environment这里进行修改:

环境搭建

按住v可以更好的设置景物:? ctrl+shift也可以进行吸附

调整相机角度可以通过在scene场景中先找好角度,在选中相机的情况下 然后按下ctrl+shift+f来让相机对准:

?可以创建一个空物体作为分界线,以下的物体全是人物:

?安装polybrush,在sample里导入含urp的shader

?

在tools里打开:?

这里调整高度时,可以通过绕xyz轴还是物体表面

这个可以实现多重对称笔刷

柔化可以让起伏更加平滑

第三个刷色,直接刷色无法上色是因为地面并不是polybrush的material

想要上色可以在polybrush自带的material里的shader右键添加材质:

然后将该材质托给地面,则此时可以上色了

这就可以用来初期规划不同的地方用来做什么?

希望整个场景变成某一颜色就选中flood

第四个

将预制体放上去后即可实现点击即出prefabs:

? 按住ctrl去点按即可删除

扩大地图

接下来我们扩大地图,但是单纯的扩大size,物体的顶点数并不会增多,这里可以使用插件:probuilder:

?在tools里打开,

可以按住shift时可以查看其详细信息

按住alt选中上面那个?

可以在这里修改其形状

?

以此添加plane

不过要注意这个物体的中心在角落:

点击这个可以使它回到中心

progrid的使用:

先启用

还可以实现展示x或y或z平面的网格。

这里的2代表的是一个格子0.2,移动物体也是按照一次移动0.2实现的。

在tools里可以关闭

?

点击这个按钮可以使得网格平面由四格变为三格,可以通过创建材质使得其有颜色:

实现导航

烘焙地面:

对地面选择navigation static?

对树的区域同样选中,但是烘焙的时候要选择not walkable:

烘焙成功后 但是不可行走的区域不够精细

为了改变这点

对玩家添加agent

?为了使得不可 行走的区域变得精细,需要调整人物的胖瘦高矮

并且在导航这一块也要修改:

上面是静态的障碍物,无法移动的,如果想实现动态的障碍物可以给物体添加障碍物的组件,并且把carve勾选上,就可以实现这块区域在烘焙的时候会被切开来

鼠标控制人物移动?

创建一个鼠标点击事件,将人物拖拽进来,并且选择destionation

随后用ScrennPointToRay,获取鼠标所点击的位置

然后给地面设置tag,给MouseManager添加这段代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using UnityEngine.Events;

[System.Serializable]
public class EventVector3 : UnityEvent<Vector3> { }//声明一个事件
public class MouseManager : MonoBehaviour
{

    public EventVector3 OnMouseClicked;
    RaycastHit hitInfo;
    private void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//获取射线
        Physics.Raycast(ray, out hitInfo);//将射线信息输出给hitInfo
        MouseControl();
    }
    void SetCursorTexture()
    {

    }
    void MouseControl()
    {
        if (Input.GetMouseButtonDown(0) && hitInfo.collider != null)
        {
            if (hitInfo.collider.CompareTag("Ground"))
            {
                OnMouseClicked?.Invoke(hitInfo.point);//点击之后将该位置传给OnMouseClicked设置的位置
            }
        }
    }
}

即可实现人物走向鼠标点击的地方。

这里可以调整速度和方向:

auto braking实现刹车效果。

以上可以实现鼠标点击人物移动的方式,但是需要将人物拖拽进来

如果以后切换场景或者新建游戏或者多个场景,则不方便拖拽和保存,接下来介绍另外一种方式,将人物移动的这个函数注册到event当中,? 无论切换场景还是新建角色,都可以将人物添加到OnMouseClicked的这个event当中。

为了改变上面所说的,此处将将MouseManager设定为单例模式

用event的方式替代上个注释中的方法,

?event事件的使用方式就是需要有别人注册它。

当调用这个方法时,所有注册了这个事件的函数都会被调用!

接下来在PlayerController中写一个MoveToTarget函数:

我们需要实现将这个函数的方法注册到mouseManager刚才的那个事件中,只要那个事件一启用,它就会调用这个函数。

(带有闪电的就说明是事件)

?

总结一下就是,当我们点击到地面时,它会执行所有注册到该事件上的函数,并通过Invoke传入该函数所需的参数:

?? OnMouseClicked?.Invoke(hitInfo.point);
? ? ? ? ? ? ? ? //点击之后将该位置传给OnMouseClicked这个事件注册的函数并进行调用
? ? ? ? ? ??

于是接下来就可以实现鼠标点击则人物移动的方式了。

鼠标指针切换

将图片导入进来并更改为Cursor

选择Point,然后再Apply一下?

第二个参数用来记录偏移值,是因为要使图片的中心才具有点击效果。

注意到鼠标尺寸过大,可以在这里进行调整:

随后即可调整实现鼠标变成指针的效果。

相机跟随

此处先补充一下三个功能:

Move to view

把你选中的游戏对象移动到Scene的中心点:

Align With View

这个用法不移动scene,是将被选中的物体移动到和scene的中心点一致

就要把普通游戏对象和Camera 分开来说了

选中普通的游戏对象:将对象的中心点移动到Scene的中心点一致

选中Camera:让Game视角和Scene视角一致

Align With View to Selected

这个是移动Scene的,把Scene移动到和选中物体的中心点一致

选中普通的游戏对象:将Scene的中心点移动到和对象的中心点一致

选中Camera:让Scene视角和Game视角一致

创建cinemachine并调整:

后处理

给远处添加雾,添加完雾后效果如下所示:

注意要在这里启用:

在Main Camera的rending里也要启用post-processing

开启bloom后效果:

然后添加ToneMapping,:模式ACES

畸变的效果:

此处只需要移动

景深?

?

?FocalLength 远处虚化距离,Apeture虚化程度

动画控制器

在这里导入人物的动画控制器,使用融合树对站立行走跑步融合,然后脚本中设置参数即可。

遮挡剔除

?创建一个shader和其对应的material

??

接下来实现人物在树或者其他遮挡物之后会有一个大概轮廓的效果。

添加一个菲尼尔效果:

这里需要一个颜色,所以创建color:

?

打开着色器并创建color

接下来希望这个颜色和菲尼尔有一个乘法的效果,这样可以把颜色加到菲尼尔现象当中,

再把color放上来

将其连起来

希望这个菲尼尔效果可以有一些噪点让效果看上去更实际,所以添加一些额外常用的节点。

添加dither,调整参数使其出现密密麻麻的小点,可以用来填充球心?

添加一个alpha用于遮挡阈值

?最终设定如下所示:

?

接下来回到游戏 ,实现一个人物走到树木后面就应用这个材质,这就涉及到URP

这个是一个render feature,意思是在渲染的时候会有一些feature可以使用。?

接下来给玩家添加player的图层,并且在urp中选择:

?这样子就可以实现人物在树后面时也有这种效果:

效果如下:

但是人物在镜头前面的时候会有问题,这时候我们在前景也添加一个render

添加后恢复正常。

?此处还有个问题就是无法点击树后面,此处可以将tree选成ignore Raycast即可。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 21:31:23  更:2022-02-14 21:32:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:48:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码