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

南昌网站忧化微信平台专业网站建设

南昌网站忧化,微信平台专业网站建设,免费建设论坛网站,互联网企业营销策略前言 在一些射击类的游戏中#xff0c;经常会有一些类似炮台的武器#xff0c;可以上下左右旋转#xff0c;对目标进行瞄准。又或者是人物身上的枪支#xff0c;在准心转动的时候#xff0c;保持着武器朝向准心的方向。本篇简单的进行了效果的实现#xff0c;如下图经常会有一些类似炮台的武器可以上下左右旋转对目标进行瞄准。又或者是人物身上的枪支在准心转动的时候保持着武器朝向准心的方向。本篇简单的进行了效果的实现如下图 首先需要了解下有关pitchyawroll的含义 pitch是围绕X轴旋转也叫做俯仰角武器上下转动如图 yaw是围绕Y轴旋转也叫偏航角武器左右转动如图 roll是围绕Z轴旋转也叫翻滚角如图 根据需求我们一般只需要实现武器的pitch和yaw旋转即可来达到瞄准指定位置的效果。 思路 首先类似于炮台一般炮身和炮管会分开转动比如炮身只可左右转动yaw炮管上下转动pitch。我们需要两个Transform来分别控制旋转其中炮管要作为炮身子控件。但是枪支那种一般就不会分成两个控件所以我们把两个Transform同时指向同一控件即可。同时再用一个Transform指向瞄准物同时我们可以设置一些最大旋转角度限制。 需求1武器一直瞄准瞄准物但是当瞄准物在武器身后的时候不进行瞄准处理可以计算武器到瞄准物和武器正前方直接的夹角若夹角90度即做瞄准操作否则则不处理。 需求2yaw旋转即根据Y轴旋转eulerAngles.y进行变动物体呈左右转动之势。因为是左右旋转所以我们可以忽略武器和瞄准物的Y轴高度差距使两者在同一高度的情况下可以使用Vector3.ProjectOnPlane将武器到瞄准物的向量映射到武器的xz平面上计算武器forward的向量和武器到瞄准物的向量之间的夹角若夹角为0则已瞄准否则则改动eulerAngles.y的值使Transform.forward变动从而让夹角为0。我们可以利用向量的叉乘Vector3.Cross来判断两个向量之间的左右关系 需求3picth旋转基本和yaw旋转同理只是改变的是eulerAngles.x的值。 实现 直接上代码绑定在武器的父节点GameObject上绑定好对应关联即可 using UnityEngine;public class AutoRotationGun : MonoBehaviour {//最大旋转角度限制public int MaxPitchAngle 60;public int MaxYawAngle 60;//旋转速度public int Speed 20;//pitch转动的物体public Transform PitchTransform;//yaw转动的物体public Transform YawTransform;//瞄准物public Transform TargetTransform;Vector3 mPitchTarget, mYawTarget;float mCurrentPitchAngle, mCurrentYawAngle;Transform mTransform;float mPitchAngleOffset, mYawAngleOffset, mAimAngleOffset;Vector3 mPitchCross, mYawCross;void Start(){mTransform transform;}void Update(){if (TargetTransform ! null IsCanAim()){//旋转不使用PitchTransform.Rotate(x,y,z)防止z轴的变化if (PitchTransform YawTransform){PitchTransform.localEulerAngles new Vector3(PitchRotation(Speed * Time.deltaTime), YawRotation(Speed * Time.deltaTime), 0);}else{PitchTransform.localEulerAngles new Vector3(PitchRotation(Speed * Time.deltaTime), 0, 0);YawTransform.localEulerAngles new Vector3(0, YawRotation(Speed * Time.deltaTime), 0);}} #if UNITY_EDITORDebug.DrawRay(PitchTransform.position, PitchTransform.forward * 100, Color.red); #endif}bool IsCanAim(){//武器到瞄准物的向量与武器的正前面的夹角在90度以内才可瞄准if (PitchTransform ! null YawTransform ! null){//mAimAngleOffset Mathf.Acos(Vector3.Dot(transform.forward, (TargetTransform.position - PitchTransform.position).normalized)) * Mathf.Rad2Deg;mAimAngleOffset Vector3.Angle(mTransform.forward, TargetTransform.position - PitchTransform.position);if (mAimAngleOffset 90){return true;}}return false;}float PitchRotation(float speed){//当前旋转角度mCurrentPitchAngle PitchTransform.localEulerAngles.x;if (mCurrentPitchAngle 180){mCurrentPitchAngle -(360 - mCurrentPitchAngle);}//武器到瞄准物的向量映射到武器的yz屏幕上的法向量mPitchTarget Vector3.ProjectOnPlane(TargetTransform.position - PitchTransform.position, PitchTransform.right).normalized;//计算当前瞄准方向与预期方向的夹角。大于精度则需要pitch转动来调整mPitchAngleOffset Vector3.Angle(PitchTransform.forward, mPitchTarget);if (mPitchAngleOffset 0) {return mCurrentPitchAngle;}if (mPitchAngleOffset speed) {speed mPitchAngleOffset;}//计算两个向量的叉乘用于判断向量的左右关系mPitchCross Vector3.Cross(mPitchTarget, PitchTransform.forward).normalized;if (mCurrentPitchAngle -MaxPitchAngle mPitchCross PitchTransform.right) {return mCurrentPitchAngle - speed;}else if (mCurrentPitchAngle MaxPitchAngle mPitchCross ! PitchTransform.right) {return mCurrentPitchAngle speed;}return mCurrentPitchAngle;}float YawRotation(float speed){mCurrentYawAngle YawTransform.localEulerAngles.y;if (mCurrentYawAngle 180){mCurrentYawAngle -(360 - mCurrentYawAngle);}mYawTarget Vector3.ProjectOnPlane(TargetTransform.position - YawTransform.position, YawTransform.up).normalized;mYawAngleOffset Vector3.Angle(YawTransform.forward, mYawTarget);if (mYawAngleOffset 0) {return mCurrentYawAngle;}if (mYawAngleOffset speed) {speed mYawAngleOffset;}mYawCross Vector3.Cross(mYawTarget, YawTransform.forward).normalized;if (mCurrentYawAngle -MaxYawAngle mYawCross YawTransform.up) {return mCurrentYawAngle - speed;}else if (mCurrentYawAngle MaxYawAngle mYawCross ! YawTransform.up) {return mCurrentYawAngle speed;}return mCurrentYawAngle;} }
http://www.eeditor.cn/news/126241/

