当前位置: 首页 > news >正文

海口网站建设王道下拉棒免费空间浏览量

海口网站建设王道下拉棒,免费空间浏览量,百度关键词策划和seo的优化,软件网页设计师招聘3D动态路障生成 介绍设计实现1.路面创建2.空物体的创建3.Create.cs脚本创建 总结 介绍 上一篇文章介绍了Mathf.Lerp的底层实现原理,这里介绍一下跑酷类游戏的动态路障生成是如何实现的。 动态路障其实比较好生成,但是难点在哪里,如果都是平面…

3D动态路障生成

  • 介绍
  • 设计实现
    • 1.路面创建
    • 2.空物体的创建
    • 3.Create.cs脚本创建
  • 总结

介绍

上一篇文章介绍了Mathf.Lerp的底层实现原理,这里介绍一下跑酷类游戏的动态路障生成是如何实现的。
动态路障其实比较好生成,但是难点在哪里,如果都是平面或者都是没有转弯的话还是比较好实现的,如果动态路障的实现遇到了有上坡下坡或者有转弯的地方我们如何去处理这些拐角点和上下坡的旋转和位置呢?

设计实现

简单说一下设计思路
路面的终点为坐标的原点(0,0,0),把我们的路面朝向Z轴的方向,也就是说我们生成路障时,只需要采用Z轴的深度即可。
我们在终点到起点之间创建多个空物体,这个空物体用于判断创建的路障在哪两个空物体之间,然后采用Lerp来进行插值运算,使我们在拐角处和有坡度的位置生成正确旋转与位置的路障。
生成路障时,自定义参数距离范围随机生成路障,那么它的旋转角度和高度我们可以用上述两个空物体差值运算得到。

1.路面创建

下面是我简单的用Plane拼接出来的路面终点的位置为Unity的(0,0,0)
这里我全成长度为300,也就是说图中的起点位置为(x,x,-300)
在这里插入图片描述

2.空物体的创建

在Road路面里面创建一个waypoints的空物体,将我们后面创建的空物体都放在里面,
我们可以在整个路面上创建无数个空物体,但是空物体的Z轴旋转和Y轴的高度是要跟路面保持一致的,因为我们后面要用这个空物体的position和rotation来进行插值运算得到路障的位置和旋转角度,这里空物体创建的越多,路障贴合路面的坡度和旋转就更加精准。最后创建一个Waypoints的脚本挂载到waypoints上去获取我们所有创建的空物体,可以用OnDrawGizmos()去绘制出来方便我们看。

创建的位置如下
在这里插入图片描述
这里可以看到我把每一个点的Z轴旋转角度都贴合了路面

脚本如下:

[ExecuteInEditMode]public class waypoints : MonoBehaviour {public Transform[] points;void OnDrawGizmos(){for (int i = 0; i < points.Length; i++){Gizmos.color = Color.red;Gizmos.DrawWireSphere(points[i].transform.position, 5);}}}

