目录
1.Transform移动
2.Rigidbody移动
//==============================================
1.Transform移动===================================
匀速运动:以固定速度进行移动,速度值需要比较大
float MotorSave;
//当前位置= 数学类.匀速运动(当前位置,目标位置,速度*时间系数)
MotorSave = Mathf.MoveTowards(MotorSave, MotorTarget, MotorSpeed * Time.deltaTime);
Vector2 MotorSave;
//当前位置= 二维向量类.匀速运动(当前位置,目标位置,速度*时间系数)
MotorSave = Vector2.MoveTowards(MotorSave, MotorTarget, MotorSpeed * Time.deltaTime);
Vector3 MotorSave;
//当前位置= 三维向量类.匀速运动(当前位置,目标位置,速度*时间系数)
MotorSave = Vector3.MoveTowards(MotorSave, MotorTarget, MotorSpeed * Time.deltaTime);
差值运动:先快后慢
float MotorSave;
//当前位置= 数学类.差值运动(当前位置,目标位置,速度*时间系数)
MotorSave = Mathf.Lerp(MotorSave, MotorTarget, MotorSpeed * Time.deltaTime);
Vector2 MotorSave;
//当前位置= 二维向量类.差值运动(当前位置,目标位置,速度*时间系数)
MotorSave = Vector2.Lerp(MotorSave, MotorTarget, MotorSpeed * Time.deltaTime);
Vector3 MotorSave;
//当前位置= 三维向量类.差值运动(当前位置,目标位置,速度*时间系数)
MotorSave = Vector3.Lerp(MotorSave, MotorTarget, MotorSpeed * Time.deltaTime);
平滑运动:在运动时间内到达目标位置
float MotorSave;
//当前位置= 数学类.平滑(当前位置,目标位置,返回 每秒速度,运动时间)
MotorSave = Mathf.SmoothDamp(MotorSave, MotorTarget, ref MotorVelocity, SpeedTime);
Vector2 MotorSave;
//当前位置= 二维向量类.平滑运动(当前位置,目标位置,返回 每帧速度,运行时间,设置最大速度,时间系数)
MotorSave = Vector2.SmoothDamp(MotorSave, MotorTarget, ref MotorVelocity, MotorSpeed, Mathf.Infinity, Time.deltaTime);
Vector3 MotorSave;
//当前位置= 三维向量类.平滑运动(当前位置,目标位置,返回 每帧速度,运行时间)
MotorSave = Vector3.SmoothDamp(MotorSave, MotorTarget, ref MotorVelocity, MotorSpeed);
自轴运动:以自己的轴向进行前进运动
Translate平移:Unity提供的方法,无法放入变量凭空计算,结果会直接作用在物体上
//transform.平移方法(方向.向前*时间系数,坐标系.自身)
transform.Translate(Vector3.forward * Time.deltaTime, Space.Self);
//transform.平移方法(方向.向前*时间系数,坐标系.世界)
transform.Translate(Vector3.forward * Time.deltaTime, Space.World);
自制方法:
二维:
//===[自轴移动]======
/// <summary>
/// 电机运行:自轴移动操控式(相对于自身坐标系的轴移动)
/// </summary>
/// <param name="Origin">物体位置(transform.position)</param>
/// <param name="direction">方向(transform.forward为正前方)</param>
/// <param name="Time_deltaTime">时间参数</param>
/// <returns>return : 物体位置</returns>
public Vector2 Run_ShaftDelta(Vector2 Origin, Vector2 direction, float Time_deltaTime)
{
return Origin = Origin + direction * MotorSpeed * Time_deltaTime;
}
三维:
//===[自轴移动]======
/// <summary>
/// 电机运行:自轴移动操控式(相对于自身坐标系的轴移动)
/// </summary>
/// <param name="Origin">物体位置(transform.position)</param>
/// <param name="direction">方向(transform.forward为正前方)</param>
/// <param name="Time_deltaTime">时间参数</param>
/// <returns>return : 物体位置</returns>
public Vector3 Run_ShaftDelta(Vector3 Origin, Vector3 direction, float Time_deltaTime)
{
return MotorSave = Origin + direction * MotorSpeed * Time_deltaTime;
}
返回目录
2.Rigidbody移动====================================
velocity()
这种方法只能适用于刚体,因为velocity是刚体特有的属性。//改速度移动
gameObject.GetComponent<Rigidbody>().velocity = Vector3.forward * MoveSpeed;
MovePosition()
//让物体移动到新的位置position。//恒速移动
//适用于频繁改变,推荐使用这种,较为平滑
rb.MovePosition(transform.position + transform.forward * Time.deltaTime);
AddForce()
playerRgd.AddForce(dir*force);//方向与力道
//给刚体增加一个力。//炮弹加速
playerRgd.AddRelativeForce(dir*force);
//添加一个力到刚体。相对于本地坐标。