找回密码
 立即注册
查看: 261|回复: 0

unity 3D RPG教程(一)

[复制链接]
发表于 2022-5-12 12:41 | 显示全部楼层 |阅读模式
1:Create Project

先创建一个3D项目,命名为3D RPG,然后在Package Manager里下载Universal PR


下载完后创建PipelineAsset,


在Graphics和Quality中选择渲染管线


2:Build Level

在AssesStore中添加游戏素材






导入素材
将整个项目升级到URP


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


Shadows可以调整阴影


可以设置LIghting的属性


3:PolyBrush 发挥创意构建场景

下载PolyBrush并导入第二个Shader


点开Window


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




下载ProBuilder


创建Plane


将渲染格子变为三角形


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


4:Navigation 智能导航地图烘焙

制作好地图如下


先将Ground标记为Nagivation Static,要使Tree不能让人物移动过去,选择只将Ground这个物体标记为Nagivation Static而不是包括子物体。
使用Navigation 智能导航地图烘焙,将Tree和Grass标记为Nagivation Static,设置Not Walkable,将Grass设置为Walkable.
为人物添加Agent组件,调整大小, 然后在Navigation菜单中调整数值再次进行烘焙



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


5:MouseManager 鼠标控制人物移动

创建一个脚本名为MouseManager,挂在相同名称的空物体上,
在脚本中加上命名空间using UnityEngine.Events,然后创建类EventVector3,继承于UnityEvent的Vector3引用。
在类MouseManager中创建EventVector3类的对象,
由于EventVector3类不是继承MonoBehaviour的,他需要被系统序列化才能显示出来,所以需要在前面加上一个描述:[System.Serializable]。
MouseManager如下:
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Events;
  5. [System.Serializable]
  6. public class EventVector3 : UnityEvent<Vector3> { }
  7. public class MouseManager : MonoBehaviour
  8. {
  9.     public EventVector3 onMouseClicked;
  10. }
复制代码
这样就能添加人物事件了


接下来写一个方法来获得鼠标点击屏幕上的数值
查找API手册 ScreenPointToRay



首先创建一个RaycastHit类型的变量hitInfo来保存射线碰撞到的物体的相关信息,然后创建方法来设置指针的贴图和返回鼠标左键点击返回值,代码如下:
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Events;
  5. [System.Serializable]
  6. public class EventVector3 : UnityEvent<Vector3> { } //创建类EventVector3,继承于UnityEvent的Vector3引用。
  7. public class MouseManager : MonoBehaviour
  8. {
  9.     RaycastHit hitInfo; //保存射线碰撞到的物体的相关信息
  10.     public EventVector3 onMouseClicked;
  11.     private void Update()
  12.     {
  13.         SetCursorTexture();//设置指针的贴图
  14.         MouseControl();//返回鼠标左键点击返回值
  15.     }
  16.     void SetCursorTexture() //设置指针的贴图
  17.     {
  18.         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  19.         if(Physics.Raycast(ray,out hitInfo))
  20.         {
  21.             //切换鼠标贴图
  22.         }
  23.     }
  24.     void MouseControl()//返回鼠标左键点击返回值
  25.     {
  26.         if(Input.GetMouseButtonDown(0)&&hitInfo.collider != null)
  27.         {
  28.             if(hitInfo.collider.gameObject.CompareTag("Ground"))
  29.             {
  30.                 onMouseClicked?.Invoke(hitInfo.point); //当前onMouseClicked事件如果不为空,将点击到地面上的坐标传回给这个事件,将
  31.             }
  32.         }
  33.     }
  34. }
复制代码
现在就可以点击Ground移动角色了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-27 08:45 , Processed in 0.160027 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表