[Unity算法]斜抛运动
斜抛运动:
1.物体以一定的初速度斜向射出去,物体所做的这类运动叫做斜抛运动。
2.斜抛运动看成是作水平方向的匀速直线运动和竖直方向的竖直上抛运动的合运动。
3.它的运动轨迹是抛物线。
ObliqueThrow.cs
1 using System; 2 using UnityEngine; 3 4 public class ObliqueThrow : MonoBehaviour { 5 6 private readonly float gravity = -9.8f; //重力加速度 7 private Vector2 horizontalDir; //水平方向 8 private float startSpeed; //初速度 9 private float sinValue; //sin值 10 private float cosValue; //cos值 11 private Vector3 startPos; //开始位置 12 private float endY; //结束高度(地面高度) 13 private float timer; //运动消耗时间 14 private Action<GameObject> finishCallBack; //落地后的回调 15 private bool canMove = false; //能否运动 16 17 void Update() 18 { 19 if (!canMove) 20 { 21 return; 22 } 23 24 //移动过程 25 timer = timer + Time.deltaTime; 26 27 float xOffset = startSpeed * timer * cosValue * horizontalDir.x; 28 float zOffset = startSpeed * timer * cosValue * horizontalDir.y; 29 float yOffset = startSpeed * timer * sinValue + 0.5f * gravity * timer * timer; 30 31 Vector3 endPos = startPos + new Vector3(xOffset, yOffset, zOffset); 32 if (endPos.y < endY) 33 { 34 endPos.y = endY; 35 canMove = false; 36 } 37 transform.position = endPos; 38 39 //移动结束 40 if (!canMove) 41 { 42 finishCallBack(gameObject); 43 Destroy(this); 44 } 45 } 46 47 public void StartMove(Vector2 horizontalDir, float startSpeed, float angle, float endY, Action<GameObject> finishCallBack) 48 { 49 this.horizontalDir = horizontalDir; 50 this.startSpeed = startSpeed; 51 sinValue = Mathf.Sin(Mathf.Deg2Rad * angle); 52 cosValue = Mathf.Cos(Mathf.Deg2Rad * angle); 53 startPos = transform.position; 54 this.endY = endY; 55 timer = 0; 56 this.finishCallBack = finishCallBack; 57 canMove = true; 58 } 59 }
TestThrow.cs
1 using UnityEngine; 2 using System.Collections.Generic; 3 4 public class TestThrow : MonoBehaviour { 5 6 public GameObject testGo; 7 private bool isDebug = false; 8 private List<GameObject> drawGoList = new List<GameObject>(); 9 10 void Update () 11 { 12 if (Input.GetKeyDown(KeyCode.Q)) 13 { 14 //半径为1的方向圆 15 float randomNum = Random.Range(0f, 1f);//[0, 1] 16 float x = randomNum * 2 - 1;//[-1, 1] 17 float z = Mathf.Sqrt(1 - x * x); 18 if (Random.Range(0f, 1f) > 0.5f) 19 { 20 z = -z; 21 } 22 23 isDebug = true; 24 ObliqueThrow obliqueThrow = testGo.AddComponent<ObliqueThrow>(); 25 obliqueThrow.StartMove(new Vector2(1, 0), 5f, 45f, 0f, (go) => { 26 isDebug = false; 27 Debug.Log("移动结束"); 28 }); 29 } 30 else if(Input.GetKeyDown(KeyCode.W)) 31 { 32 testGo.transform.position = new Vector3(0f, 5f, 0f); 33 for (int i = 0; i < drawGoList.Count; i++) 34 { 35 Destroy(drawGoList[i]); 36 } 37 drawGoList.Clear(); 38 } 39 40 if (isDebug) 41 { 42 GameObject go = GameObject.CreatePrimitive(PrimitiveType.Sphere); 43 go.transform.position = testGo.transform.position; 44 go.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f); 45 drawGoList.Add(go); 46 } 47 } 48 }
效果如下:
转载于:https://www.cnblogs.com/lyh916/p/10398640.html
[Unity算法]斜抛运动相关推荐
- 三维场景中斜抛运动顶点的生成
三维场景中斜抛运动顶点的生成 1 算法思想-斜抛运动 2 代码 3 参考文献 1 算法思想-斜抛运动 2 代码 void getparabola_vertex_2(glm::vec3 _Point, ...
- matlab模拟斜抛运动60,大学物理教学改革论文,关于大学物理教学方法改革-Matlab的妙用相关参考文献资料-免费论文范文...
导读:本文是一篇关于大学物理教学改革论文范文,可作为相关选题参考,和写作参考文献. (1.长江师范学院大学物理教研室 重庆 408100, 2.内蒙古工业大学 理学院物理系 内蒙古呼和浩特 01005 ...
- Python + matplotlib.animation 模拟斜抛运动动画(含完整代码)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Abstract Introduction Matplotlib.animation Physics model and C ...
- Unity 斜抛运动 路径点
1.截图 2.代码介绍 使用Unity自带Rigidbody刚体插件. 代码比较简单:使用Unity的 Rigidbody.velocity 进行位移(不使用AddForce). private ...
- C语言编码小球斜抛运动,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我把源代码分享出来,欢迎有兴趣的朋友下载测试,修改优化. /*********************************************** ...
- 斜抛运动的最远射程问题
问题概述: 在o点上方高度为h处以速度v抛出一物体,该物体运动一段时间后落到地面p处,问抛出方向与水平方向的夹角是多少时,op有最大值,最大值是多少? 当 时: op有最大值: 题目:迎风舞
- HDOJ 5166 -----斜抛运动
题意:一个人站在H高的地方斜向上抛小球,求出小球落地后的水平距离. 算法思想: 1.计算出小球的最大滞空时间 2.计算出小球的水平速度 3.s=Vx*t; 推导来自小岛: 代码如下: #include ...
- 斜抛运动的最大水平射程
1.抛出点与落地点在同一水平面:在这种情况下,当抛出角为 45度时,水平射程最大,其值为: 2.抛出点与落地点不在同一水平面上:当抛出角等于 arctg(v0/vt)时,水平射程最大,其值为:v0*v ...
- 【游戏开发实战】Unity 2D游戏物理运动曲线轨迹预测,以愤怒的小鸟为例,轨迹曲线云团圈圈
文章目录 一.前言 二.思考分析 三.场景搭建 1.导入图片素材 2.鸟预设 3.地面环境 4.曲线的点预设 5.预览效果 四.代码 1.鸟脚本:Bird.cs 2.曲线预测器:Trajectory. ...
- matlab 斜抛 空气阻力,运用MATLAB对运动学、动力学问题进行过程分析
第 29 卷第 6 期 Vol. 29 NO. 6 重庆工商大学学报( 自然科学版) J Chongqing Technol Business Univ. ( Nat Sci Ed) 2012 年 6 ...
最新文章
- 以太坊RLP机制分析
- 深入理解DOM事件类型系列第六篇——加载事件
- .net生成图片验证码
- 基于React Native和Ethers.js的电子钱包(三):Ethers.js
- CentOS7 安装 mysql8
- 前后台分离使用cookie判断用户状态以及传递参数
- 中boxplot函数的参数设置_如何在Python中生成图形和图表
- iPhone 12 Pro系列终于不怕弯了!
- 对计算机基础知识的一点感想,浅议对《计算机应用基础》教学感想.doc
- Sublime text3 更改侧边栏颜色
- 中国料斗底部谷物拖车市场趋势报告、技术动态创新及市场预测
- 3.修改和编译XposedBridge.jar 和 api.jar
- 拓端tecdat|python爬虫进行Web抓取LDA主题语义数据分析报告
- Java基础 | 专业排行榜前7的Java代码审计工具
- 【拓展】一个故事讲完 CPU 的工作原理
- iText5实现Java生成PDF文件完整版
- [渝粤教育] 西南科技大学 广告学 在线考试复习资料
- 华为服务器显示器蓝屏怎么办,华为交换下误接TP-LINK交换导致监控画面蓝屏的解决方案...
- mysql 上传rar文件大小_js文件上传 自定义压缩文件和文件格式及大小限制
- Gunicorn-配置参数