[Unity算法]平抛运动
平抛运动:
1.物体以一定的初速度水平方向抛出,如果物体仅受重力作用,这样的运动叫做平抛运动。
2.平抛运动可看作水平方向的匀速直线运动以及竖直方向的自由落体运动的合运动。
水平方向位移:s = v * t
竖直方向位移:h = 1/2 * g * t * t
3.平抛物体的运动轨迹为抛物线。

HorizontalThrow.cs
using System;
using UnityEngine; public class HorizontalThrow : MonoBehaviour { private readonly float gravity = -9.8f; //重力加速度
private Vector2 horizontalDir; //水平方向
private float horizontalSpeed; //水平速度
private Vector3 startPos; //开始位置
private float endY; //结束高度(地面高度)
private float timer; //运动消耗时间
private Action<GameObject> finishCallBack; //落地后的回调
private bool canMove = false; //能否运动 void Update ()
{
if (!canMove)
{
return;
} //移动过程
timer = timer + Time.deltaTime; float xOffset = horizontalSpeed * horizontalDir.x * timer;
float zOffset = horizontalSpeed * horizontalDir.y * timer;
float yOffset = 0.5f * gravity * timer * timer; Vector3 endPos = startPos + new Vector3(xOffset, yOffset, zOffset);
if (endPos.y < endY)
{
endPos.y = endY;
canMove = false;
}
transform.position = endPos; //移动结束
if (!canMove)
{
finishCallBack(gameObject);
Destroy(this);
}
} public void StartMove(Vector2 horizontalDir, float horizontalSpeed, float endY, Action<GameObject> finishCallBack)
{
this.horizontalDir = horizontalDir;
this.horizontalSpeed = horizontalSpeed;
startPos = transform.position;
this.endY = endY;
timer = ;
this.finishCallBack = finishCallBack;
canMove = true;
}
}
TestHorizontalThrow.cs
using UnityEngine;
using System.Collections.Generic; public class TestHorizontalThrow : MonoBehaviour { public GameObject testGo;
private bool isDebug = false;
private List<GameObject> drawGoList = new List<GameObject>(); void Update ()
{
if (Input.GetKeyDown(KeyCode.Q))
{
//半径为1的方向圆
float randomNum = Random.Range(0f, 1f);//[0, 1]
float x = randomNum * - ;//[-1, 1]
float z = Mathf.Sqrt( - x * x);
if (Random.Range(0f, 1f) > 0.5f)
{
z = -z;
} isDebug = true;
HorizontalThrow horizontalThrow = testGo.AddComponent<HorizontalThrow>();
horizontalThrow.StartMove(new Vector2(x, z), 3f, 0f, (go) => {
isDebug = false;
Debug.Log("移动结束");
});
}
else if(Input.GetKeyDown(KeyCode.W))
{
testGo.transform.position = new Vector3(0f, 5f, 0f);
for (int i = ; i < drawGoList.Count; i++)
{
Destroy(drawGoList[i]);
}
drawGoList.Clear();
} if (isDebug)
{
GameObject go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
go.transform.position = testGo.transform.position;
go.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
drawGoList.Add(go);
}
}
}
效果如下:

