0 / 0 / 0
Регистрация: 26.10.2018
Сообщений: 19
1

Проблема с прыжком

27.10.2018, 08:33. Показов 1280. Ответов 11
Метки 3d (Все метки)

После того как я исправил движение, стал косо работать прыжок - я стал улетать черт знает куда, хотя jumpforce стоит 5.
Вот скрипт:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
#region require components
[RequireComponent(typeof(Rigidbody))]
#endregion
public class OnGroundController : MonoBehaviour {
 
    #region move variables
    bool walk;
    public float wSpeed = 200.0f;
    
    bool run;
    public float rSpeed = 300.0f;
    
    bool crouch;
    public float cSpeed = 100f;
    #endregion
 
    #region jump variables
    bool jump;
    public bool grounded = true;
    
    public float jumpForce = 5.0f;
    public float hitDistance = 0.1f;
    
    public LayerMask layer = 0>>8;
    #endregion
    
    #region components
    Rigidbody rb;
    OnGroundController grController;
    OnLadderController lController;
    #endregion
    
    void Start () {
        
        rb = GetComponent<Rigidbody>();
        grController = GetComponent<OnGroundController>();
        lController = GetComponent<OnLadderController>();
        
    }
    
    void Update () {
        
        walk = !Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.LeftControl);
        run = !crouch && Input.GetKey(KeyCode.LeftShift);
        crouch = !run && Input.GetKey(KeyCode.LeftControl);
        
        jump = grounded && Input.GetKeyDown(KeyCode.Space);
        grounded = Physics.Raycast(transform.position - new Vector3(0, 0.95f, 0) , -transform.up, hitDistance, layer);
        
        if (walk) {
            
            Vector3 move = new Vector3(Input.GetAxis("Horizontal"), rb.velocity.y, Input.GetAxis("Vertical")) * wSpeed * Time.deltaTime;
            rb.velocity = move;
            
        }
        if (run) {
            
            Vector3 move = new Vector3(Input.GetAxis("Horizontal"), rb.velocity.y, Input.GetAxis("Vertical")) * rSpeed * Time.deltaTime;
            rb.velocity = move;
            
        }
        if (crouch) {
            
            Vector3 move = new Vector3(Input.GetAxis("Horizontal"), rb.velocity.y, Input.GetAxis("Vertical")) * cSpeed * Time.deltaTime;
            rb.velocity = move;
            
        }
        if (jump) {
            
            rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
            
        }
        
    }
    
    void OnTriggerStay(Collider coll) {
    
        lController.ld = coll.gameObject.GetComponent<Ladder>();
    
        if (coll.gameObject.tag == "Ladder") {
            
            transform.position = coll.gameObject.GetComponent<Ladder>().offsetPos;
            
            lController.enabled = true;
            
            rb.useGravity = false;
            
            grController.enabled = false;
            
        }
    
    }
    
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2018, 08:33
Ответы с готовыми решениями:

Проблема с прыжком
Здравствуйте, я начинающий программист на c#. Есть код: using System.Collections; using...

Проблема с прыжком
Доброго времени суток Товарищи! Некоторое время назад я решился попробовать себя в Unity У меня...

проблема при работе с китайским J-LINK 8 или же проблема с с
Всем привет. Решил Сам собрать себе дисковери кит на базе at91sam7s64-ek. Подарили мне китайский...

Выдает ошибку, а я не могу понять в чем проблема. В чем проблема, скажите пожалуйста!
dx=0.0005; epsillon=0.00002; i=0; for x= 0:0.0005:3 i=i+1; if x&lt;1 y (i)=-1; ...

11
2211 / 1413 / 821
Регистрация: 26.10.2018
Сообщений: 4,060
27.10.2018, 08:55 2
Проверь, не срабатывает ли этот код несколько раз подряд во время прыжка:
C#
1
2
3
4
5
if (jump) {
            
            rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
            
        }
И да, я бы вот ото вот:
C#
1
grounded = Physics.Raycast(transform.position - new Vector3(0, 0.95f, 0) , -transform.up, hitDistance, layer);
Лучше бы заменил на вход/выход из коллизии с землей.
0
0 / 0 / 0
Регистрация: 26.10.2018
Сообщений: 19
27.10.2018, 09:48  [ТС] 3
Так может получиться, что когда я нахожусь в углу, я полечу. И код не может срабатывать несколько раз потому что у меня там стоит GetKeyDown.
0
2211 / 1413 / 821
Регистрация: 26.10.2018
Сообщений: 4,060
27.10.2018, 10:30 4
Ну тогда просто уменьши силу)

