Unity 斜坡滑落

今天遇到斜坡会滑落,其实这也不是大事,但是越是高,滑落后滑行的越远,这就问题大了。于是网上找了很多相关的解决方案,都不理想。

!用transform移动时遇到斜坡会滑坡的问题。

!用角色控制器解决了滑坡问题(因为限制了斜坡角度)。但有些地方不够理想

第一个函数:SimpleMove()水平输入为转向非平移,想修改平移出现各种bug。

第二个函数:Move()方向键移动直接改变面向,不适合某些项目。修改也是各种问题。

搭配translate使用,也有各种问题,如加入Time.delatime时,角色控制器和translate对数值的判定不一致(这是因为translate和Move都是以帧数计算移动,而SimpleMove是以秒计算),除非不使用Time.delatime的话可以忽略。

!还有一个方法不使用角色控制器,对象使用两个碰撞器(胶囊体),半径不相同,遇到斜坡不会下滑太快太远,并且还能直接爬上很陡的破,自测是70-80度。如果不能爬上去倒是一个解决方案。

!使用角色控制器,再使用刚体会无视地面,这时再添加碰撞器又会悬浮。好尴尬。最好的解决方案是自己实现角色控制器的斜坡限制,这样就可以灵活使用了,目前还不会。

!说的不对的地方还希望留言纠正

!能实现不用角色控制器手写斜坡限制的朋友希望留下代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity 中,使用 CharacterController 组件实现斜坡滑落效果可以按照以下步骤进行: 1. 创建一个角色控制器:首先,在场景中创建一个角色控制器对象,比如一个游戏对象,并将其添加一个 CharacterController 组件。 2. 检测斜坡:在角色控制器的 Update 函数中,使用射线检测来判断角色是否接触到了斜坡。可以使用 CharacterController 的 isGrounded 属性来判断角色是否在地面上,然后再进行斜坡检测。以下是一个示例代码: ```csharp if (controller.isGrounded) { RaycastHit hit; if (Physics.Raycast(transform.position, -Vector3.up, out hit)) { float slopeAngle = Vector3.Angle(hit.normal, Vector3.up); if (slopeAngle > controller.slopeLimit) { // 角色接触到了斜坡 } } } ``` 3. 计算滑落速度:当角色接触到斜坡时,我们需要计算出一个滑落速度,以模拟角色在斜坡上滑动的效果。可以使用斜坡的法线向量来计算滑落速度,比如: ```csharp Vector3 slopeDirection = Vector3.Cross(hit.normal, Vector3.up); Vector3 slideVelocity = slopeDirection * slideSpeed; ``` 其中,slideSpeed 是你想要的滑落速度。 4. 应用滑落速度:将计算出的滑落速度应用到角色控制器的 Move 函数中,使其在斜坡上滑动。以下是一个示例代码: ```csharp controller.Move(slideVelocity * Time.deltaTime); ``` 这样,当角色接触到斜坡时,它就会开始滑落。 请注意,以上代码只是一个简单的示例,你可能还需要根据你的具体需求进行适当的调整和优化。另外,还可以考虑添加一些额外的功能,比如斜坡的摩擦力、倾斜角度限制等,以增强滑落效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值