需求:使得杆能够接住,依靠重力下落的球。
可是实现起来却和想象的不太一样,当杆移动速度快了就传过去了。
效果如下:
看需求感觉还挺简单的。实现思路:几个球根据重力下落,一个“杆”跟随鼠标移动。步骤如下:
Rigidbody
组件,并勾选 useGravity
选项。Rigidbody
组件并添加 MouseMove
脚本:using UnityEngine;
public class MouseMove : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButton(0))
{
// 根据鼠标位置 设置为 物体位置
Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position);
Vector3 mousePos = Input.mousePosition;
mousePos.z = screenPos.z;
Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos);
// 控制物体移动
transform.position = worldPos;
}
}
}
记得Rigidbody
组件,可以通过Collision Detection
属性来用于防止快速移动的对象穿过,这下面的检测方式都尝试了,也没有解决上述问题。
Unity 官方API:
Collision Detection | 用于防止快速移动的对象穿过其他对象而不检测碰撞。 |
---|---|
Discrete | 对场景中的所有其他碰撞体使用离散碰撞检测。其他碰撞体在测试碰撞时会使用离散碰撞检测。用于正常碰撞(这是默认值)。 |
Continuous | 对动态碰撞体(具有刚体)使用离散碰撞检测,并对静态碰撞体(没有刚体)使用基于扫掠的连续碰撞检测。设置为__连续动态 (Continuous Dynamic)__ 的刚体将在测试与该刚体的碰撞时使用连续碰撞检测。其他刚体将使用离散碰撞检测。用于__连续动态 (Continuous Dynamic)__ 检测需要碰撞的对象。(此属性对物理性能有很大影响,如果没有快速对象的碰撞问题,请将其保留为 Discrete 设置) |
Continuous Dynamic | 对设置为__连续 (Continuous)__ 和__连续动态 (Continuous Dynamic)__ 碰撞的游戏对象使用基于扫掠的连续碰撞检测。还将对静态碰撞体(没有刚体)使用连续碰撞检测。对于所有其他碰撞体,使用离散碰撞检测。用于快速移动的对象。 |
Continuous Speculative | 对刚体和碰撞体使用推测性连续碰撞检测。这也是可以设置运动物体的唯一 CCD 模式。该方法通常比基于扫掠的连续碰撞检测的成本更低。 |
测试小结
Collsion Detection
选项调成Continues Dynamic
是可以满足条件的,但是超过一定速度还是能穿透过去。最后使用移动刚体的方式,来移动“杆”,测试结果如下:
修改后的代码:
using UnityEngine;
public class MouseMove : MonoBehaviour
{
private Rigidbody _rigidbody;
void Start()
{
_rigidbody = transform.GetComponent<Rigidbody>();
// 取消重力
_rigidbody.useGravity = false;
// 设置为不再受物理引擎的影响
_rigidbody.isKinematic = true;
}
void Update()
{
if (Input.GetMouseButton(0))
{
// 根据鼠标位置 设置为 物体位置
Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position);
Vector3 mousePos = Input.mousePosition;
mousePos.z = screenPos.z;
Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos);
// 控制物体移动
//transform.position = worldPos;
// 修改为刚体控制移动 --> 则不会被穿透了
_rigidbody.MovePosition(worldPos);
}
}
}
若还有不明白的地方,可以评论咨询,或者点击链接查看示例源码:源码链接
大家好,我是IT共享者,人称皮皮。 前几天给大家分享了一篇关于百度网盘的下载神...
Endpoint路由 在ASP.NET Core 2.2中,新增了一种路由,叫做 Endpoint (终结点)...
因项目的需要,PHP调用第三方 Java/.Net 写好的 Restful Api,其中有些接口,需...
json 在上篇文章已有详细介绍,json的既简单易懂,又传输迅速。并且能和javascri...
表格如下: HTML原始码 显示结果 描述 lt; 小於号或显示标记 gt; 大於号或显示标...
图1 开始不明白 "(CRLF)" 是什么意思! 查了一些资料,在一篇帖子里面发现了它的...
昨天刚学了html的一些内容,就迫不及待的想做个京东上面的搜索条,结果做是做出...
前言 我们前几篇讲了索引是什么,如何使用explain分析索引使用情况,如何去优化...
锚标记用法: 链接到同一文档中的特定位置叫做锚链接。 锚的使用方法是选择一个...
下面示例中,当姓名所在td的宽度是60px,如果第二行里的文字较少时,显示正常,...