Добавлено через 11 минут
Можешь еще попробовать форсмод поменять на Force.
0
0 / 0 / 0
Регистрация: 26.10.2018
Сообщений: 19
27.10.2018, 19:13  [ТС] 5
Теперь вообще не прыгает)))

Добавлено через 1 час 12 минут
Так что делать-то?
0
2211 / 1413 / 821
Регистрация: 26.10.2018
Сообщений: 4,060
27.10.2018, 19:31 6
Подбери нужные значения, просто ведь, если много убавляй, если мало добавляй.
0
0 / 0 / 0
Регистрация: 26.10.2018
Сообщений: 19
27.10.2018, 20:08  [ТС] 7
Оно на 10 не прыгает, а на 25 уже улетает к чертовой бабушке
0
2211 / 1413 / 821
Регистрация: 26.10.2018
Сообщений: 4,060
27.10.2018, 20:41 8
Ошибка в другом, не знаю в чем конкретно, но явно не в добавлении силы.
Вот этот код никак не может влиять? Здесь ты гравити отключаешь. Если это не влияет, то я без понятия, можешь залить сюда демо проект с этой проблемой.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void OnTriggerStay(Collider coll) {
    
        lController.ld = coll.gameObject.GetComponent<Ladder>();
    
        if (coll.gameObject.tag == "Ladder") {
            
            transform.position = coll.gameObject.GetComponent<Ladder>().offsetPos;
            
            lController.enabled = true;
            
            rb.useGravity = false;
            
            grController.enabled = false;
            
        }
    
    }
0
0 / 0 / 0
Регистрация: 26.10.2018
Сообщений: 19
27.10.2018, 21:38  [ТС] 9
Нет, это касается передвижения по лестнице.
Проект скинул.
0
Вложения
Тип файла: rar Сity of Сontention.rar (5.84 Мб, 2 просмотров)
2211 / 1413 / 821
Регистрация: 26.10.2018
Сообщений: 4,060
27.10.2018, 23:02 10
Лучший ответ Сообщение было отмечено Borundel как решение

Решение

Костыль, но всё же. Кстати на Time.deltaTime умножать не обязательно, velocity не зависит от частоты кадров.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void Update()
    {
        run = Input.GetKey(KeyCode.LeftShift);
        crouch = Input.GetKey(KeyCode.LeftControl);
        walk = !run && !crouch;
 
        grounded = Physics.Raycast(transform.position - new Vector3(0, 0.95f, 0), -transform.up, hitDistance, layer);
        jump = grounded && Input.GetKeyDown(KeyCode.Space);
 
        float h_input = Input.GetAxis("Horizontal");
        float v_input = Input.GetAxis("Vertical");
 
        Vector3 move = Vector3.zero;
 
        if (walk)
            move = new Vector3(h_input, 0.0f, v_input) * wSpeed * Time.deltaTime + rb.velocity.y * Vector3.up;
 
        if (run)
            move = new Vector3(h_input, 0.0f, v_input) * rSpeed * Time.deltaTime + rb.velocity.y * Vector3.up;
 
        if (crouch)
            move = new Vector3(h_input, 0.0f, v_input) * cSpeed * Time.deltaTime + rb.velocity.y * Vector3.up;
 
        if (jump)
            move += Vector3.up * jumpForce;
 
        rb.velocity = move;
    }
1
0 / 0 / 0
Регистрация: 26.10.2018
Сообщений: 19
28.10.2018, 07:32  [ТС] 11
Огромное спасибо! Но я не понимаю, зачем прибавлять велосити по игрику и умножать на вектор3 ап?
0
2211 / 1413 / 821
Регистрация: 26.10.2018
Сообщений: 4,060
28.10.2018, 08:47 12
Сказал же, костыль. Лучше пересмотреть логику управления физикой.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2018, 08:47

Холодильник LG .мод GR-M392YQ.Проблема с дверю, Проблема с дверю при закрывании
Доброго времени суток уважаемые! Холодильник LG GR-M392YQ с первых дней клиент жалуется на то что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.