3D RPG 学习笔记

  1. 1. 一、创建项目导入素材
    1. 1.0.1. 创建普通项目
    2. 1.0.2. 安装package
    3. 1.0.3. Navigation
    4. 1.0.4. 点击移动
    5. 1.0.5. 功能实现
    6. 1.0.6. Shader Graph 遮挡剔除
    7. 1.0.7. FSM 状态机

一、创建项目导入素材

  1. 创建普通项目

    • 在Package Manager中安装Universal RP
    • 在Asset中创建Rendering => Universal Render Pipeline => Pipeline Asset(URP的设置文件)
    • 将project setting中Graphics和Quality的渲染管线设置为刚创建的渲染管线设置文件
    • 导入素材(Dog Knight PBR Polyart、 Low-Poly Simple Nature Pack 和 FREE Skybox Extended Shader)
    • 在Edit => Edit=Render Pipeline => Universal Render Pipeline 中设置当前项目或当前素材的渲染管线
    • 在Lighting => Environment 中设置天空盒的材质
    • 注意Asset窗口和Inspect窗口的物体分类,方便管理
  2. 安装package

    • PolyBrush

      PolyBrush

      1. 调整地面的高度(左键直接点击变高,control+左键点击变矮)

        调整

        • Outer Radius:外圈大小
        • Inner Radius:内圈大小
        • Strength:变化强度
        • Direction:设置变化的方向。Brush normal:材质的法线方向
        • Brush Mirroring:沿坐标轴对称形成另一个笔刷同时进行相同操作
      2. 柔化:将比较突出的棱角变的平滑。设置基本同上

        柔化

      3. 将当前物体刷上不同的颜色

        颜色刷

        • 如果需要将颜色刷到物体上,则物体材质的 shader 需要为 Polybrush=> Shader 下的shader
        • Brush:根据笔刷的大小刷上颜色
        • Fill:填充区块
        • Flood:整个物体
      4. 将预制体刷到场景当中

        预制体刷

        • 基本设置同1
        • 将需要的prefab添加到Current Palette中,当前选中的prefab会在Brush Loadout中
        • Brush Loadout 中prefab下的拖动条表示此物体出现的概率
        • Hit Surface is Parent:将所有的画在平面上的物体都是此平面的子物体
      5. 将texture刷到场景当中

        • 同4
    • Pro Builder

       Pro Builder

      • 按住shift可以查看图标的功能
    • Pro Grids

      • 安装ProGrids需要在Project Setting的Package Manger中打开允许preview

        Enable Preview

      • Pro Grids

      1. 设置物体移动时的单位距离
      2. 是否在Scene窗口中显示坐标轴
      3. 是否自动吸附:即按照1的设置在坐标轴上自动进行吸附,每次只移动1的距离
      4. 4
      5. 5
      6. X 、Y、 Z、 3D均为Scene窗口显示的坐标轴
  3. 自动导航

  4. 点击移动

    1. 自定义事件的注册和调用

      1. 自定义事件

        • 注册

          1
          2
           public class EventVector3 : UnityEvent<Vector3> { };	
          //声明类,继承UnityEvent,并需要参数Vector3
        • 调用

          1
          2
          OnMouseClicked?.Invoke(hitInfo.point);
          //当OnMouseClicked事件不为空时调用,并传入point信息
    2. 屏幕射线转为世界射线

      1
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    3. 单例模式

      方便事件函数等在外部的调用

      1
      2
      3
      4
      5
      6
      7
      8
      public static MouseManager Instance;

      private void Awake()
      {
      if (Instance != null)
      Destroy(gameObject);
      Instance = this;
      }
    4. 事件注册和调用

  5. 功能实现

    • 鼠标指针图片切换
    • Cinemachine:多功能相机插件
    • Post Processing:后处理
    • Animator
  6. Shader Graph 遮挡剔除

  7. FSM 状态机

//