Глюк с CharacterControlle

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

Глюк с CharacterControlle

Сообщение Berenold 26 июл 2011, 08:36

Боюсь Neodrop меня опять будет ругать но все таки задам вопрос.

На капсуле висит характер контроллер и скрипт
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class PlayerControler : MonoBehaviour
{
        public float speed = 11.0F;                    // Скорость передвижения персонажа
        public float jumpSpeed = 11.0F;                // Сила прыжка
        public float gravity = 30.0F;                  // Гравитация
        public CharacterController controller;         // Загрузка контроллера
       
        private Vector3 _moveDirection;                // Вектор смещаем персонажа
       
        void Awake()
        {
                controller = GetComponent<CharacterController>();
        }

        void Update()
        {
                PlayerMove();
        }
       
        void PlayerMove()
        {
                if (controller.isGrounded) // Проверяем находится ли мы на, земде если да тогда
                {
                        _moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, 0);
                        _moveDirection = transform.TransformDirection(_moveDirection);           
                        _moveDirection *= speed;                                              
                        if (Input.GetButton("Jump"))                                          
                        {
                                _moveDirection.y = jumpSpeed;                                    
                        }
                }
                _moveDirection.y -= gravity * Time.deltaTime;                            
                controller.Move(_moveDirection * Time.deltaTime);                        
        }
}
 

Когда персонаж поднимается по наклонной плоскости все нормально а вот когда спускается идет рывками - прыжками. Как можно это поправить?

Скрытый текст:
[Unity3dPlayer]
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://amateria.co.ua/TestTriger.unity3d&w=800&h=600&t=true&preview=1' height='"+(600+30)+"' width='800' frameborder='0' scrolling='no'></iframe>"); </script>
[/Unity3dPlayer]

Заранее благодарен.
Невозможное возможно!
Аватара пользователя
Berenold
UNITрон
 
Сообщения: 151
Зарегистрирован: 31 июл 2010, 01:44
Откуда: Киев
  • Сайт

Re: Глюк с CharacterControlle

Сообщение waruiyume 26 июл 2011, 10:19

Это не глюк, это фича B-)
Просто двигайте перса не вперёд, а параллельно поверхности.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Глюк с CharacterControlle

Сообщение Berenold 26 июл 2011, 10:57

waruiyume писал(а):Просто двигайте перса не вперёд, а параллельно поверхности.

Можете подсказать как? Я пока только так умею))
Невозможное возможно!
Аватара пользователя
Berenold
UNITрон
 
Сообщения: 151
Зарегистрирован: 31 июл 2010, 01:44
Откуда: Киев
  • Сайт

Re: Глюк с CharacterControlle

Сообщение seaman 26 июл 2011, 11:51

Пускаешь вниз луч. В RaycastHit есть нормаль к поверхности, с которой луч столкнется. Проверяешь ее вертикальную составляющую. Если она != 1 - значит мы не на горизонтальной поверхности. Тогда:
С помощью Vector3.OrthoNormalize получаешь тангент к поверхности из нормали. Умножаешь его на длину вектора твоей скорости. Получаешь новую скорость, которую и используешь.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 7