BadCats
@BadCats

Не перемещается персонаж?

Есть код:
if (Input.GetKey(KeyCode.D))
        {
            tempPos.z = tempPos.z * speed * Time.deltaTime;//изменяем позицию игрока
            Newpos = tempPos.z;
            hero.transform.position = new Vector3(tempPos.x,tempPos.y,Newpos);
               
        }

где:
public CharacterController hero;
    public float speed=2;
    Vector3 tempPos;

 // Use this for initialization
    void Start () {
        hero = gameObject.GetComponent<CharacterController>();
        

    }

    // Update is called once per frame
    void Update()
    {
        tempPos = hero.transform.position;//получаем позицию игрока
        float Newpos;//Поле, в которое попадут координаты преобразованные  в число типа float
        float CorrentPos=transform.position.x;
.......
}

Вот в чем вопрос почему , когда я нажимаю клавишу D, у меня персонаж дергается долю секунжы - т.к в это время поле
Z компоненты transform? которое изначально имеет значение -1.02 т.е это позиция персонажа на сцене ведет себя следующим образом
  • -1.02
  • -4.603179e-18
  • -1.652926e-25
  • -7.104583e-43
  • 0
- довольно странная последовательностью никакой закономерности я выявить не могу. И сомое интерестное, что когда доходит до нуля - остаавливается т.е не становится отрицательным.
Причем аналогичный метод для клавиши W работает нормально
if (Input.GetKey(KeyCode.W))
        {
            tempPos.x = tempPos.x * speed * Time.deltaTime;//изменяем позицию игрока
            Newpos = tempPos.x;
            hero.transform.position =
                Vector3.MoveTowards(transform.position, //Переместить из текущего положения
                new Vector3(Newpos, hero.transform.position.y, hero.transform.position.z)/*нам нужно изменить только x координату*/ , speed);   //перемещаем игрока в новую позицию

        }
Может у перемещения в сторону полностью друной принцип и я зря скопировал код клаваиши W в надежде его "немножко подправить" ?
Может кто что знает? Заранее спасибо?
  • Вопрос задан
  • 289 просмотров
Решения вопроса 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
Давайте я вам укажу на основную проблему в логике

tempPos.z = tempPos.z * speed * Time.deltaTime;//изменяем позицию игрока

вот в этой строчке.
просто поподставляйте значения. ДельтаТайм по сути меньше 1, а скорость константа. Положение персонажа тоже по сути константа.

Тоесть по сути если по началу положение tempPos.z отличное от нуля, то вы его просто уменьшаете, стремите к нулю, беря дробную часть.

Как вариант вам нужно что-то вроде прибавления к текущей позиции смещения
tempPos.z = tempPos.z + speed * Time.deltaTime * transform.forward;//к текущей позиции добавили в направлении вперед немного))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Dimusikus
@Dimusikus
Любитель
я скопировал код клаваиши W

Ключевое слово 'скопировал', на копию оно вообще никак непоходит, как минимум в коде пропущен оператор MoveTowards со всеми вытекающими обстоятельствами.
Сделайте реальный копипаст кода клавиши W(если он действительно рабочий...) и замените оси, и проверьте.
Ответ написан
Комментировать
BadCats
@BadCats Автор вопроса
и так тоже не работает:
if(Input.GetKey(KeyCode.D))
        {
            tempPos.z = tempPos.z * speed * Time.deltaTime;//изменяем позицию игрока
            Newpos = tempPos.z;
            hero.transform.position =
                Vector3.MoveTowards(transform.position, //Переместить из текущего положения
                new Vector3(hero.transform.position.x,hero.transform.position.y,Newpos)/*нам нужно изменить только x координату*/ , speed);   //перемещаем игрока в новую позицию

        }

А вперед персонаж двигается -т.е код клавиши W рабочий
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы