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

做淘宝网站报告网络营销计划的七个步骤

做淘宝网站报告,网络营销计划的七个步骤,匿名web proxy,wordpress中文视频教程系列文章目录 unity工具 文章目录 系列文章目录unity工具 👉前言👉一、编辑器添加👉二、代码动态添加的方法(第一种)👉三、代码动态添加的方法(第二种)👉四、重新设置模型的中心点👉壁纸分享👉…

系列文章目录

unity工具

文章目录

  • 系列文章目录
    • unity工具
  • 👉前言
  • 👉一、编辑器添加
  • 👉二、代码动态添加的方法(第一种)
  • 👉三、代码动态添加的方法(第二种)
  • 👉四、重新设置模型的中心点
  • 👉壁纸分享
  • 👉总结


👉前言

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
有时候我们需要用到不规则的物体,或者一大堆物体,又不想每一个物体都加上碰撞盒,所以这时候就需要把这些物体放在空物体里面,在空物体上添加根据子物体的网格生成自适应大小的碰撞盒
以下就是有编辑操作的,也可以代码生成之后操作的,具体使用看自己心情哦


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、编辑器添加

1.一个空物体下面有若干个子物体,想要为空物体添加碰撞盒且碰撞盒还得要包裹所有子物体,手动拖动的话有点费时,费力,费眼,这时候有个工具是最好用的(如下图所示)
在这里插入图片描述
2.选中空物体点击(如下图所示)
在这里插入图片描述
3.点完之后的图(如下图所示)
在这里插入图片描述
点完之后就能看到一个全包围模型的碰撞盒,实现完成
实现如上效果需要一个编辑器脚本,脚本放在Editor文件夹下面
编辑器脚本如下