相关文章:

  • 电子网站建设考试首都之窗政务服务平台
  • 网站前期基础建设 怎么写访客可以用微信回复wordpress
  • 网站建设的软件介绍网站推广软文是什么
  • 网站维护客户南通企业网站seo
  • 做网站的客户网站建设与微信公众号绑定
  • 国外网站做家具哪个好网络正常
  • 网站建设 源美设计青岛做模板网站的公司
  • 农安建设局网站电子商务网络平台
  • 海外网站建站路由下做网站映射
  • 如何与导航网站做友情链接郑州怎么做网站排名
  • 泸州工投建设集团网站校园网站建设工作总结
  • 制作注册会员的网站网站怎么做外联
  • 内蒙建设厅投诉网站网站建设经验做法和取得的成效
  • 如何把网站做权重免费做店招的网站
  • 快乐彩网站做温州网站建设选择乐云seo
  • 网站查外链网站建设属于什么费
  • 外国网站域名人力外包系统
  • 做酒水网站陕西有哪些做文献的ppt模板下载网站
  • 无人机东莞网站建设拍摄微电影公司
  • 网站建设电话销售话术wordpress注册邮件
  • 做校园文化展览的网站工业设计网站 知乎
  • 小说短篇做的好的网站一台服务做两个网站
  • 网站 权限m域名网站安全吗
  • 2 网站建设的一般步骤包含哪些机关网站及新媒体建设实施方案
  • 泸州市建设工程质量监督站网站广告投放方式
  • 品牌大气的网站设计新传奇网页游戏
  • 家具网站素材linux网站架设怎么做
  • 重庆网站房地产wordpress 二级菜单样式
  • 网站栏目规划注意事项专门做微场景的网站
  • 怎样去各大网站做淘宝推广mine-video wordpress