经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
unity纯粹物理驱动方式
来源:cnblogs  作者:小辉歌  时间:2018/12/5 9:24:58  对本文有异议

首先见官方文档

In most cases you should not modify the velocity directly, as this can result in unrealistic behaviour. Don't set the velocity of an object every physics step, this will lead to unrealistic physics simulation. A typical example where you would change the velocity is when jumping in a first person shooter, because you want an immediate change in velocity.

不要在每一帧中改变物体的刚体速度,否则会导致不真实的物理效果,比如如下代码,实际运行时,角色会发生严重的抖动

  1. void FixedUpdate()
  2. {
  3. float horizon=input.getAix("Hozizontal");
         rigidebody.Velocity= new Vector2(maxSpeed*horizon,rigidbody.velocity.y);
  1. }
    或者
  1. void FixedUpdate()
  2. {
  3. float horizon=input.getAix("Hozizontal");
         rigidebody.Addforce(new vector2(maxForce*horizon));
  1. }

    因此不能在帧运行过程中做出任何改变速度的行为,最好的方式是使用物理引擎本身的持续力来实现对物体的推动

//正常运动状态:跳跃,走动
void NormalMove() {
float j = Input.GetAxis("Jump");
if (grounded && (Input.GetButtonUp("Jump") || j > 0.99f))
{
rigid2D.AddForce(new Vector2(0, j * jumpForce));
}

if (Input.GetKey(KeyCode.D))
{
if (rigid2D.velocity.x < maxSpeed.x)                                       //如果运动的速度小于最大速度,那么
constantForce2D.force = new Vector2(horizonForce, 0);       //让持续的推动力为预制的力
else constantForce2D.force = new Vector2(0, 0);                  //如果速度大于等于最大速度,那么让推动力为0
}
else if (Input.GetKey(KeyCode.A))
{
if (rigid2D.velocity.x > -maxSpeed.x)
constantForce2D.force = new Vector2(-horizonForce, 0);
else constantForce2D.force = new Vector2(0, 0);
}
else constantForce2D.force = new Vector2(0, 0);

//如果不想让角色水平运动,那么设置角色减速,否则让阻力为0,表示角色掉落或者在运动过程中
if (grounded && !(Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D) || Input.GetKeyDown(KeyCode.Space))&&!lockIgnore) rigid2D.drag = 20f;
else rigid2D.drag = 0f;
}

物体的组件设置如下,其中物理材质的属性全部设置为0,物理检测为continues,睡眠模式为never sleep,interpolate为Interpolate

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号