unity 3D RPG教程(一)

目录

声明

1:Create Project

2:Build Level

3:PolyBrush 发挥创意构建场景

4:Navigation 智能导航地图烘焙

5:MouseManager 鼠标控制人物移动


声明

本教程学习均来自U3D中文课堂麦扣老师

1:Create Project

先创建一个3D项目,命名为3D RPG,然后在Package Manager里下载Universal PRunity 3D RPG教程(一)_第1张图片

下载完后创建PipelineAsset,

unity 3D RPG教程(一)_第2张图片

在Graphics和Quality中选择渲染管线

unity 3D RPG教程(一)_第3张图片

2:Build Level

在AssesStore中添加游戏素材

unity 3D RPG教程(一)_第4张图片

unity 3D RPG教程(一)_第5张图片

unity 3D RPG教程(一)_第6张图片

 导入素材

将整个项目升级到URP 

unity 3D RPG教程(一)_第7张图片

如果需要可以更换天空盒子

unity 3D RPG教程(一)_第8张图片

 Shadows可以调整阴影

unity 3D RPG教程(一)_第9张图片

可以设置LIghting的属性

 unity 3D RPG教程(一)_第10张图片

3:PolyBrush 发挥创意构建场景

下载PolyBrush并导入第二个Shader

unity 3D RPG教程(一)_第11张图片

 点开Window

unity 3D RPG教程(一)_第12张图片

 第一个图标与terrain相似,调整地面高低,第二个是用来柔化的,第三个可以将不同的物体刷上不同的颜色,区分不同地域,第四个可以快速将预制体刷到场景中,

unity 3D RPG教程(一)_第13张图片

unity 3D RPG教程(一)_第14张图片

下载ProBuilder

unity 3D RPG教程(一)_第15张图片

创建Plane

 unity 3D RPG教程(一)_第16张图片

将渲染格子变为三角形

unity 3D RPG教程(一)_第17张图片

创建Plane的material,选择Shader为Polybrush的Color URP,这样可以用Polybrush在不同区域刷上不同的颜色

unity 3D RPG教程(一)_第18张图片

4:Navigation 智能导航地图烘焙

制作好地图如下

unity 3D RPG教程(一)_第19张图片

先将Ground标记为Nagivation Static,要使Tree不能让人物移动过去,选择只将Ground这个物体标记为Nagivation Static而不是包括子物体。

使用Navigation 智能导航地图烘焙,将Tree和Grass标记为Nagivation Static,设置Not Walkable,将Grass设置为Walkable.

为人物添加Agent组件,调整大小, 然后在Navigation菜单中调整数值再次进行烘焙

unity 3D RPG教程(一)_第20张图片unity 3D RPG教程(一)_第21张图片

可以将一些可以移动的物体但不和人物发生穿模添加组件Obstacle,

unity 3D RPG教程(一)_第22张图片

5:MouseManager 鼠标控制人物移动

创建一个脚本名为MouseManager,挂在相同名称的空物体上,

在脚本中加上命名空间using UnityEngine.Events,然后创建类EventVector3,继承于UnityEvent的Vector3引用。

在类MouseManager中创建EventVector3类的对象,

由于EventVector3类不是继承MonoBehaviour的,他需要被系统序列化才能显示出来,所以需要在前面加上一个描述:[System.Serializable]。

MouseManager如下:

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

[System.Serializable]
public class EventVector3 : UnityEvent { } 
public class MouseManager : MonoBehaviour
{
    public EventVector3 onMouseClicked;
}

这样就能添加人物事件了

unity 3D RPG教程(一)_第23张图片

 接下来写一个方法来获得鼠标点击屏幕上的数值

查找API手册 ScreenPointToRay

unity 3D RPG教程(一)_第24张图片unity 3D RPG教程(一)_第25张图片

首先创建一个RaycastHit类型的变量hitInfo来保存射线碰撞到的物体的相关信息,然后创建方法来设置指针的贴图和返回鼠标左键点击返回值,代码如下:

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

[System.Serializable]
public class EventVector3 : UnityEvent { } //创建类EventVector3,继承于UnityEvent的Vector3引用。
public class MouseManager : MonoBehaviour
{
    RaycastHit hitInfo; //保存射线碰撞到的物体的相关信息

    public EventVector3 onMouseClicked;

    private void Update()
    {
        SetCursorTexture();//设置指针的贴图
        MouseControl();//返回鼠标左键点击返回值
    }

    void SetCursorTexture() //设置指针的贴图
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if(Physics.Raycast(ray,out hitInfo))
        {
            //切换鼠标贴图
        }
    }

    void MouseControl()//返回鼠标左键点击返回值
    {
        if(Input.GetMouseButtonDown(0)&&hitInfo.collider != null)
        {
            if(hitInfo.collider.gameObject.CompareTag("Ground"))
            {
                onMouseClicked?.Invoke(hitInfo.point); //当前onMouseClicked事件如果不为空,将点击到地面上的坐标传回给这个事件,将
            }
        }
    }
}

现在就可以点击Ground移动角色了。

你可能感兴趣的:(unity笔记,unity,3d)