Articles of 轨道

如何实现一个轨道可调的旋转?

这是一个脚本: public float RotationSpeed = 100f; public float OrbitSpeed = 50f; public float DesiredMoonDistance; public Transform target; public Vector3 axis = Vector3.forward; void Update () { transform.Rotate(Vector3.forward, RotationSpeed * Time.deltaTime); transform.RotateAround(target.position, Vector3.forward, OrbitSpeed * Time.deltaTime); float currentMoonDistance = Vector3.Distance(target.position, transform.position); Vector3 towardsTarget = transform.position – target.position; transform.position = transform.position + (DesiredMoonDistance – currentMoonDistance) * towardsTarget.normalized; […]

360轨道摄像机控制器

我在场景中有一个固定的立方体,我绕着相机绕行。 我有我的MainCamera嵌套在一个GameObject中,我称之为“OrbitalCamera”。 我的目标是点击(或点击)并拖动旋转相机在空间的物体周围,让你感觉就像在旋转立方体(即:如果我点击立方体上的一个面的顶部,并拉下来,我旋转X值)。 在大部分情况下,我的脚本是可以工作的,但是在旋转了X和Y之后,一些控件(主要是Y)被颠倒过来。 这是我的脚本: public class OrbitalCamera : MonoBehaviour { public bool cameraEnabled; [SerializeField] private float touchSensitivity; [SerializeField] private float scrollSensitivity; [SerializeField] private float orbitDampening; protected Transform xFormCamera; protected Transform xFormParent; protected Vector3 localRotation; protected float cameraDistance; void Start () { cameraEnabled = true; xFormCamera = transform; xFormParent = transform.parent; cameraDistance = transform.position.z * […]

根据接近角计算轨道方向

我试图用corona-sdk开发一个没有摩擦的简单2D空间游戏。 在游戏中,我有几个行星都按照牛顿的万有引力定律给玩家施加力量。 一旦玩家足够接近一个星球,我需要把他放在轨道上。 我这样做是通过在地球和玩家之间建立一个枢轴连接。 根据玩家的线速度,我计算关节的运动速度,以便尽可能在地球上实现平滑的循环旋转。 这个解决scheme可能不是最优的( 在将来的版本中,我想避免完全的联合 ),到目前为止工作,但我无法正确地确定联合的旋转方向。 根据玩家的接近角度,玩家在地球周围的旋转应该是CW或CCW。 我如何计算? 谢谢 !

XNA放大/缩小模型而不是缩放模型

我试图在我的游戏中实现放大/缩小function。 我可以用Z和X键改变cameraDistance值。 而不是缩放,它看起来像模型缩小或变大(移近或远离相机)。 相机应该靠近或远离模型。 以下是我的观点和投影matrix。 cameraDistance是似乎“缩放”模型的值。 经过几天的混乱之后,我意识到(是的,过了几天!:)),我不应该改变这个值。 Matrix view = Matrix.CreateRotationY(MathHelper.ToRadians(cameraRotation)) * Matrix.CreateRotationX(MathHelper.ToRadians(cameraArc)) * Matrix.CreateTranslation(0, -45, 0) * Matrix.CreateLookAt(new Vector3(0, forwardRotation, -cameraDistance), new Vector3(0, 0, 0), Vector3.Up); Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, 1, 10000); 所以,而不是改变cameraDistance值,我想我应该改变我的CameraPositionOffset 。 以下是我的updateCamera方法 // This vector controls how much the camera's position is offset from the // sphere. This value can […]

Unity Controller根据正确的棒状input制作光罩轨道

D平台竞技场喜欢游戏。 现在我已经有了一个十字线,因为控制器右边的水平移动使用了左右旋转function,光标在播放器上移动,而在键盘上它的效果很好,因为控制器上的控制器很时髦,因为你必须左旋转逆时针旋转让它顺时针旋转。 我一直在努力改变这个好一个半月。 我试着自己编码,然后像疯了似的用Googlesearch,但是我什么都没有想出来。 他们基于垂直和水平给你的input是最困惑我的东西。 在debugging器中出现这样从一个debug.log时,倾斜了 – “H:0.02528,V:-.9874454”。 这是有道理的,但当右上角看起来像“H:0.7592,V:-.842965”。 这是混淆我的部分。 我无法find一种方法来使用这些数据,我已经经历过的任何function,尝试新的function都没有任何意义。 任何建议或想法将大大帮助我,将更加赞赏! 基于上面的图像,我希望我的分划板被放置在围绕着玩家中心的轨道上,根据控制器上右侧的位置。 所以,如果我完全命名我的棍子,十字线上升,但如果我释放它留在那里。 然后,如果我将它倾斜到左下角,它将在那里“传送”而不沿轨道移动。 所以想想老同学双胞胎射手,你可以立即瞄准你所select的方向。 这是我的旧代码,使用旋转,慢慢地使您的十字丝轨道,因为你不断地左或右举行棍子。 我添加了一个叫做AV的新轴,它是垂直的,而不是水平的,所以现在我只需要一种方式来一起使用它们。 void AimControllers() { if (currentControllerAimAxisH != null) { AH = Input.GetAxis (currentControllerAimAxisH); if (Mathf.Abs (AH) > stickTol) { reticle.transform.RotateAround(this.transform.position,new Vector3(0,0,-AH),orbitAngle); } } }

从Cartesian向量计算轨道元素

我在计算工作方面遇到了严重的麻烦。 我正在计算位置vector和速度vector的轨道元素。 (我也知道周围身体的距离和质量) 角动量方程如下:h = r * v 偏心方程式为:e =((v ^ 2-μ/ | r |)r-(r⋅| v |)v /μ 我插入位置和速度来获得h,然后将它们插入到另一个等式中以获得偏心率。 这些应该是常数,除非另外施加一个力量,否则不会改变……但它们并不是恒定的。 实际上,它们随着轨道的转移而变化。 在图中,我刚刚留下了一条轨迹来显示轨道。 我应该能够计算所需的信息,但是它们依赖于常量,而这些常数并不是一成不变的。 我参考了刚体的位置和速度,并且正确地input了方程。 我在行星之间施加力量的代码如下: void CalculateForce(Transform body) { float m1 = rbody.mass; float m2 = body.GetComponent<Rigidbody> ().mass; float distance = Vector3.Distance (transform.position, body.position); float f = (m1 * m2) / Mathf.Pow (distance, 2); Vector3 […]

我的轨道代码产生错误的结果

我在天空中有一个名为“太阳”的游戏对象。 一个名为“GameManager”的游戏对象跟踪游戏中的时间,它负责更新时间和date。 对于我的太阳,我做了这样的事情来得到一个百分比用于在轨道上的太阳位置: float percentage = (((float)theGameManager.GetHourOfDay() / (float)GameManager.numberOfHoursInADay) * 360.0f); 如果给定半径,角度和原点,我有一段代码可以将圆点返回。 public static Vector3 GetPointInCircle(float radius, float angleInDegrees, Vector3 origin) { Vector3 resultingPoint = new Vector3(0.0f, 0.0f); resultingPoint.x = origin.x + radius * Mathf.Cos(angleInDegrees); resultingPoint.y = origin.y + radius * Mathf.Sin(angleInDegrees); return resultingPoint; } 我使用这个函数来确定每一帧的太阳位置,因为我传递的角度只是圆的百分比,我期望百分比variables给出越来越大的角度,组成360度。 它确实。 但是,当我设置太阳新位置使用: Vector3 newPos = new Vector3(MathsHelper.GetPointInCircle(sunOrbitRadius, percentage, new […]

围绕3d球体的对象

我在libgdx java / android中开发,但不使用像Unity这样的高级环境。 我在[0,0,0]有一个球体,透视相机看着它。 通过主游戏循环,我已经设法让相机沿不同的方向围绕球体。 然而,我想要做的是有一个固定的摄像机,并有三个物体自行绕轨道,并自己的轨道飞机。 一直在寻找,努力工作。 最后,我想把摄像头连接到轨道上的物体之上,但是在后面的阶段。 我也希望能够让这些对象按自己的“前进”方向进行轨道运行,但能够随着时间的推移而改变方向。 说从他们自上而下的看法,他们每个人都有一个0-359度的标题。 任何人都可以帮忙吗? 我试过使用二维X / Y地图转换到梅卡托投影,然后转换为球面坐标; 我试过Vector3和setFromSpherical() ; 我试过看四元数,只是迷路了。 这是一个相对简单的事情,我试图做的,围绕一个球体(半径3,原点[0,0,0])的多个轨道对象,但只是让我的初始方法错了。 编辑: 说完这个情况之后,我有两个select:我或者跟踪围绕球体的位置的轨道物体,或者根据物体的方向计算旋转量(0-359) 。 在与DMGregory的进一步谈判中,后一种select会引入轨道不稳定/分歧和粗心的错误,所以我决定把我的要求改为: 根据方位角和极坐标的2×360度值跟踪物体的位置,称为theta和phi。 这两个坐标用来定位球体周围任何一点的物体,但我需要能够“移动”轨道物体“向前”,从而相应地改变θ/φ,使得方向仍然可以改变。 非常感谢,

手动轨道运动在某个点猛拉

所以我一直在试图做一个简单的球形轨道另一个球体testing。 根据鼠标位置,较小的球体应该围绕较大的球体。 这是我的代码: //script is assigned to the smaller sphere screenpos = Camera.main.ScreenToWorldPoint (Input.mousePosition); if (screenpos.x <= centerball.x + 2f && screenpos.x >= centerball.x – 2f) //orbit radius is 2 { xpos = screenpos.x; ypos = (Mathf.Sqrt(4f-Mathf.Pow((xpos – centerball.x),2)))+centerball.y; //generated value of y from an equation //equation of circle -> y = sqrt[(r^2)-(xh)^2]+k if(screenpos.y <= […]

如何在球体上find碰撞reflection向量

我在Unity中创建了一个游戏,其中一些物体围绕z轴上10个半径的枢轴点(0,0,0)旋转,从而围绕着一个球体进行轨道运动。 轨道物体都具有相同的速度。 这一切都很好,但现在我需要在碰撞时增加一个弹跳效果,以便在碰撞时开始沿着新的方向进行轨道运动。 我目前正在检测两个轨道对象之间的碰撞,并试图确定碰撞产生的reflection向量。 轨道物体上都有球面碰撞体。 这是一个相关的代码示例,说明如何绕轨道运行对象: var velocity = 15f; var directionVector = new Vector2(Random.Range(-1f, 1f) * velocity, Random.Range(-1f, 1f) * velocity); transform.Rotate(directionVector.y * Time.deltaTime, -directionVector.x * Time.deltaTime, 0.0f); 这里是我目前正在试图反映directionVector向量的碰撞: var bounceVector = Vector3.Reflect(transform.forward, collider.gameObject.transform.forward).normalized; directionVector.x = bounceVector.x * velocity; directionVector.y = bounceVector.y * velocity; 这确实会导致物体彼此“反弹”,但反弹方向看起来不正确,所以我搞砸了一些东西。 我也觉得这可能不重要,因为我所需要做的就是取两个方向vector,并在碰撞中find它们的结果reflectionvector。 有什么想法吗?