3.Create.cs脚本创建

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Create : MonoBehaviour {/// <summary>/// 路障物体数组/// </summary>public GameObject[] obstacles;/// <summary>/// 路障在道路上出现的开始位置/// </summary>public float startLength = 10;/// <summary>/// 路障距上一个路障的最小距离  /// </summary>public float minLength = 10;/// <summary>/// 路障距上一个路障的最大距离  /// </summary>public float maxLength = 20;/// <summary>/// 与路面相贴合的路线上的脚本组件  /// </summary>private waypoints wayPoints;void Awake(){wayPoints = GameObject.Find("waypoints").GetComponent<waypoints>(); }// Use this for initialization  void Start(){//创建路障GenerateObstacle(); }/// <summary>/// 创建路障/// </summary>void GenerateObstacle(){//当前道路在场景中的起始Z坐标  float startZ = transform.position.z - 300;//当前道路在场景中的结束Z坐标  float endZ = transform.position.z;//将要产生路障的Z坐标float z = startZ + startLength;while (true){//每隔多少米的距离产生一个路障  z += Random.Range(minLength, maxLength);//如果将要产生路障的位置超出了这条道路则退出路障产生循环,否则产生路障 if (z > endZ)                            {break;}else{//方法计算路障位置坐标Vector3 position = GetWayPos(z);//方法计算路障旋转坐标Vector3 rotation = GetWayRotate(z);//产生一个从路障数组里取路障的随机序数  int obsIndex = Random.Range(0, obstacles.Length);//实例化路障 Instantiate(obstacles[obsIndex], position, Quaternion.Euler(rotation.x, rotation.y, rotation.z)); }}}/// <summary>/// 获取转折点的集合索引值/// </summary>/// <param name="z"></param>/// <returns></returns>int GetPointIndex(float z){//在道路上设置的转折点的集合  Transform[] points = wayPoints.points;//转折点在集合中的序数号  int index = 0;for (int i = 0; i < points.Length - 1; i++){//根据要插入路障的Z值在集合中寻找在哪两个点之间,找到后记下序数号  if (z >= points[i].position.z && z <= points[i + 1].position.z){index = i;break;}}return index;}Vector3 GetWayPos(float z){int index = GetPointIndex(z);//使用Lerp函数计算出插入路障处的空间坐标值  return Vector3.Lerp(wayPoints.points[index + 1].position, wayPoints.points[index].position, (z - wayPoints.points[index + 1].position.z) / (wayPoints.points[index].position.z - wayPoints.points[index + 1].position.z));}Vector3 GetWayRotate(float z){int index = GetPointIndex(z);return Vector3.Lerp(wayPoints.points[index + 1].eulerAngles, wayPoints.points[index].eulerAngles, (z - wayPoints.points[index + 1].position.z) / (wayPoints.points[index].position.z - wayPoints.points[index + 1].position.z));}}

创建完成结果如下:
在这里插入图片描述

总结

本片文章主要讲解Mathf.Lerp()的用法,如果有不明白的可以看我上一篇文章

http://www.dtcms.com/a/527121.html

相关文章:

  • 免费模板网站外贸人才网招聘网
  • 网站建设及运营 经营范围成都少儿编程培训机构
  • 网站做视频在线观看网址电商网站开发的背景及意义
  • 网站内页跳转wap沧州手机网站
  • 网站需要怎么做6电商网站建设
  • 网站的站点的管理系统品牌建设和品牌打造方法
  • 科协网站页建设的意义软件开发的五个阶段
  • 哈尔滨网站空间网页设计图片轮播切换
  • 网站怎么设置百度收录diy网站建设系统源码
  • 企业展示网站源码北京新机场建设网站
  • 网站建设要注意一些什么华龙网重庆网络问政平台
  • wordpress去掉tag标签网站建设公司加优化
  • 北京写字楼装修公司连云港专业网站优化
  • 高端网站建设服务商网站开发工作平时做什么
  • 设计好的商城网站建设网络公司网站建设费入如保入账
  • 哪个网站做螺丝生意好自己做签名网站
  • 陕西省住房和城乡建设厅网站上查询wordpress食品模板下载
  • 看手机的网站重庆沙坪坝好玩的地方
  • 企业网站建设高端品牌跨境电商网站建设方案
  • 做网站送的小程序有什么用dw可以用来做网站吗
  • 小米商城网站建设分析做海淘是在哪个网站好
  • wordpress网站前台打开慢wordpress首页文章描述
  • php做网站半成品平谷营销型网站建设
  • 网站视频外链怎么做河南郑州最新消息
  • 国内专业网站设计做有网被视频网站有哪些
  • 网站设置301重定向把织梦改成字段式网站
  • 做网站的开发软件是什么网站的前台
  • 网站界面大小广州网站优化价格
  • 网站流量到底怎样赚钱的中国太空空间站
  • 北京网站开发建设公司华强北