unity, 人物与移动跳台的交互

例如人物跳到往复运动的移动跳台上后应随跳台运动。

要实现这个效果有两个思路,一是用运动学一是用动力学。

一,运动学思路:

1,创建一个box作为移动跳台,用unity里内置的Animation Curves调个左右往复运动的动画。

2,为移动跳台添加Rigidbody并勾选Is Kinematic。这样,移动跳台本身就不再接受动力学作用了,但是它会对其它物体产生动力学作用。(While the Rigidbody is marked isKinematic, it will not be affected by collisions, forces, or any other part of physX. This means that you will have to control the object by manipulating the Transform component directly. Kinematic Rigidbodies will affect other objects, but they themselves will not be affected by physics. 引自:http://docs.unity3d.com/Manual/class-Rigidbody.html)

3,为移动跳台添加脚本,实现如下逻辑:如果player在跳台上(player的foot接触跳台且player处于非跳起状态),则player.Rigidbody.velocity.xz与跳台velocity.xz一致,否则令player.Rigidbody.velocity.xz=(0,0)。注:(1)有人可能会问,如果让player.Rigidbody.velocity.xz=(0,0),那player还怎么在键盘控制下移动呢?因为我的demo中player在键盘控制下移动是通过直接设置player.Rigidbody.position实现的,所以player.Rigidbody.velocity.xz=(0,0)并不影响人物移动。(2)为什么是player.Rigidbody.velocity.xz=(0,0),而不是player.Rigidbody.velocity.xzy=(0,0,0)呢?因为在我的demo中y方向上的运动(自由落体)不是通过直接设置player.Rigidbody.position.y实现的:D。

4,至此就差不多搞定了,唯一一个问题就是发现人物跳上移动跳台后跳台的运动会变得不那么流畅(略微卡顿),而且可以看出并不是性能问题导致的。后来我尝试对跳台的Animator作如下设置:Animator->Update Mode由Normal改为Animate Physics,卡顿就不再发生了(原因还没有细致分析,可能需要先详细了解一下Animate Physics选项的含义),至此达到了理想效果。

二,动力学思路(尚未尝试):

在真实世界中人物跳上移动跳台后随移动跳台一起运动,是由于摩擦力引起的,所以可以尝试通过调节跳台和人物foot间的摩擦属性来实现,要添修改摩擦属性,需要将Collider中的Material换成自已的physic material(创建方法:在asserts窗口中 鼠标右键->Create->Physic Material)。

时间: 2024-10-06 23:17:32

unity, 人物与移动跳台的交互的相关文章

Unity人物跳跃效果

最近在做一个小游戏,需要实现人物的跳跃效果.自己从简单到复杂,把目前比较好的方法都试了一遍,这里简单总结一下. 1.直接使用动画位移 这个其实是美术在做动画的时候已经做好的东西,跳跃的动画本身就含有位移,只需要在应用动画的时候勾选Apply Root Motion就可以了.但是简单也有问题,就是跳跃的高度无法控制,不够灵活.不过对于新手来说先试一下,至少人物能动起来,心里美滋滋. 2.使用刚体组件加作用力 这个其实就是利用Unity的刚体组件,模拟真实的物理效果.在跳跃的时刻给物体添加一个向上的

Unity 人物跟谁手指的移动(第一种方式)

长夜漫漫无心睡眠,敲敲代码,越敲越来劲! 我发现好多小朋友都在玩熊出没之xxxx这个游戏,居然打了一下午都没玩通第2关,我把测试也叫来陪我一起玩! 结果他也打不通,我再去叫策划,他也没打过,我去叫主管,他还是没打过,我再回去叫测试使用游戏修改大师,修改宝石买完全部的装备!结果他还是没打过! (这款游戏,让我人生都变得没有了意义!) 人物跟随手指的移动而移动: 第一种方式: 手指移动了多少,主角就移动多少!(我使用的这种方式,存在问题,手指过快滑动,主角会慢慢跟手指有了距离!) 第二种方式: 手指

Unity中的C#与C++交互<微信牛牛源码

演示了一个渲染三角形的例子 微信牛牛源码(h5.hxforum.com) 联系方式170618633533企鹅2952777280 微信Tel17061863533 源码出售,平台出租,房卡有意者私聊扣QC++部分代码实现了对底层API的封装以及核心功能实现. RenderingPlugin.cpp中定义了C++的接口.其中定义了一系列全局变量,用户通过接口函数对这些全局变量赋值.如: 设定纹理 // -----------------------------------------------

unity 面试题(答案)

一.什么是渲染管道?是指在显示器上为了显示出图像而经过的一系列必要操作.渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去.主要步骤有:本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化. 二.如何优化内存?有很多种方式,例如1.压缩自带类库:2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉:3.释放AssetBundle占用的资源:4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小:

Unity入门

Unity入门 用unity做一个最简单的交互.(相当于Hello World)仅仅要最后能执行就算入门了. 第一步,要先用三维制作软件制作出我们须要的场景. 这儿使用的是Max2012(软件大小3.09G). 首先设置一下在max使用的长度单位,选择使用米为单位. 设置步骤是Customize---->Units Setup---->System Unit Setup---->下拉选择Meters 先用max里的平面几何体制作一片地面,操作很easy,过程例如以下: 点击平面butto

Unity面试题整理

Unity技术面试题 一:什么是协同程序?答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行.换句话说,开启协程就是开启一个可以与程序并行的逻辑.可以用来控制运动.序列以及对象的行为. 二:Unity3d中的碰撞器和触发器的区别?答:碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性.当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数:当Is Trigger=true时,碰撞器被物理引

Unity全面的面试题(包含答案)

这个是我刚刚整理出的Unity面试题,为了帮助大家面试,同时帮助大家更好地复习Unity知识点,如果大家发现有什么错误,(包括错别字和知识点),或者发现哪里描述的不清晰,请在下面留言,我会重新更新,希望大家共同来帮助开发者 一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足. 二:Unity3d中的碰撞器和触发器的区别? 碰撞器是触发器的载体,而触发器只是碰撞器身上的一个

[Unity3D]Unity3D游戏开发之在Android视图中嵌入Unity视图

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培,我博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本文作者:秦元培,本文出处:

Unity中嵌入网页插件Embedded Browser2.1.0

背景 最近刚换了工作,新公司不是做手游的,一开始有点抵触,总觉得不是做游戏自己就是跨行了,认为自己不对口,但是慢慢发现在这可以学的东西面很广,所以感觉又到了打怪升级的时候了,老子就在这进阶了. 一进公司他们使用H5开发,做一款地形信息系统的软件,基于Unity开发,但是所有页面都是Js写的,所以我第一件事要做的是实现Unity嵌入网页,并实现交互. 在这里,领导说之前做过类似的即用的Embedded Browser2.1.0这个插件,让我研究下做个简单Demo. 实现方案 使用插件Embedde