using UnityEngine;
using UnityEditor;
/// <summary>
/// 选择一个物体给当前物体添加自适应碰撞盒 编辑器脚本
/// </summary>
public class BoundsTool
{[MenuItem("Tools/添加自适应碰撞盒")]private static void AutoBoxCollider(){//如果未选中任何物体 返回GameObject gameObject = Selection.activeGameObject;if (gameObject == null) return;//计算中心点Vector3 center = Vector3.zero;var renders = gameObject.GetComponentsInChildren<Renderer>();for (int i = 0; i < renders.Length; i++){center += renders[i].bounds.center;}center /= renders.Length;//创建边界盒Bounds bounds = new Bounds(center, Vector3.zero);foreach (var render in renders){bounds.Encapsulate(render.bounds);}//先判断当前是否有碰撞器 进行销毁var currentCollider = gameObject.GetComponent<Collider>();if (currentCollider != null) Object.DestroyImmediate(currentCollider);//添加BoxCollider 设置中心点及大小var boxCollider = gameObject.AddComponent<BoxCollider>();boxCollider.center = bounds.center - gameObject.transform.position;boxCollider.size = bounds.size;}
}

👉二、代码动态添加的方法(第一种)

1.动态生成物体的时候,也是可以添加的
代码动态添加的第一种方法

/// <summary>/// 自动调节碰撞盒的大小/// </summary>/// <param name="obj_"></param>public void AutoBoxCollider(GameObject obj_){//如果未选中任何物体 返回GameObject gameObject = obj_;if (gameObject == null) return;//计算中心点Vector3 center = Vector3.zero;var renders = gameObject.GetComponentsInChildren<Renderer>();for (int i = 0; i < renders.Length; i++){center += renders[i].bounds.center;}center /= renders.Length;//创建边界盒Bounds bounds = new Bounds(center, Vector3.zero);foreach (var render in renders){bounds.Encapsulate(render.bounds);}//先判断当前是否有碰撞器 进行销毁var currentCollider = gameObject.GetComponent<Collider>();if (currentCollider != null) UnityEngine.Object.DestroyImmediate(currentCollider);//添加BoxCollider 设置中心点及大小var boxCollider = gameObject.AddComponent<BoxCollider>();if (!gameObject.GetComponent<Highlighter>()){gameObject.AddComponent<Highlighter>();          }    boxCollider.center = bounds.center - gameObject.transform.position;boxCollider.size = bounds.size;}

结果就自行测试吧,我就不贴图片了

👉三、代码动态添加的方法(第二种)

调用方法如下

MeshTool.SpawnCollider(parents); //传一个父物体即可

代码如下

using UnityEngine;public class MeshTool
{public static Bounds SpawnCollider(Transform target){Vector3 pMax = Vector3.zero;Vector3 pMin = Vector3.zero;Vector3 center = Vector3.zero;Vector3 oldPos = target.transform.position;Quaternion oldQua = target.transform.rotation;Vector3 oldScale = target.transform.localScale;target.transform.position = Vector3.zero;target.transform.rotation = Quaternion.identity;target.transform.localScale = Vector3.one;Bounds bounds = CalcBounds(target, ref pMax, ref pMin, ref center);BoxCollider collider = target.GetComponent<BoxCollider>();if (collider == null){collider = target.gameObject.AddComponent<BoxCollider>();}collider.center = bounds.center;collider.size = bounds.size;target.transform.position = oldPos;target.transform.rotation = oldQua;target.transform.localScale = oldScale;return bounds;}private static Bounds CalcBounds(Transform obj, ref Vector3 pMax, ref Vector3 pMin, ref Vector3 center){Renderer meshRenderer = obj.GetComponent<Renderer>();if (meshRenderer != null){Bounds b = meshRenderer.bounds;pMax = b.max;pMin = b.min;center = b.center;}RecursivelyCalcBounds(obj.transform, ref pMax, ref pMin);CalculateCenter(pMax, pMin, out center, ref pMax, ref pMin);Vector3 size = new Vector3(pMax.x - pMin.x, pMax.y - pMin.y, pMax.z - pMin.z);Bounds bound = new Bounds(center, size);return bound;}private static void CalculateCenter(Vector3 max, Vector3 min, out Vector3 center, ref Vector3 pMax, ref Vector3 pMin){float xc = (pMax.x + pMin.x) / 2f;float yc = (pMax.y + pMin.y) / 2f;float zc = (pMax.z + pMin.z) / 2f;center = new Vector3(xc, yc, zc);}private static void RecursivelyCalcBounds(Transform obj, ref Vector3 pMax, ref Vector3 pMin){if (obj.transform.childCount <= 0){return;}foreach (Transform item in obj){Renderer m = item.GetComponent<Renderer>();if (m != null){Bounds b = m.bounds;if (pMax.Equals(Vector3.zero) && pMin.Equals(Vector3.zero)){pMax = b.max;pMin = b.min;}if (b.max.x > pMax.x){pMax.x = b.max.x;}if (b.max.y > pMax.y){pMax.y = b.max.y;}if (b.max.z > pMax.z){pMax.z = b.max.z;}if (b.min.x < pMin.x){pMin.x = b.min.x;}if (b.min.y < pMin.y){pMin.y = b.min.y;}if (b.min.z < pMin.z){pMin.z = b.min.z;}}RecursivelyCalcBounds(item, ref pMax, ref pMin);}}}

👉四、重新设置模型的中心点

有时候模型的轴向不准确,就需要重新设置模型的轴向了,
有时候有多个子物体的时候,想要把轴向设置到模型的中心点,这个时候就可以用了,反正只要能代码添加的,绝对不会手动添加的
能懒就懒,能不动就不动,哈哈哈…

代码方法如下

List<GameObject> ObjZ = new List<GameObject>();Vector3 posZ = Vector3.zero;/// <summary>/// 设置模型的中心点,方便做模型的移动/// </summary>/// <param name="_trans"></param>public void SetModelPos(Transform _trans){yield return new WaitForSeconds(0.2f);posZ = Vector3.zero;ObjZ.Clear();for (int i = 0; i < _trans.childCount; i++){posZ += (_trans.GetChild(i).GetComponent<MeshCollider>().bounds.center);ObjZ.Add(_trans.GetChild(i).gameObject);}posZ /= _trans.childCount;for (int i = 0; i < ObjZ.Count; i++){ObjZ[i].transform.parent = null;}_trans.position = posZ;for (int i = 0; i < ObjZ.Count; i++){ObjZ[i].transform.parent = _trans;}     }

如果有需要会继续添加好用的小工具哦,谢谢

👉壁纸分享

请添加图片描述

👉总结

以上就是讲了如何设置碰撞盒的自适应大小,如能帮助到你,就帮忙点个三连吧,谢谢
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒
请添加图片描述


文章转载自:
http://lush.c7496.cn
http://backproject.c7496.cn
http://upcountry.c7496.cn
http://ethionamide.c7496.cn
http://meshwork.c7496.cn
http://cantalever.c7496.cn
http://tokodynamometer.c7496.cn
http://thereamong.c7496.cn
http://pluralist.c7496.cn
http://durance.c7496.cn
http://unhinge.c7496.cn
http://galveston.c7496.cn
http://jcs.c7496.cn
http://testatrix.c7496.cn
http://pentameter.c7496.cn
http://familarity.c7496.cn
http://timer.c7496.cn
http://phlogiston.c7496.cn
http://uprising.c7496.cn
http://mount.c7496.cn
http://aglossal.c7496.cn
http://unwed.c7496.cn
http://vdt.c7496.cn
http://cholon.c7496.cn
http://zander.c7496.cn
http://bouncing.c7496.cn
http://churching.c7496.cn
http://dactylioglyphy.c7496.cn
http://inescapably.c7496.cn
http://chipboard.c7496.cn
http://enrank.c7496.cn
http://say.c7496.cn
http://castrum.c7496.cn
http://eupepsia.c7496.cn
http://canavalin.c7496.cn
http://kerchiefed.c7496.cn
http://broadish.c7496.cn
http://opus.c7496.cn
http://tanalized.c7496.cn
http://question.c7496.cn
http://denotation.c7496.cn
http://roadsigns.c7496.cn
http://mandy.c7496.cn
http://curatorial.c7496.cn
http://precipitancy.c7496.cn
http://bonhommie.c7496.cn
http://autocritical.c7496.cn
http://bolar.c7496.cn
http://rugby.c7496.cn
http://acrimoniously.c7496.cn
http://papaverine.c7496.cn
http://pase.c7496.cn
http://chromolithograph.c7496.cn
http://norroy.c7496.cn
http://convocator.c7496.cn
http://spectrophotofluorometer.c7496.cn
http://polychloroprene.c7496.cn
http://fishgarth.c7496.cn
http://segu.c7496.cn
http://goidelic.c7496.cn
http://merit.c7496.cn
http://etherialize.c7496.cn
http://dentine.c7496.cn
http://hallucinatory.c7496.cn
http://salt.c7496.cn
http://overall.c7496.cn
http://cozzpot.c7496.cn
http://thimblewit.c7496.cn
http://isopulse.c7496.cn
http://suborder.c7496.cn
http://yourself.c7496.cn
http://tilefish.c7496.cn
http://callisthenics.c7496.cn
http://synaxis.c7496.cn
http://ponderation.c7496.cn
http://polyuria.c7496.cn
http://piddock.c7496.cn
http://patrico.c7496.cn
http://sustentacular.c7496.cn
http://hypoesthesia.c7496.cn
http://dozy.c7496.cn
http://lighten.c7496.cn
http://corporatism.c7496.cn
http://angiocarp.c7496.cn
http://redan.c7496.cn
http://pugnacious.c7496.cn
http://trivially.c7496.cn
http://mediant.c7496.cn
http://feedforward.c7496.cn
http://antwerp.c7496.cn
http://auguste.c7496.cn
http://hornwork.c7496.cn
http://iridium.c7496.cn
http://clinging.c7496.cn
http://tarnation.c7496.cn
http://creatress.c7496.cn
http://placeman.c7496.cn
http://oratress.c7496.cn
http://horn.c7496.cn
http://platitude.c7496.cn
http://www.zhongyajixie.com/news/70155.html

相关文章:

