#c# #unity3d
#c# #unity3d
Вопрос:
Мне нужно взобраться на куб по стенам, я написал код для броска куба, но мне также нужно перелезть через стену, когда попадаю в нее.
Я попробовал Box-Collider и rigid body и изменил положение cube player и установил положение стены.
// roll a cube player
IEnumerator moveLeft()
{
for (int i = 0; i < (90 / step); i )
{
Player.transform.RotateAround(Left.transform.position,
Vector3.forward, step);
yield return new WaitForSeconds(speed);
}
Center.transform.position = Player.transform.position;
input = true;
}
// try to Climb a wall
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("hill"))
{
//collider = collision.gameObject;
//isGrounded = false;
Player.GetComponent<Rigidbody>().drag = 20;
Player.GetComponent<Rigidbody>().useGravity = false;
}
if (collision.gameObject.CompareTag("floor"))
{
Player.GetComponent<Rigidbody>().drag = 1;
Player.GetComponent<Rigidbody>().useGravity = true;
isGrounded = true;
}
}
Он поднимается, но не привязывается к стене. Мне нужно лазить по стенам в режиме привязки, и если стены нет, игрок должен быть сброшен.
Мне нужно, чтобы в видео была показана следующая функция
https://www.youtube.com/watch?v=fo-7kKeb-TM
Изображение моего движения игрока
Я также попробовал следующий код, но безуспешно.
void moveLeft()
{
rotationModifier = 90f;
appliedVector = Vector3.left;
appliedRotation = Quaternion.AngleAxis(90f, Vector3.forward);
previousPosition = rb.position;
previousRotation = rb.rotation;
targetPosition = previousPosition appliedVector;
targetRotation = previousRotation * appliedRotation;
Player.transform.position = targetPosition;
Player.transform.rotation = targetRotation;
}
Комментарии:
1. Если что-то вроде этого видео — это то, что вы хотите в качестве своей конечной цели, тогда вы можете пересмотреть свой подход. Вместо того, чтобы думать в терминах положения другого куба, думайте в терминах углов ящиков. Вы хотите выровнять углы. Когда вы вращаетесь по часовой стрелке, вы вращаетесь вокруг своего нижнего правого угла, пока ваш верхний правый угол не коснется другого угла коробки. При движении против часовой стрелки он проходит вокруг вашего нижнего левого угла, пока ваш верхний левый угол не коснется другого угла коробки. Оттуда просто выясните, как правильно определять и ориентировать углы.
2. Что касается определения углов, вы можете использовать радиопередачи с каждой стороны куба, чтобы проверить наличие «открытого пространства» и «занятого пространства». Если у вас есть 3 открытых пространства, то 2 угла, которые вы хотите отслеживать для контакта вращения, находятся между этими тремя открытыми поверхностями. Если 2 открытых пространства, то 1 угол контакта находится между двумя открытыми поверхностями. И если 1 открытое пространство, то углы для поворота — это углы этой одной открытой поверхности.
3. Я создал пустые объекты в виде центра, влево, вправо, вверх и вниз, чтобы повернуть мой куб, который работает отлично.. но теперь мне нужно привязаться и взобраться на стену