Скатывание и невозможность забраться на гору

Программирование на Юнити.

Скатывание и невозможность забраться на гору

Сообщение Melkor-616 21 окт 2010, 06:19

Вопрсос таков:
Нужно что бы персонаж не мог забраться на крутой склон и скатывался с него. Присваивание Rigidbody и префабу и цилиндру и по отдельности не помогает. Где то слышал что это скриптом задаётся.
Так вот, как это сделать?
По форуму копался, не нашёл
Tunnel Runner - наше всё
Аватара пользователя
Melkor-616
UNец
 
Сообщения: 5
Зарегистрирован: 20 окт 2010, 07:42

Re: Скатывание и невозможность забраться на гору

Сообщение Neodrop 21 окт 2010, 10:57

Открываем уроки и перестаём засыпать форум вопросами, которые рассматриваются в первом же туториале.
3D Platform Tutorial вам в руки. :-w
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Скатывание и невозможность забраться на гору

Сообщение Melkor-616 22 окт 2010, 02:38

По моему я не полностью задал вопрос. Перс не должен забираться на гору не просто пешком но и прыжками. Более раскрыто: Когда перс подходит к горе он шагом, забраться не может, а вот упираясь в стену и прыгая, он без особых проблем как альпинист забирается на склон(slope limit не решает этой проблеммы). И 3D Platform Tutorial я не нашёл этого решения, более того, там это вообще не реализуется, Lerpz прекрасно висит над полом зацепившись за невидимый выступ в стене
У вас нет доступа для просмотра вложений в этом сообщении.
Tunnel Runner - наше всё
Аватара пользователя
Melkor-616
UNец
 
Сообщения: 5
Зарегистрирован: 20 окт 2010, 07:42

Re: Скатывание и невозможность забраться на гору

Сообщение mp3 22 окт 2010, 10:01

И версия юнити, у Вас 2,6,1 !?
Be straight, or go forward.
Аватара пользователя
mp3
Адепт
 
Сообщения: 1071
Зарегистрирован: 21 окт 2009, 23:50

Re: Скатывание и невозможность забраться на гору

Сообщение Pyx 22 окт 2010, 12:48

Melkor-616 писал(а): Перс не должен забираться на гору не просто пешком но и прыжками.

Как вариант костыля,повесить на перса Character Controller диаметром метра 2 и на высоте сантиметров 50 и при CharacterController.isGrounded отключать jump .И вариации на подобную же тему.
P.S. Как взаимодействовать с террайном через Slope Limit ,чтобы получить булевую переменную или реальное численное значение угла,я не нашел.Хз,может плохо искал.
P.S.S. К вышесказанному,навесить на перса пустышку,на нее так же Character Controller вплотную к террайну и при срабатывании CharacterController.isGrounded,который висит на самом персе и при прыжке отключать управление(ходьбу в любую сторону) персонажем.Только правильнее наверно Character Controller-ы местами поменять на персе и дочерной пустышке.
Pyx
 

Re: Скатывание и невозможность забраться на гору

Сообщение Melkor-616 25 окт 2010, 00:56

Вопрос решён.
1. Ставим Main Camera
2. Ставим примитив цилиндр
3. К цилиндру добаляем Rigidbody
4. Присоединяем Main Camera к цилиндру как дочерний объект
5. В цилиндре ставим галочку Freeze Rotation
6. К цилиндру добавляем этот скрипт

Код: Выделить всё
using UnityEngine;
public class CharacterMove : MonoBehaviour
{

   private Vector3 moveDirection = Vector3.zero;
public float V = 2;
public float jumpV=6;

   void Start () {

   }
   bool Jumped = false;
   float lastY=float.MaxValue;
   Vector3 LastMove;
    void FixedUpdate()
   {
    RaycastHit hit;
    if ((transform.position.y > lastY+10)&&!Jumped)
    {
     transform.position -= LastMove;
    }
   
     if (Input.GetButton ("Jump"))
  {
   
   moveDirection= new Vector3(0, jumpV*Time.deltaTime,0);
    if (Physics.Raycast(transform.position,  moveDirection, out hit,1f))
   {
    print(hit.collider.name);
   }
   else
   {
    transform.position+=moveDirection;
   }
  }
    float v=0;
    v=Input.GetAxis("Vertical")*0.1f*V;
 
   
     moveDirection = new Vector3(0,0,v);
  moveDirection = transform.TransformDirection(moveDirection);
  if (Physics.Raycast(transform.position,  moveDirection, out hit,1f))
  {
   print(hit.collider.name);
  }
  else
  {
   transform.position+=moveDirection;
    if (Input.GetButton("Run"))
    {
     if (Physics.Raycast(transform.position,  moveDirection, out hit,1f))
    {
     print(hit.collider.name);
    }
    else
    {
     if (Terrain.activeTerrain.SampleHeight(transform.position)>=Terrain.activeTerrain.SampleHeight(transform.position+moveDirection))
      transform.position+=moveDirection;
    }
    }
   
  }

  v=0;
  v=Input.GetAxis("Horizontal");
  transform.Rotate(Vector3.up*v*80 * Time.deltaTime);
   }
}


7. К Main Camera присоединяем скрипт Mouse Look(ставим Axes Mouse y)
8. К префабу присоединяем скрипт Mouse Look (ставим Axes Mouse x)
9. Запускаем и тестим :)
Tunnel Runner - наше всё
Аватара пользователя
Melkor-616
UNец
 
Сообщения: 5
Зарегистрирован: 20 окт 2010, 07:42


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10