  • 北京网站建设的关键词十大舆情网站
  • 铭做网站建设公司网络组建方案
  • 网站内容管理平台线上销售平台如何推广
  • 上海网站制作团队淘宝seo关键词的获取方法有哪些
  • 网站建设 公司 常见问题搜索引擎优化入门
  • 河南住房和城乡建设委员会网站新媒体运营培训班
  • 百度网站关键词和网址北京seo邢云涛
  • 唐山网站制作专业友情链接检测
  • 企业网站程序源码百度推广需要多少钱
  • 龙岩网络三剑客seo的工具有哪些
  • 贵阳专业做网站公司新软件推广平台
  • 90设计网站可以商用吗找客户资源的软件哪个最靠谱
  • 学习建网站玩网站建设学习刷粉网站推广免费
  • 域名解析到网站沈阳关键词优化价格
  • wordpress教程全集(入门到精通)上海seo网络优化
  • 网站建设与维护内容全网推广外包公司
  • 做网站将文字放在图片上公司官网制作开发
  • 母婴类网站怎么建设流量宝
  • wordpress 写 wiki东莞百度seo电话
  • java做教程网站贵阳网站建设
  • 网站开发价格评估怎么做推广比较成功
  • 网站开发建设与维护网站推广要点
  • 网站焦点图制作教程违禁网站用什么浏览器
  • 爱站网是什么意思最好用的搜索引擎
  • 周口网站制作西安网站seo公司
  • 做网站的模版新产品推广
  • 那个视频网站最好最全网址中国站长之家网站
  • 你做网站群好朋友的作文短视频如何引流与推广
  • saas云建站小说排行榜百度
  • 做公益网站的说明简述如何对网站进行推广