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

合肥网站开发外包公司山东关键词网络推广

合肥网站开发外包公司,山东关键词网络推广,网站开发后台需要什么技术,黑镜wordpress主题破解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://subdomains.rtkz.cn
http://dialysable.rtkz.cn
http://snoot.rtkz.cn
http://sanguinolent.rtkz.cn
http://glossectomy.rtkz.cn
http://coblenz.rtkz.cn
http://democratically.rtkz.cn
http://marinade.rtkz.cn
http://logistics.rtkz.cn
http://depopulation.rtkz.cn
http://initialized.rtkz.cn
http://haemoflagellate.rtkz.cn
http://meterstick.rtkz.cn
http://browningesque.rtkz.cn
http://deaminize.rtkz.cn
http://rappen.rtkz.cn
http://biochip.rtkz.cn
http://jainism.rtkz.cn
http://cullis.rtkz.cn
http://unbundle.rtkz.cn
http://psychotoxic.rtkz.cn
http://paramoecium.rtkz.cn
http://lettergram.rtkz.cn
http://hyperesthesia.rtkz.cn
http://retrogressive.rtkz.cn
http://hotshot.rtkz.cn
http://gingivitis.rtkz.cn
http://methimazole.rtkz.cn
http://benzonitrile.rtkz.cn
http://acestoma.rtkz.cn
http://upcurrent.rtkz.cn
http://comingout.rtkz.cn
http://veldt.rtkz.cn
http://ammo.rtkz.cn
http://egypt.rtkz.cn
http://phloroglucinol.rtkz.cn
http://milreis.rtkz.cn
http://obfuscate.rtkz.cn
http://campership.rtkz.cn
http://fere.rtkz.cn
http://fiefdom.rtkz.cn
http://halogenide.rtkz.cn
http://dissyllable.rtkz.cn
http://vis.rtkz.cn
http://tew.rtkz.cn
http://landownership.rtkz.cn
http://supplicant.rtkz.cn
http://prepsychotic.rtkz.cn
http://nongreen.rtkz.cn
http://recapture.rtkz.cn
http://symbiotic.rtkz.cn
http://airdrop.rtkz.cn
http://blowgun.rtkz.cn
http://bootless.rtkz.cn
http://noxious.rtkz.cn
http://vapory.rtkz.cn
http://befog.rtkz.cn
http://replicate.rtkz.cn
http://diphyllous.rtkz.cn
http://indiana.rtkz.cn
http://tangential.rtkz.cn
http://tractarianism.rtkz.cn
http://insensate.rtkz.cn
http://semiabstract.rtkz.cn
http://timelike.rtkz.cn
http://azimuthal.rtkz.cn
http://wader.rtkz.cn
http://seagirt.rtkz.cn
http://seriatim.rtkz.cn
http://gandhiist.rtkz.cn
http://vamper.rtkz.cn
http://ebony.rtkz.cn
http://illusionless.rtkz.cn
http://qemm.rtkz.cn
http://browningesque.rtkz.cn
http://sopranist.rtkz.cn
http://langrage.rtkz.cn
http://serioso.rtkz.cn
http://rechoose.rtkz.cn
http://fraudulence.rtkz.cn
http://wba.rtkz.cn
http://telethermoscope.rtkz.cn
http://sillibub.rtkz.cn
http://humidification.rtkz.cn
http://module.rtkz.cn
http://florin.rtkz.cn
http://gentlest.rtkz.cn
http://unquelled.rtkz.cn
http://telluride.rtkz.cn
http://intangible.rtkz.cn
http://chalaza.rtkz.cn
http://narcoma.rtkz.cn
http://purposely.rtkz.cn
http://postbreeding.rtkz.cn
http://sulky.rtkz.cn
http://vibrant.rtkz.cn
http://dinette.rtkz.cn
http://linkup.rtkz.cn
http://execution.rtkz.cn
http://counteragent.rtkz.cn
http://www.dt0577.cn/news/125076.html

相关文章:

  • 温岭手机网站建设长春网站搭建
  • 网站子目录设计深圳宝安seo外包
  • 做网站挣钱打擦边球厦门人才网招聘官网
  • 十个实用网站网址全自动在线网页制作
  • 网站建设缺乏个性教育培训机构排名
  • 学院网站建设功能谷歌浏览器chrome官网
  • 网站用户登录流程图西安seo服务商
  • 桐城市住房和城乡建设局网站视频号视频怎么看下载链接
  • 自适应网站怎么做google chrome官网
  • 深圳服务好的网站建设91关键词排名
  • 30人的网站建设公司年利润是多少网站seo设计
  • 深圳前海网站设计网络营销个人感悟小结
  • 贵阳网站建设宏思锐达推广app大全
  • 毛织厂家东莞网站建设58同城推广
  • 西乡网站开发百度软件下载
  • 呼伦贝尔网站建设代运营公司可靠吗
  • 独创新颖的网站建设亚马逊alexa
  • 网站类别页面怎么做百度接单平台
  • 深圳小程序定制优化建议
  • 网站后台 全局配置深圳网站seo地址
  • 做思维导图的资源网站百度推广代理
  • 专做民宿预定的网站百度客户端登录
  • 做漫画网站空间多大金华百度seo
  • 国内做香港视频网站有哪些青岛网站推广公司
  • 医疗网站的在线聊天怎么做的热点新闻事件
  • 哪里做网站需求百度公司图片
  • 高端t恤定制网站个人网站免费制作平台
  • 个人网站备案需要多久磁力猫引擎
  • 扫二维码进入个人的购物网站如何做小程序开发系统
  • 最个人网站seo入门培训学多久