Я делаю трехмерную головоломку-платформер с двумя персонажами. Вы можете переключаться между символами, используя ввод. Я использую физику, чтобы контролировать своих персонажей. Я хочу, чтобы мой единственный персонаж мог толкать и тянуть блоки и по одной оси за раз (ось X или Z). Для головоломки, которую я разрабатываю, я также хочу, чтобы другой персонаж встал на блок, чтобы переместить его на более высокий выступ, но я не могу этого сделать, если объект не кинематический. (что означает, что наземная проверка не выполняется, когда персонаж стоит на жестком теле)
Это также ничего не стоит, что я сделал это так, что персонаж, который прыгает на блок, становится потомком объекта, поэтому он движется вместе с объектом.
Что мне делать?
Я пытался использовать приведенный ниже код из Unity API на жестких телах, прикрепленных к плееру, но все равно не повезло.
Также обеспечивает проверку заземления моего контроллера физики.
public float pushPower = 2.0f;
void OnCollisionEnter(Collision hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
// no rigidbody
if (body == null || body.isKinematic)
return;
// We dont want to push objects below us
if (hit.transform.position.y < -0.3f)
return;
// Calculate push direction from move direction,
// we only push objects to the sides never up and down
Vector3 pushDir = new Vector3(hit.transform.position.x, 0, hit.transform.position.z);
// If you know how fast your character is trying to move,
// then you can also multiply the push velocity by that.
// Apply the push
body.velocity = pushDir * pushPower;
}
public virtual void Jump()
{
// conditions to do this action
bool jumpConditions = isGrounded && !isJumping;
// return if jumpCondigions is false
if (!jumpConditions) return;
// trigger jump behaviour
jumpCounter = jumpTimer;
isJumping = true;
// trigger jump animations
if (_rigidbody.velocity.magnitude < 1)
animator.CrossFadeInFixedTime("Jump", 0.1f);
else
animator.CrossFadeInFixedTime("JumpMove", 0.2f);
}
Прямо сейчас, используя код, объект ускользает, как только персонаж сталкивается с ним.