码迷,mamicode.com
首页 > 编程语言 > 详细

Unity 物理引擎实现匀速圆周运动

时间:2015-05-13 23:16:13      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:unity   物理引擎   匀速圆周运动   

摘要

本文主要讲述如何利用Unity物理引擎实现匀速圆周运动。

前言

首先,我们可以利用Unity API,Transform.RotateAround来实现匀速圆周运动。但是这个实现,我觉得不过瘾,因为你只是了解一个API,并没有学到任何其他的知识。接下讲一点有意思东西。

物理知识

1.定义:

质点沿圆周运动,如果在任意相等的时间里通过的圆弧长度都相等,这种运动就叫做“匀速圆周运动”,亦称“匀速率圆周运动”。因为物体作圆周运动时速率不变,但速度方向随时发生变化。所以匀速圆周运动的线速度是无时无刻在发生变化的。

2.基本公式:

v(线速度)=ΔS/Δt=2πr/T=ωr=2πrn (S代表弧长,t代表时间,r代表半径,n代表转速)

ω(角速度)=Δθ/Δt=2π/T=2πn (θ表示角度或者弧度)

T(周期)=2πr/v=2π/ω

Fn(向心力)=mrω^2=mv^2/r=mr4π^2/T^2=mr4π^2n^2

为了方便起见,我们采用线速度v,半径r,质量m,来计算向心力。F=m*v*v/r

源码:

using UnityEngine;
using System.Collections;

public class circle : MonoBehaviour {
	
	public Vector3 linerSpeed;
	public Vector3 circleDot;
	
	private float radius;
	private Rigidbody body;
	private float speed;
	private float omga;
	// Use this for initialization
	void Start () {
		body=gameObject.GetComponent<Rigidbody> ();
		body.velocity = linerSpeed;
		radius = (circleDot - gameObject.transform.position).magnitude;
		speed = linerSpeed.magnitude;
		omga = speed *speed/ radius;
	}
	
	// Update is called once per frame
	void Update () {
		//Debug.Log (body.velocity);
	}
	void FixedUpdate () {
		Vector3 fp = circleDot - gameObject.transform.position;//向心力矢量,但此时向量模不正确
		fp = fp.normalized * body.mass * omga;//纠正向量的模
		body.AddForce (fp,ForceMode.Force);
	}
}

温馨提示:

circleDot:围绕哪点做匀速圆周运动。

linerSpeed:匀速圆周运动的线速度。


1.AddForce 需要使用ForceMode.Force模式,不要使用Impulse模式。冲力模式会增加向心力效用,导致更多向中心靠拢。

2.利用空间换取时间,把一些运算结果保存起来,以便下一帧复用。

3.利用物理引擎会消耗更多性能,但可以了解更多知识嘛,也许还要更优方法,在此抛砖引玉。


Unity 物理引擎实现匀速圆周运动

标签:unity   物理引擎   匀速圆周运动   

原文地址:http://blog.csdn.net/zjq2008wd/article/details/45695815

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!