首先见官方文档

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.

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

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

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

//正常运动状态:跳跃,走动
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

最新文章

  1. react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置
  2. Description Resource Path Location Type Error executing aapt: Return code -1073741819 Client line 1
  3. 辗转相除法求最大公约数,非goto
  4. 媒体查询判断ipad和iPhone各版本
  5. suds调用webservice
  6. iOS开发中检测版本,有新版本则更新
  7. HTTP状态码大全(转自wiki)
  8. [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
  9. selenium滚动条
  10. Posix线程编程指南(1) 线程创建与取消
  11. MHA自动Failover过程解析(updated) 转
  12. 让Win10显示系统中隐藏的文件夹
  13. HttpClient4登陆有验证码的网站
  14. DokuWiki的发现之旅
  15. MVN TEST指定运行脚本
  16. ASP.NET 实现PDF文件下载[转]
  17. vue中的组件
  18. bzoj1477: 青蛙的约会(exgcd)
  19. UI自动化(二)css选择器
  20. GDI基础(1):绘制线条和图形

热门文章

  1. UNIX高级环境编程(12)进程关联(Process Relationships)- 终端登录过程 ,进程组,Session
  2. FTP 命令的使用
  3. Java入门系列:实例讲解ArrayList用法
  4. 浅析Java虚拟机结构与机制[转]
  5. 4.Dubbo2.5.3集群容错和负载均衡
  6. 禁止选择DIV内的文本(css,js写法)
  7. es5与es6继承思考
  8. liMarquee – jQuery无缝滚动插件(制作跑马灯效果)
  9. 如何挂载另一个lvm硬盘
  10. 基于多进程和基于多线程服务器的优缺点及nginx服务器的启动过程