我尝试在Unity中实现一个简单的叉车。向左、向右、向上和向下移动都很好:Box stays in place
同时向左/右和上/下移动(箱子对角移动),箱子从货叉上滑落:Box is sliding off
有人有什么想法吗?
我已经试过了
- 当拾取箱子时,使其成为叉车的子件
- 为货叉和货箱添加具有高摩擦力的Physics Material 2D
- 将箱子的x速度设置为叉车的x速度
- 降低叉车的移动和提升速度
- 减少项目设置中的固定时间临时值
- 增加盒子的质量和重力比例
叉车和货箱都有一个附加了Body Type Dynamic和Collision Detection Continuous的刚体2D。
目前我正在移动叉车,代码如下:
private void FixedUpdate()
{
//Moving Left/Right
if (moveRight)
{
timeElapsedDeceleration = 0;
rb.velocity = new Vector2(Mathf.Lerp(rb.velocity.x, drivingSpeed, timeElapsedAcceleration / 2), rb.velocity.y);
timeElapsedAcceleration += Time.fixedDeltaTime;
}
else if (moveLeft)
{
timeElapsedDeceleration = 0;
rb.velocity = new Vector2(Mathf.Lerp(rb.velocity.x, -drivingSpeed, timeElapsedAcceleration / 2), rb.velocity.y);
timeElapsedAcceleration += Time.fixedDeltaTime;
}
else
{
timeElapsedAcceleration = 0;
rb.velocity = new Vector2(Mathf.Lerp(rb.velocity.x, 0, timeElapsedDeceleration / 2), rb.velocity.y);
timeElapsedDeceleration += Time.fixedDeltaTime;
}
//Lifting
if (moveForksUp && forks.transform.localPosition.y <= maxLiftHeight)
{
forks.transform.localPosition = new Vector2(forks.transform.localPosition.x, forks.transform.localPosition.y + liftingSpeed * Time.fixedDeltaTime);
liftableMast.transform.localPosition = new Vector2(liftableMast.transform.localPosition.x, liftableMast.transform.localPosition.y + liftingSpeed / 1.5f * Time.fixedDeltaTime);
}
else if (moveForksDown && forks.transform.localPosition.y >= minLiftHeight)
{
forks.transform.localPosition = new Vector2(forks.transform.localPosition.x, forks.transform.localPosition.y - liftingSpeed * Time.fixedDeltaTime);
liftableMast.transform.localPosition = new Vector2(liftableMast.transform.localPosition.x, liftableMast.transform.localPosition.y - liftingSpeed / 1.5f * Time.fixedDeltaTime);
}
}
在向左和向上同时移动时, Package 盒不应滑落。
3条答案
按热度按时间x3naxklr1#
我找到了一个解决方案,它是如何工作的。我现在正在用物理学上下移动叉子。
1.将Rigidbody 2D添加到Forks,将Type设置为“Dynamic”,使用非常高的质量(如100000),并将重力比例设置为0,这样它就不会受到质量为2的盒子的影响
1.如果你拿起盒子,把它放在叉子上。
1.如果箱子从叉子上福尔斯下来,请再次取出
左移/右移是相同的。对于上移/下移,请使用以下代码:
9bfwbjaz2#
在移动时,尝试将箱子设置为叉车前部的父对象,并禁用刚体,如下所示
unftdfkk3#
只需添加一个固定的关节2D组件到框,并连接到播放器,只要你想。
如果不起作用,则增加两个固定接头