标签:unity
在物体运动中加入重力
实现注意:
y = (0.5f * GR * t * t) + (vy * t) + 200.0f;
以下代码使用积分制作抛物线
using UnityEngine;
using System.Collections;
//在物体运动中加入重力
public class ParabolicMotionTest : MonoBehaviour
{
//物体的X位置
float posX = 0;
//物体的Y位置
float posY = 0;
//物体在x方向上的速度
float speedX = 0;
//物体在y方向上的速度
float speedY = -8;
//屏幕的右上像素在世界空间的坐标
Vector3 ScreenRightTopPos;
//屏幕的左下像素在世界空间的坐标
Vector3 ScreenLeftBottomPos;
//box的半宽度
float boxHalfWidth;
//运行时间
float runTime;
//重力加速度
const float GR = 0.4f;
//物体出生位置
Vector2 bornPos;
void Start()
{
//将屏幕右上的像素转换为世界空间的坐标
ScreenRightTopPos = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0));
//将屏幕右下的像素转换为世界空间的坐标
ScreenLeftBottomPos = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 0));
//box的半宽度,因为box是正方形
boxHalfWidth = transform.localScale.x * 0.5f;
//出生位置 左上角
bornPos = new Vector2(ScreenLeftBottomPos.x + boxHalfWidth, ScreenRightTopPos.y - boxHalfWidth);
//初始位置屏幕左上角
transform.localPosition = new Vector3(bornPos.x, bornPos.y, 0);
}
void Update()
{
//检测,如果物体出了界面,让其重新到bornPos点
if (posX - boxHalfWidth >= ScreenRightTopPos.x
|| posX + boxHalfWidth <= ScreenLeftBottomPos.x
|| posY - boxHalfWidth >= ScreenRightTopPos.y
|| posY + boxHalfWidth <= ScreenLeftBottomPos.y)
{
//屏幕左上角
posX = bornPos.x;
posY = bornPos.y;
//运行时间归0
runTime = 0;
}
//x方向每帧时间内的位移到的值
posX = speedX * runTime;
//y方向每帧时间内的位移到的值
posY =(0.5f * GR * runTime * runTime) + (speedY * runTime) + bornPos.y;
//时间的改变值
runTime += Time.deltaTime;
//设置该帧的位置
transform.localPosition = new Vector3(posX, posY, 0);
}
}
Unity游戏开发的数学与物理 4 ( 在物体运动中加入重力 )
标签:unity
原文地址:http://blog.csdn.net/bigpaolee/article/details/45218295