人物行走在柏林噪声地图

2023-11-08 06:50

本文主要是介绍人物行走在柏林噪声地图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果:

 前期准备: 人物能行走在绘制的柏林噪声地图上,是因为用了动态烘焙地图插件

为人物挂载插件中的LocalNavMeshBuilder脚本:

为柏林噪声地图在代码中动态动态动态添加NavMeshSourceTag脚本:

实现:

 人物的3种移动:

创建人物,挂载下面脚本即可。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class PlayerMove : MonoBehaviour
{public ETC m_ETC;[Header("移动速度")]public float m_MoveSpeed;[Header("旋转速度")]public float m_RotateSpeed;[Header("小地图箭头")]public RectTransform arrowImg;void Update(){//小地图箭头指向   与   人物真实方向  保持一致arrowImg.localEulerAngles = Vector3.back * gameObject.transform.eulerAngles.y;#region 射线检测移动if (Input.GetMouseButtonDown(1)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out RaycastHit hit)){if (hit.collider.CompareTag("PerlinMap")){transform.GetComponent<NavMeshAgent>().SetDestination(hit.point);}}}#endregion#region 摇杆移动float h = m_ETC.GetAxis("Horizontal");float v = m_ETC.GetAxis("Vertical");Vector3 dir = new Vector3(h, 0, v);if (dir!=Vector3.zero){//摇杆结合导航transform.GetComponent<NavMeshAgent>().SetDestination(dir+transform.position);//只是摇杆//transform.LookAt(dir+transform.position);//transform.Translate(Vector3.forward * Time.deltaTime * 5);}#endregion#region WASD移动transform.Translate(Vector3.forward*Input.GetAxis("Vertical")*Time.deltaTime*m_MoveSpeed);transform.Rotate(Vector3.up,Input.GetAxis("Horizontal") * Time.deltaTime * m_RotateSpeed);#endregion}
}

 绘制柏林地图:

创建一个空对象,挂载下面脚本即可。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 绘制柏林噪声地图
/// </summary>
public class PerlinNoiseMap : MonoBehaviour
{[Header("噪声强度")]public float noisily;[Header("地图长")]public int mapWidth;[Header("地图宽")]public int mapHeight;[Header("底层颜色")]public Color downColor;[Header("上层颜色")]public Color upColor;[Header("小地图")]public Image miniMap;public GameObject player;private void Start(){VertexHelper vh = new VertexHelper();Texture2D texture = new Texture2D(mapWidth, mapHeight);for (int x = 0; x < mapWidth; x++){for (int z = 0; z < mapHeight; z++){float y = Mathf.PerlinNoise(x * noisily * 0.1f, z * noisily * 0.1f);//不乘系数就是平面效果//uv坐标  最外面一层不算float uvx = (float)x / (mapWidth - 1);float uvy = (float)z / (mapHeight - 1);Color color = Color.Lerp(downColor, upColor, y);texture.SetPixel(x, z, color);vh.AddVert(new Vector3(x, y * noisily, z), color, new Vector2(uvx, uvy));if (x < mapWidth - 1 && z < mapHeight - 1){vh.AddTriangle(x * mapHeight + z, x * mapHeight + z + 1, (x + 1) * mapHeight + z);vh.AddTriangle((x + 1) * mapHeight + z, x * mapHeight + z + 1, (x + 1) * mapHeight + z + 1);}}}texture.Apply();Mesh mesh = new Mesh();vh.FillMesh(mesh);gameObject.AddComponent<MeshFilter>().mesh = mesh;gameObject.AddComponent<MeshCollider>().sharedMesh = mesh;gameObject.AddComponent<MeshRenderer>().material.mainTexture = texture;//插件实现,添加NavMeshSourceTag组件,能让玩家在柏林噪声地图上gameObject.AddComponent<NavMeshSourceTag>();//小地图材质赋值Material m = new Material(Shader.Find("UI/Default"));m.mainTexture = texture;miniMap.material = m;}private void Update(){//滚轮控制视野if (Input.GetAxis("Mouse ScrollWheel") != 0 && transform.localScale.x + Input.GetAxis("Mouse ScrollWheel") >= 1){miniMap.transform.localScale += Vector3.one * Input.GetAxis("Mouse ScrollWheel");}else if (Input.GetAxis("Mouse ScrollWheel") != 0 && transform.localScale.x + Input.GetAxis("Mouse ScrollWheel") <= 1){miniMap.transform.localScale += Vector3.one * Input.GetAxis("Mouse ScrollWheel");}//重置小地图锚点   以人物为中心//情况一:人物生成在地图左下角miniMap.rectTransform.pivot = new Vector2(player.transform.position.x / mapWidth, player.transform.position.z / mapHeight);//情况二:人物生成在地图中心//miniMap.rectTransform.pivot = new Vector2((mapWidth / 2 + player.transform.position.x) / mapWidth , (mapHeight / 2 + player.transform.position.z) / mapHeight);}
}

人物生成在地图左下角(上面代码所述情况一):

人物生成在地图中心(上面代码所述情况二):

这篇关于人物行走在柏林噪声地图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/368440

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

全英文地图/天地图和谷歌瓦片地图杂交/设备分布和轨迹回放/无需翻墙离线使用

一、前言说明 随着风云局势的剧烈变化,对我们搞软件开发的人员来说,影响也是越发明显,比如之前对美对欧的软件居多,现在慢慢的变成了对大鹅和中东以及非洲的居多,这两年明显问有没有俄语或者阿拉伯语的输入法的增多,这要是放在2019年以前,一年也遇不到一个人问这种需求场景的。 地图应用这块也是,之前的应用主要在国内,现在慢慢的多了一些外国的应用场景,这就遇到一个大问题,我们平时主要开发用的都是国内的地

Imageview在百度地图中实现点击事件

1.首先第一步,需要声明的全局有关类的引用 private BMapManager mBMapMan; private MapView mMapView; private MapController mMapController; private RadioGroup radiogroup; private RadioButton normalview; private RadioBu

MMO地图传送

本篇由以下四个点讲解: 创建传送点 传送点配置 编辑器扩展:传送点数据生成 传送协议与实现 创建传送点 建碰撞器触发 //位置归零 建一个传送门cube放到要传送的位置(这个teleporter1是传出的区域 这是从另一张地图传入时的传送门 创建一个脚本TeleporterObject给每个传送cube都绑上脚本 通过脚本,让传送门在编辑器下面还能绘制出来

ArcGIS Pro SDK (十三)地图创作 3 特殊图层

ArcGIS Pro SDK (十三)地图创作 3 特殊图层 文章目录 ArcGIS Pro SDK (十三)地图创作 3 特殊图层1 高程表面图层1.1 创建具有地表图层的场景1.2 创建新的高程表面1.3 将自定义高程表面设置为 Z 感知图层1.4 将高程源添加到现有高程表面图层1.5 从地图中获取高程表面图层和高程源图层1.6 查找高程表面图层1.7 移除高程表面图层1.8 从曲面获

激光SLAM如何动态管理关键帧和地图

0. 简介 个人在想在长期执行的SLAM程序时,当场景发生替换时,激光SLAM如何有效的更新或者替换地图是非常关键的。在看了很多Life-Long的文章后,个人觉得可以按照以下思路去做。这里可以给大家分享一下 <br/> 1. 初始化保存关键帧 首先对应的应该是初始化设置,初始化设置当中会保存关键帧数据,这里的对应的关键帧点云数据会被存放在history_kf_lidar当中,这个数据是和

西游再现!一键部署 Flux 文生图大模型生成西游人物

从花果山的灵石出世,到取经路上的九九八十一难,再到大闹天宫的惊心动魄……这些耳熟能详的西游场景,如今都能通过 Flux 模型,以超乎想象的细节和真实感呈现在你眼前。本次实验在函数计算中内置的 flux.1-dev-fp8 大模型,搭配 Lora 模型, 无需复杂的配置,一键部署,你就能成为这场视觉盛宴的创造者。 诚邀您参与到这场奇妙旅程中来,这不仅是一次技术的探索,更是一场创意的狂欢,在函数计算

产品地图经典案例,为盲人设计一款闹钟

在产品设计的旅程中,复杂程度往往超乎你的想象。从理解产品设计的初衷,到制定具体目标,再到解决实际问题,这一过程涉及许多环节。以下是如何通过即时设计在线白板高效绘制产品地图,以便更好地进行产品设计的具体示例——为盲人设计一款闹钟。 即时设计在线白板是一个高效便捷的可视化工具,可以帮助团队更好地协作和整理思路。我们将通过实际案例来展示如何使用它绘制产品地图。https://js.design/?so

HYPERCASUAL - Simple Characters(卡通游戏火柴人物模型)

介绍HyperCasual - 简单角色! 一套低多边形角色资源,用于创建超休闲风格的游戏。 包含演示场景 角色(x10) 生化人、小丑、Flaty_Boss、女孩、守门员、英雄、亚马逊女战士、男人、红衣男人、修理工 每个网格大约有700-2000个顶点 角色设置与Mecanim兼容(本包中不包含动画) 着色器适用于可编写脚本的渲染管线(HD + LW) 下载:​​Unity资源商店链接资源