位置: 编程技术 - 正文

rotation 与vector3乘积关系

编辑:rootadmin

推荐整理分享rotation 与vector3乘积关系,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

1.已知3D坐标,和一个旋转角度,以及一段距离,求目标点的3D坐标。

已知当前点为Target,目标点沿着Target的Y轴旋转度,沿着Target的X轴延伸米求目标点的3D坐标?

双击代码全选usingUnityEngine; usingSystem.Collections; publicclassTest : MonoBehaviour { publicTransform Target; voidLateUpdate () { Quaternion rotation = Quaternion.Euler(0f,f,0f) * Target.rotation; Vector3 newPos = rotation * newVector3(f,0f,0f); Debug.DrawLine(newPos,Vector3.zero,Color.red); Debug.Log("newpos " &#; newPos &#;" nowpos " &#; Target.position &#; " distance " &#; Vector3.Distance(newPos,Target.position)); } }

输出结果 :新坐标 (8.7, 0.0, -5.0) 当前坐标 (0.0, 0.0, 0.0)两点之间的距离 。

2.已知3D模型的角度求它的向量。

已知3D模型Target,Y轴旋转度后向前平移。

双击代码全选usingUnityEngine; usingSystem.Collections; publicclassTest : MonoBehaviour { publicTransform Target; voidLateUpdate () { if(Input.GetMouseButton(0)) { Quaternion rotation = Quaternion.Euler(0f,f,0f) * Target.rotation; Vector3 newPos = rotation * Vector3.forward; Target.Translate(newPos.x,newPos.y,newPos.z); } } }

3.已知一个目标点,让模型朝着这个目标点移动。

这是一个比较简单的例子,大家应该都能看明白。

双击代码全选Target.transform.LookAt(newVector3 (f,f,f)); Target.Translate(Vector3.forward);

这里我要说的就是Vector3.forward ,它等价与 new Vector3(0,0,1);它并不是一个坐标,它是一个标准向量,方向是沿着Z轴向前。这样平移一次的距离就是1米, 如果Vector3.forward * 那么一次平移的距离就是米。

在看看下面这段代码

双击代码全选Vector3 vecn = (TargetCube.position - Target.position).normalized; Target.Translate(vecn *0.1f);rotation 与vector3乘积关系

用向量减去一个向量求出它们的差&#;,normalized 是&#;式化向量,意思是把它们之间向量&#;式化到1米内。这样就可以更加精确的计算一次平移的距离了 vecn *0.1f 就标示一次平移1分米,蛤蛤。

向量不仅可以进行X Y Z轴的移动,同样可以进行旋转 ,下面这段代码就是让向量沿着Y轴旋转度。

双击代码全选Vector3 vecn = (TargetCube.position - Target.position).normalized; vecn = Quaternion.Euler(0f,f,0f) * vecn; Target.Translate(vecn *0.1f);

如果上述三道简单的练习题 你都能了然于心的话,那么本文最大的难题我相信也不会是什么难事,继续阅读吧。

假设我们需要计算主角面前5米内所有的对象时。以主角为圆心计算面前5米外的一个点,为了让大家看清楚我现将这条线绘制出来。

双击代码全选privatefloatdistance = 5f; voidUpdate () { Quaternion r= transform.rotation; Vector3 f0 = (transform.position &#; (r *Vector3.forward) * distance); Debug.DrawLine(transform.position,f0,Color.red); }

如下图所,我们已经将这两个点计算出来了。此时你可以动态的编辑主角Y轴的坐标,这个点永远都是沿着主角当前角度面前5米以外的点。

接下来,我们需要计算主角面前的一个发散性的角度。假设主角看到的是向左度,向右度在这个区域。

双击代码全选privatefloatdistance = 5f; voidUpdate () { Quaternion r= transform.rotation; Vector3 f0 = (transform.position &#; (r *Vector3.forward) * distance); Debug.DrawLine(transform.position,f0,Color.red); Quaternion r0= Quaternion.Euler(transform.rotation.eulerAngles.x,transform.rotation.eulerAngles.y - f,transform.rotation.eulerAngles.z); Quaternion r1= Quaternion.Euler(transform.rotation.eulerAngles.x,transform.rotation.eulerAngles.y &#; f,transform.rotation.eulerAngles.z); Vector3 f1 = (transform.position &#; (r0 *Vector3.forward) * distance); Vector3 f2 = (transform.position &#; (r1 *Vector3.forward) * distance); Debug.DrawLine(transform.position,f1,Color.red); Debug.DrawLine(transform.position,f2,Color.red); Debug.DrawLine(f0,f1,Color.red); Debug.DrawLine(f0,f2,Color.red); }

如下图所示,这时主角面前的区域就计算出来了。看起来就是两个三角形之间的区域。

最后就是简单的套用公式,计算一个点是否在三角形内,在本文中就是计算敌人的点是否在面前的这两个三角形内。

双击代码全选usingUnityEngine; usingSystem.Collections; publicclassMyTest : MonoBehaviour { publicTransform cube; privatefloatdistance = 5f; voidUpdate () { Quaternion r= transform.rotation; Vector3 f0 = (transform.position &#; (r *Vector3.forward) * distance); Debug.DrawLine(transform.position,f0,Color.red); Quaternion r0= Quaternion.Euler(transform.rotation.eulerAngles.x,transform.rotation.eulerAngles.y - f,transform.rotation.eulerAngles.z); Quaternion r1= Quaternion.Euler(transform.rotation.eulerAngles.x,transform.rotation.eulerAngles.y &#; f,transform.rotation.eulerAngles.z); Vector3 f1 = (transform.position &#; (r0 *Vector3.forward) * distance); Vector3 f2 = (transform.position &#; (r1 *Vector3.forward) * distance); Debug.DrawLine(transform.position,f1,Color.red); Debug.DrawLine(transform.position,f2,Color.red); Debug.DrawLine(f0,f1,Color.red); Debug.DrawLine(f0,f2,Color.red); Vector3 point = cube.position; if(isINTriangle(point,transform.position,f1,f0) || isINTriangle(point,transform.position,f2,f0) ) { Debug.Log("cube in this !!!"); }else { Debug.Log("cube not in this !!!"); } } private floattriangleArea(floatv0x,floatv0y,floatv1x,floatv1y,floatv2x,floatv2y) { returnMathf.Abs((v0x * v1y &#; v1x * v2y &#; v2x * v0y - v1x * v0y - v2x * v1y - v0x * v2y) / 2f); } boolisINTriangle(Vector3 point,Vector3 v0,Vector3 v1,Vector3 v2) { floatx = point.x; floaty = point.z; floatv0x = v0.x; floatv0y = v0.z; floatv1x = v1.x; floatv1y = v1.z; floatv2x = v2.x; floatv2y = v2.z; floatt = triangleArea(v0x,v0y,v1x,v1y,v2x,v2y); floata = triangleArea(v0x,v0y,v1x,v1y,x,y) &#; triangleArea(v0x,v0y,x,y,v2x,v2y) &#; triangleArea(x,y,v1x,v1y,v2x,v2y); if(Mathf.Abs(t - a) <= 0.f) { returntrue; }else { returnfalse; } } }

Unity3D 获取控件四个角在屏幕上的坐标 Vector3[]corners=newVector3[4];gameObject.GetComponentRectTransform().GetWorldCorners(corners);foreach(varitemincorners){Debug.Log(item);}出来的坐标的顺序是左下、左上、右上、右下

Metaio SDK 6.0.2自带Example自己实现(三) 前言:本文实现的是Example中的TutorialEdgeBasedInitialization功能,如果Metaio不知道怎么在Unity中进行简单的开发,请参考我的另一篇文章Metaio在Unity中的简单

[置顶] unity汤姆猫自动检测录音,不说话自动播放 unity汤姆猫自动检测录音,不说话自动播放脚本usingSystem.Collections.Generic;usingSystem.Linq;usingUnityEngine;[RequireComponent(typeof(AudioSource))]publicclassMicrophoneInput:MonoBe

标签: rotation 与vector3乘积关系

本文链接地址:https://www.jiuchutong.com/biancheng/369374.html 转载请保留说明!

上一篇:Unity协同程序(unity协程yield)

下一篇:Unity3D 获取控件四个角在屏幕上的坐标(unity获取组件的方法)

  • 房产税计入哪个科目 新会计准则
  • 个税汇缴常见问题
  • 印花税减免税优惠政策202
  • 购买财务软件费用入什么科目
  • 其他综合收益属于损益类科目吗
  • 社群运营收入怎么样
  • 民营医院的财务管理制度
  • 一般纳税人资格证书是什么样的
  • 法定盈余公积可以分配给股东吗
  • 利润表营业外收入怎么取数
  • 应收票据资产负债表
  • 地下建筑物应该怎样缴纳城镇土地使用税?
  • 多计提的销售费用冲销
  • 特殊销售方式下销售额的确定
  • 房地产企业开发成本科目明细
  • 预收账款核销的流程
  • 证券清算款是什么科目
  • 以前年度亏损本季度盈利所得税申报
  • 小规模转为一般纳税人最新规定
  • 保险公司如何计算车辆折旧
  • 代缴公司不给停社保怎么办
  • 电子汇票贴现怎样操作
  • 小微企业文化事业建设费是否可以享受减免
  • 顶账物品都有哪些
  • 其他应收款计提坏账比例
  • 王者荣耀如何更改战区
  • 公司租的宿舍记什么科目
  • 鸿蒙怎么添加
  • window10安装教程u盘
  • Mac SIP系统完整性保护开启及关闭的方法介绍
  • 关联企业承担什么责任
  • 广告费用计入什么会计科目
  • mac怎么删除应用程序中没有的软件
  • 腾讯云php
  • php定时执行代码
  • php中使用什么关键字定义常量
  • 会计中的计算公式
  • ThinkPHP中Common/common.php文件常用函数功能分析
  • 无票收入怎么计算1%税率
  • HTML常用标记
  • loss for
  • web前端修炼之道
  • 销售成本销售收入的关系
  • 企业有外币账户怎样做账
  • 关联公司开发票
  • 代垫运杂费计入原材料成本吗
  • 企业所得税品目应纳税所得额未申报
  • mysql性能监控工具和调优
  • 待抵扣进项税额转出会计分录
  • linux中备份
  • 净利润和盈余公式的关系
  • 企业所得税期初余额什么意思
  • 建筑行业现在还能斤不
  • 公司减免的社保退给个人吗
  • 住宿费收入会计分录
  • 权益法转其他权益工具
  • 其他应付款可以转主营业务收入吗
  • 购买税控盘费用能全额抵扣吗
  • 员工入股会计分录
  • 机床上的配件计入什么费用
  • 递延所得税资产和负债怎么理解
  • 资产减值损失和资产减值准备的区别
  • 什么是批发零售市场
  • 办理营业执照需要什么条件
  • 工业企业固定资产投资
  • sql server创建架构
  • sqlserver解锁用户命令
  • sqlserver 附加数据库 只读
  • Linux(Ubuntu)下Mysql5.6.28安装配置方法图文教程
  • 如何查看电脑型号及配置
  • 电脑系统xp怎么样
  • w8系统一键恢复
  • windows运行nodejs
  • 深入python3
  • python写一个复制文件的程序
  • 同源策略详解
  • android 动画特效
  • 企业所得税问题的研究论文
  • 土地增值税清算管理规程
  • 税务约谈的法律依据
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设