[Unity算法]平抛运动的更多相关文章
- [Unity算法]点是否在多边形范围内
参考链接: https://www.zhihu.com/question/26551754 http://www.cnblogs.com/leoin2012/p/6425089.html 原理如下: ...
- [Unity算法]斜抛运动(变种)
之前的斜抛运动,如果运动到游戏中,显然是太呆板了,那么可以试着加入一些效果,让它看起来更生动一些,类似游戏中的击飞或者掉落效果: 1.在达到最高点的时间点±X的时间段内,会有“减速”效果,形成一种在空 ...
- [Unity算法]弧度和角度
参考链接: https://zhidao.baidu.com/question/576596182.html 1.弧度和角度的转换 2.sin函数 3.cos函数 4.tan函数 5.特殊的三角函数值 ...
- [Unity算法]斜抛运动
斜抛运动: 1.物体以一定的初速度斜向射出去,物体所做的这类运动叫做斜抛运动. 2.斜抛运动看成是作水平方向的匀速直线运动和竖直方向的竖直上抛运动的合运动. 3.它的运动轨迹是抛物线. Oblique ...
- [Unity算法]A星寻路(一):基础版本
参考链接: https://www.cnblogs.com/yangyxd/articles/5447889.html 一.原理 1.将场景简化,分割为一个个正方形格子,这些格子称之为节点(node) ...
- Unity 网络斗地主 牌的一些算法
Unity 网络斗地主 牌的一些算法 在这儿说一下,我的项目是用svn的方式,上传在https://v2.svnspot.com/18666451713.doudizhu这个svn上,大家可以下载T ...
- C控制台实现模拟平抛运动算法
平抛运动这个相信读了高中物理都知道这个概念了,详细的我就不说了,不明白的看看百度: 平抛运动 接下来看看用控制台实现的平抛运动算法: #include <stdio.h> #include ...
- A星寻路算法入门(Unity实现)
最近简单学习了一下A星寻路算法,来记录一下.还是个萌新,如果写的不好,请谅解.Unity版本:2018.3.2f1 A星寻路算法是什么 游戏开发中往往有这样的需求,让玩家控制的角色自动寻路到目标地点, ...
- Unity项目 - Boids集群模拟算法
1987年Craig W.Reynolds发表一篇名为<鸟群.牧群.鱼群:分布式行为模式>的论文,描述了一种非常简单的.以面向对象思维模拟群体类行为的方法,称之为 Boids ,Boids ...
随机推荐
- cmp命令详解
Linux cmp命令 Linux cmp命令用于比较两个文件是否有差异.主要用来比较两个二进制文件 当相互比较的两个文件完全一样时,则该指令不会显示任何信息.若发现有所差异,预设会标示出第一个不同之 ...
- FastReport问题整理(http://129.sqdj.gov.cn/?p=77)
1.FastReport中如果访问报表中的对象?可以使用FindObject方法.TfrxMemoView(frxReport1.FindObject(’memo1′)).Text:=’FastRep ...
- WebService C#开发/调用
简单描述C#开发WebService操作步骤以及调用方式 WebService开发 第一步:创建Web空项目 第二步:为创建的Web空项目添加Web服务 第三步:实现WebService方法(仅供参考 ...
- 解决linux下node.js全局模块找不到的情况
今天在在linux上用npm安装了pm2准备部署node项目,结果通过pm2命令启动项目的时候报pm2找不到,这很伤,以为pm2没有安装成功,但是在node安装目录下面的bin文件夹里面调用pm2却没 ...
- live555峰哥的私房菜(二)-----计划任务(TaskScheduler)探讨
计划任务(TaskScheduler)探讨 上一篇谈到SingleStep()函数会找到三种任务类型并执行之. 这三种任务是: socket handler, event handler, delay ...
- 使用模板引擎artTemplate的几个问题总结
一.Template not found 有的时候模板写的并没有问题,可就是找不到.这时候可能是<script>加载顺序问题,模板渲染在模板加载完成之前先执行了,调整<script& ...
- PAT 乙级 1026 程序运行时间(15) C++版
1026. 程序运行时间(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 要获得一个C语言程序的运行时间, ...
- python 指定文件编码的方法
import sys reload(sys) sys.setdefaultencoding('utf-8')
- flume http source示例讲解
一.介绍 flume自带的Http Source可以通过Http Post接收事件. 场景:对于有些应用程序环境,它可能不能部署Flume SDK及其依赖项,或客户端代码倾向于通过HTTP而不是Flu ...
- 3d图像坐标轴及css3属性的讲解
3d立体坐标轴 如有不知道各种插件的怎么办? 网上查,百度 1.css选择器: 1.id 2.class 3.标签 4.子代 5.后代 6.交集 7.并级 8.通配符 9.结构 10.伪类 11.属性 ...