Unity3d问题: 如图,我在我的3d人物模型上加了两个Collider,加的时候没有产生bug,但是我

你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
武器的BoxCollider以及刚体的设置
武器的BoxCollider
人物的BoxCollider
OnCollisionEnter 用的这个吗?
OnCollisionEnter 用的这个吗?是的,就是要用的这个函数
使用raycasting进行判断。
使用raycasting进行判断。怎么用raycasting进行碰撞检测啊?
怎么用raycasting进行碰撞检测啊?
这里有详细说明。不知youtube你是否看得到,我稍后会下载视频上传到网站上来。
这里有详细说明 ...再问下,为什么要用raycasting而不用自带的OnCollisionEnter()呢,感觉好奇怪啊
这里有详细说明 ...YouTube我确实上不了
这里有详细说明 ...我FQ去看了一下,它的做法是针对2D游戏的,我做的是3D游戏,不知道能不能用
我FQ去看了一下,它的做法是针对2D游戏的,我做的是3D游戏,不知道能不能用 ...对不起,理解错了。这是针对2d的,我也不是很清楚是否合适3d游戏。
使用raycasting进行判断。防止速度过快还是? {:94:}
raycasting实际上是一条看不见的直线,可以用它来判定敌人的距离已经武器的攻击范围等等。有一个youtube的教程介绍这个,需要我发上来吗?
你的敌人角色
有网格碰撞器么?
或者说你的敌人也有rigidbody
而且也勾上了Kinematic??
你的敌人角色
有网格碰撞器么?当然有了,下面两张图一张是敌人的,一张是角色的
或者说你的敌人也有rigidbody
而且也勾上了Kinematic??我是把武器的刚体勾上了Kinematic,如果不够的话,武器碰到人物自身的BoxCollider后就会被弹飞
或者说你的敌人也有rigidbody
而且也勾上了Kinematic??我给武器加上了刚体,人物都没有的
我是把武器的刚体勾上了Kinematic,如果不够的话,武器碰到人物自身的BoxCollider后就会被弹飞 ...武器的话
一般勾Trigger。。。。。
你改成这样
武器不要勾动力学
你改成这样
武器不要勾动力学
勾trigger按照这样做了,但是一开始,武器就会掉下去然后一直下落,这样做还是不行啊
是动力学和重力都不要用
有个rigidbody挂在那里就可以了
对了 限制移动和旋转你要勾选合适的才好
不然一碰就弹飞了也是可能的
对了 限制移动和旋转你要勾选合适的才好
不然一碰就弹飞了也是可能的现在是重力和动力学都没勾,勾了BoxCollider的Is Trigger,但是角色的武器一碰到敌人后就会往前错位,但不会飞出去。而且这样做了后,OnCollisionEnter()函数断点还是断不进去。
错位什么情况??
你的武器只有一个Collider啊。。。。点了trigger应该碰到什么都会穿过去啊。。。。
至于函数。。。。点了trigger就是OnTriggerEnter()了
OnTriggerEnter的参数是 Collider
不管角色还是敌人
都必须要有一个碰撞器
也可以有rigidbody
但是推荐角色控制器
碰撞的双方必须有一个有rigidbody
不能双方都勾选方向动力学
你保持这几条没问题
应该是不会出什么乱子的
看看,学习学习{:94:}看看,学习学习{:94:}
不管角色还是敌人
都必须要有一个碰撞器
也可以有rigidbody
但是推荐角色控制器
碰撞的双方必须 ...按照你说的这样做了,碰撞检测基本没问题了。你知道怎么用C#来判断Mecanim当前正在播放哪个动画吗?
判断当前动画状态,有这个方法,封装好的!你看脚本手册吧!我手机上不方便!
判断当前动画状态,有这个方法,封装好的!你看脚本手册吧!我手机上不方便! ...我勾选了Is Trigger后用OnTriggerEnter()函数还是存在问题,这个函数是攻击的动作已经完成后(即攻击的动画播放完了)才判断到碰撞的,请问下这个是该怎么解决?
这个可能跟你的代码有关了,需要看你代码
这个可能跟你的代码有关了,需要看你代码我把OnTriggerEnter()换成了OnTriggerExit()就正常了,好奇怪
检测不到,就说明你没有打到嘛,
果然是奇怪。。。。
用Physics.Linecast进行碰撞检测
动画时,碰撞体是没有效果的
被攻击对象也需要加一个Collider
因为你勾选了isKinematic选项,勾选过后该刚体是不会受到物理影响的
用OnCollisionEnter吧,没有回调的原因是你勾选了isKinematic选项,勾选过后,物体就不会受到物理效果的作用,从而不会有相应的物理事件触发
用这个你可以知道碰撞点在哪里,播放相应的特效之类的,用Trigger的话只能知道被攻击了{:106:}
用OnCollisionEnter吧,没有回调的原因是你勾选了isKinematic选项,勾选过后,物体就不会受到物理效果的作用,从而不会有相应的物理事件触发
用这个你可以知道碰撞点在哪里,播放相应的特效之类的,用Trigger的话只能知道被攻击了
要回复问题请先或
浏览: 1787
关注: 0 人程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之处理角色控制器实现上坡爬坡减速(四十六)
Unity3D研究院之处理角色控制器实现上坡爬坡减速(四十六)
围观15422次
编辑日期: 字体:
按照正常情况游戏中角色在上坡爬坡的时候速度应该减慢,可是角色控制器组件没有帮我们做这个判断,刚好最近工作中需要做这个功能,我就用勾股定理的法则来解决这个问题。如下图所示,当角色在爬坡的时候,角色控制器默认行走的距离就是 “C” 。但是如果行走的距离是“C” 你会发现上坡的速度太快了。这里我们需要计算”b”,让角色在上坡时候一次移动的距离是”b”这样移动就很正常了。
按照勾股定理的法则, c二次方 = a二次方 + b二次方。已知 c
和 a 我们求的b的距离即可。
第一步:主角目前所在地形的3D坐标,以及主角面朝方向行走“一段距离”后的3D坐标。 “一段距离” 我这里使用他的行走速度也就是1秒行走的长度。
第二步:把部分代码添加入角色控制器组件。
默认角色控制器行走是走路,简单改一下让他跑步。找到UpdateSmoothedMovementDirection ()方法,加入“|isMoving” 这个判断条件。
if (Input.GetKey (KeyCode.LeftShift) | Input.GetKey (KeyCode.RightShift) | isMoving)
然后找到Update()方法,(C#和js都可以编译通过下面这段代码)
12345678910111213141516171819202122232425262728293031323334353637
// Apply jumping logic ApplyJumping ();&&&&& //-------------开始插入代码 -------------& //当主角处于移动状态时开始计算主角目前坐标以及1秒后坐标&&&& if(IsMoving()) {&&&&&&&&&&//得到主角行走1秒后所在位置地形的坐标
var newPos = transform.position + (transform.rotation * Vector3.forward * moveSpeed);
newPos.y = Terrain.activeTerrain.SampleHeight(newPos);&
//得到主角当前位置所在地形的坐标
var heropos = transform.position;
heropos.y = Terrain.activeTerrain.SampleHeight(transform.position); &
//绘制一条Debug的线段,在编辑器中看的更清楚。
Debug.DrawLine(heropos,newPos,Color.red);&&&&&&&&&&&//斜边的长度
var c = moveSpeed;
//短直角边的长度&&&&&&&&&&var b = newPos.y - heropos.y;&&&&&&&&&&//b &0 标示主角在爬坡 b & 0 表示主角在下坡
{&&&&&&&&&&&&&& // 根据公式计算 a = 根号下 c二次方 -&&b二次方
var a = Mathf.Sqrt(Mathf.Pow(c,2) - Mathf.Pow(b,2));
moveSpeed = a;
} }& //-------------结束插入代码 ------------- & // Calculate actual motion Vector3 movement = moveDirection * moveSpeed + new Vector3 (0, verticalSpeed, 0) + inAirVelocity; movement *= Time.deltaTime;
直接运行游戏,你会发现当你在爬坡的时候主角的移动速度会减少,下坡与平地的时候移动速度正常。
另外还有一个地方需要注意下。 使用角色控制器时如果你的坡度角度过于大,你会发现你的主角无法继续爬坡。如下图所示,默认坡度角度为45。如果你需要爬坡更高的角度,直接修改Slope Limit数值即可。
当然代码中我们也可以控制角色是否可以继续爬坡,根据上述代码两点Y坐标的插值也可以判断。
&&float xx = newPos.y - heropos.y;
接着,如果你的项目中没有使用地形元素,而是用美术建模形成的地形话,那么就需要通过射线来取得“地形”上的两个点。如下图所示。
白色射线:得到主角面朝方向一步以后的地形坐标。
蓝色线段:主角移动的起点和终点的线段。
红色射线:处理摄像机(与本章无关)
在地形之上,我们使用下面这个方法得到地形的高度。
Terrain.activeTerrain.SampleHeight()
如果项目中的地形是美术做的话,需要用射线的方式来计算。代码比较简单我就不用注释了, 就是上图中的那个白色射线,从天上射向地面。参数是模型面前下一步的将要行走的坐标,然后通过射线换算成实际Y轴高度。
123456789101112131415161718
&&&&&&&& public static float SampleHeight(Vector3 point) {&
var sample = point;
sample.y += 20;&
Ray ray = new Ray(sample, Vector3.down);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
if(hit.collider.gameObject.tag != "Terrain")
Debug.DrawLine(sample,hit.point);
return hit.point.y;
return -1; }
剩下的地方就和上面的代码差不多了。如果你的项目中没有使用角色控制器,用别的方式来实现移动效果,也可以使用这样的方法,总是就是勾股定理了。
最后是本文的内容的下载地址,这样看起来原理就清晰很多。欢迎留言给我,大家互相学习与进步,哇咔咔。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
unity3d 中的模型加了重力之后就会穿过地面往下掉,我模型和地面都加了碰撞啊,没有选择trigger我在地形上加了几个石头,结果石头加了重力之后就直接往下层空间掉,可是我地形和模型都加了碰撞,地形加大是terrain collider,石头加的capsule collider ,都没有选择trigger,石头上的collision detection 是 continuous dynamic,而且我试着加过cube,cube也会穿过地面往下掉,这是为什么啊?
扫二维码下载作业帮
1.75亿学生的选择
是不是石头的collider嵌入到地面里面去了,试试把石头放到空中,掉下来看看;还可以把capsule 换成mesh collider看看
为您推荐:
其他类似问题
扫描下载二维码请问一个人物模型踢球的问题,求高人相助!
我有一个人物模型,就是store里的carl人偶。在他前面摆了一个球体,我现在想控制他做一个动作,伸脚踢出这个球,这个效果应该怎么个思路呢?我已经通过Kinect能控制他的各个关节运动了,就是前面的球踢了没反应。先谢谢各位高人了!
要评论请先&或者&
补充一下啊,我这个人一放进场景的地形上,加了刚体以后就直接往下掉,同问为啥?谢谢大家了!
脚碰到球的瞬间 & 给球一个力让它运动。。。并不是通过脚撞球运动的 &这样效果十分不好你这个场景的地形有没有加 mesh collider?
恩,原来我以为直接给脚和球都加上刚体,然后让Unity处理它俩的碰撞把球弹出去就行了,看样子是不行啊。另外问下哈,地形加mesh collider的作用就能让带刚体的人物模型停在地面上吗?&&
Kinect咋控制人物关节呢,求解答。
用Kinect获取骨骼节点,然后把节点和模型的骨骼绑定就行了。现在有两个插件能实现这个,一个是基于OpenNi的,另外一个是基于MS SDK的。
人物不用加刚体 这样会和角色控制器冲突会掉落地面目前最简单的办法是 给人物一个踢球动作 给球刚体
触发后给球加力或速度后使用快捷导航没有帐号?
只需一步,快速开始
&加载中...
查看: 5039|回复: 1
关于用普通collider+刚体实现人物移动跳跃
TA的其他好贴
马上注册,加入CGJOY,让你轻松玩转CGJOY。
才可以下载或查看,没有帐号?
原本用的是角色控制器实现人物控制,效果可以,可是后来发现角色控制器只能有一个碰撞,子对象加其他碰撞都失效,
所以想用collider+刚体来控制人物移动,但是跳跃的效果老是不理想,有种轻飘飘的感觉 ,谁能帮我改下代码啊- -public class NO : MonoBehaviour {
& && &&&
& && &&&
& && &&&private Vector3 move = Vector3.
& && &&&private Vector3 velocity=Vector3.
& && &&&
& && &&&// Use this for initialization
& && &&&void Start () {
& && &&&
& && &&&}
& && &&&
& && &&&// Update is called once per frame
& && &&&void Update () {
& && && && && & move=new Vector3(Input.GetAxis(&Horizontal&), 0,Input.GetAxis(&Vertical&));
& && && && && & // rigidbody.velocity = transform.forward * 8.0f;
& && && && && & velocity=rigidbody.
& && && && && & transform.Translate(move*0.8f);
& && && && && & if (Input.GetButtonDown (&Jump&)) {
& && && && && & rigidbody.velocity =new Vector3(velocity.x,20,velocity.z);
& && && && && & }
& && &&&}
}复制代码
如何让别人关注你?
好好好好好好好好好
本楼回复(<span id="dp_count_)
如何让别人关注你?
Powered by

我要回帖

更多关于 3d定制女仆2人物存档 的文章

 

随机推荐