unity抛物线,平均速度下的运动轨迹

之前分享了关于两点之间抛物线的“金手指”的实现方案,然后有朋友问我,一般情况下会给出速度,如何模拟自然的轨迹。

我一听这不是很容易实现么,根据之前的公式,得出两点之间时间恒定时,轨迹是确定的,也就是说平均速度是恒定。

那么反过来,在给定平均速度,然后再通过距离/速度,就可得出时间,那么轨迹也就确定了。

OK,我不多废话,直接上代码:

using UnityEngine;
using System.Collections;

public class PaoWuLine : MonoBehaviour
{
    public float ShotSpeed = 10;
    private float time = 1;//代表从A点出发到B经过的时长
    public Transform pointA;//点A
    public Transform pointB;//点B
    public float g = -10;//重力加速度
    // Use this for initialization
    private Vector3 speed;//初速度向量
    private Vector3 Gravity;//重力向量

    private Vector3 currentAngle;
    void Start()
    {
        time = Vector3.Distance(pointA.position, pointB.position)/ShotSpeed;
        transform.position = pointA.position;//将物体置于A点
        //通过一个式子计算初速度
        speed = new Vector3((pointB.position.x - pointA.position.x) / time,
            (pointB.position.y - pointA.position.y) / time - 0.5f * g * time, (pointB.position.z - pointA.position.z) / time);
        Gravity = Vector3.zero;//重力初始速度为0
    }
    private float dTime = 0;
    // Update is called once per frame
    void FixedUpdate()
    {

        Gravity.y = g * (dTime += Time.fixedDeltaTime);//v=at
        //模拟位移
        transform.position += (speed + Gravity) * Time.fixedDeltaTime;
        currentAngle.x = -Mathf.Atan((speed.y + Gravity.y) / speed.z) * Mathf.Rad2Deg;
        transform.eulerAngles = currentAngle;
    }
}

这次直接把角度加上了,喜欢的朋友可以自己测试。

时间恒定的两点轨迹:http://www.cnblogs.com/jqg-aliang/p/4806017.html

一般抛物线轨迹:http://www.cnblogs.com/jqg-aliang/p/4806002.html#3292517

好了,关于愤怒的小鸟,弓箭之类的简单实现算法差不多够用了。之前我研究了很久的导弹飞行算法有了新的方向,

使用抛物线模拟动态轨迹,将会有更加真实自然的效果。欢迎关注。

时间: 2024-10-13 20:44:06

unity抛物线,平均速度下的运动轨迹的相关文章

Unity debug mode下的watermark去除

Unity debug模式下,截图等需求需要去除watermark,可以参考下面的步骤. 1.找到名为unity default resources的文件 2.使用hex editor,我使用的是HxD.随意就好 3.ctrl+F 查找UnityWatermark-dev,然后编辑这个字段后面的几个字节,改为00, 目的是让watermark的贴图invalid. 4.保存退出即可.

Unity NGUI UIPanel下对粒子或自定义Mesh的剪裁

写在开篇: 越来越烦那些无脑转发自己不做验证的博主论坛楼主,网上好不容易找到一些资料,结果代码搞下来却是错的,有些确实是因为版本问题太老不兼容,但是有些明显是有问题的,转发前自己试试就知道肯定是不能用的.结果...哎...真是不想说啥了. 这次是在小地图中画线画圈,用到了动态绘制Mesh,小地图需要对这些线进行裁切,所以去网上搜了一篇叫做<Unity NGUI UIPanel下对粒子的剪裁>的文章.当然还是感谢一下原作者提供的思路.我这里对这篇文章中涉及到的代码进行了优化改动,使之可以使用.没

(转)Unity Assets目录下的特殊文件夹名称

原文:http://wiki.unity3d.com/index.php/Special_Folder_Names_in_your_Assets_Folder 1.隐藏文件夹以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中.2.Standard Assets在这个文件夹中的脚本最先被编译.这个文件夹中的脚本会被导出到Assembly-CSharp-firstpass, Assembly-UnityScript-firstpass

Unity Assets目录下的特殊文件夹名称

1.隐藏文件夹 以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中.2.Standard Assets 在这个文件夹中的脚本最先被编译. 这个文件夹中的脚本会被导出到Assembly-CSharp-firstpass, Assembly-UnityScript-firstpass 或 Assembly-Boo-firstpass项目中,依语言而定.参考http://docs.unity3d.com/Documentation/Ma

Unity NGUI UIPanel下对粒子的剪裁

使用 unity 做游戏开发时,有时需要在scroll view下使用粒子,但粒子是不会被 UIPanel 所裁剪的,本人提供了脚本 ParticleSystemClipper,用来处理这种情况: using System; using UnityEngine; [RequireComponent(typeof(UIPanel))] public class ParticleSystemClipper : MonoBehaviour { const string ShaderName = "Bl

unity windowEditor平台下鼠标左键控制摄像机的视角

工作的原因,今天就只写了unity下的鼠标左键控制摄像机的视角左右上下调节:明天,补齐.[有诸多参考,着实是需要多多加油的] using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class CameraMove : MonoBehaviour { public Vector3 target; private Vec

Unity查找Editor下Project视图中特定的资源

1 [MenuItem("Tools/Check Text Count")] 2 public static void CheckText () 3 { 4 //查找指定路径下指定类型的所有资源,返回的是资源GUID 5 string[] guids = AssetDatabase.FindAssets ("t:GameObject", new string[] { "Assets/Resources/UI" }); 6 //从GUID获得资源所

二、Unity Editor模式下,操作选中对象

使用Unity提供的工具类 UnityEditor.Selection public static GameObject activeGameObject public static UnityEngine.Object activeObject 原文地址:https://www.cnblogs.com/hjshen/p/10219266.html

unity监测按下键的键值并输出+unity键值

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class testTiming : MonoBehaviour { public Text t; public KeyCode currentKey; public Event e; // Use this for initialization void