介绍
还在学习物理知识中,代码可能出现一些BUG。
代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80using UnityEngine; public class ZeroPhysicsHelper : MonoBehaviour { private static Vector3 GetPosX(Vector3 vX, float t) { return vX * t; } private static Vector3 GetPosY(Vector3 vY, Vector3 g, float t) { return vY * t + 0.5f * Mathf.Pow(t, 2) * g; } /// <summary> /// 根据'速度'计算'位移' /// </summary> /// <param name="startPos"></param> /// <param name="velocity"></param> /// <param name="g"></param> /// <param name="t"></param> /// <returns></returns> public static Vector3 GetPos(Vector3 startPos, Vector3 velocity, Vector3 g, float t) { var upNormal = -g.normalized; var vX = Vector3.ProjectOnPlane(velocity, upNormal); var vY = Vector3.Project(velocity, upNormal); return startPos + GetPosX(vX, t) + GetPosY(vY, g, t); } /// <summary> /// 根据'最高高度'计算'起跳速度' /// </summary> /// <param name="g"></param> /// <param name="height"></param> /// <returns></returns> public static Vector3 GetTakeoffVelocityByHeight(Vector3 g, float height) { return -g.normalized * Mathf.Sqrt(2f * g.magnitude * height); } /// <summary> /// 根据'时间'计算'发射速度' /// </summary> /// <param name="startPos"></param> /// <param name="targetPos"></param> /// <param name="g"></param> /// <param name="t"></param> /// <returns></returns> public static Vector3 GetLaunchVelocityByT(Vector3 startPos, Vector3 targetPos, Vector3 g, float t) { var upNormal = -g.normalized; var toTarget = targetPos - startPos; var targetPosXZ = Vector3.ProjectOnPlane(toTarget, upNormal); var targetPosY = Vector3.Project(toTarget, upNormal); var vX = targetPosXZ / t; var vY = (targetPosY - 0.5f * Mathf.Pow(t, 2) * g) / t; return vX + vY; } /// <summary> /// 根据'发射角度'计算'发射速度' /// </summary> /// <param name="startPos"></param> /// <param name="targetPos"></param> /// <param name="g"></param> /// <param name="angel"></param> /// <returns></returns> public static Vector3 GetLaunchVelocityByAngel(Vector3 startPos, Vector3 targetPos, Vector3 g, float angel) { var upNormal = -g.normalized; var projectileXZPos = Vector3.ProjectOnPlane(startPos, upNormal); var targetXZPos = Vector3.ProjectOnPlane(targetPos, upNormal); var toTargetXZ = targetXZPos - projectileXZPos; var forwardNormal = toTargetXZ.normalized; var r = toTargetXZ.magnitude; var tanAlpha = Mathf.Tan(angel * Mathf.Deg2Rad); var h = targetPos.y - startPos.y; var xSpeed = Mathf.Sqrt(-g.magnitude * r * r / (2.0f * (h - r * tanAlpha))); var ySpeed = tanAlpha * xSpeed; var vX = xSpeed * forwardNormal; var vY = ySpeed * upNormal; return vX + vY; } }
最后
以上就是想人陪小蝴蝶最近收集整理的关于[Unity]计算抛体运动轨迹(抛物线)与发射速度介绍代码的全部内容,更多相关[Unity]计算抛体运动轨迹(抛物线)与发射速度介绍代码内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复