0

Я только начинаю разрабатывать мобильные игры. Использую Phonton Pun 2 free для мультиплеера. Мне нужно добавить прыжок по кнопке на экране. Посмотрел и сделал как в туторе, с поправочкой на Phonton, но увы код не работает. Подскажите, что я сделал не так. Пытался по разному перебирать воздействия, приводящие к прыжку, но в итоге при нажатии на кнопку ошибка :

NullReferenceException: Object reference not set to an instance of an object
move.jump() (at Assets/scripts/move.cs:23)
UnityEngine.Events.InvokableCall.Invoke () (at <d3b66f0ad4e34a55b6ef91ab84878193>:0)
UnityEngine.Events.UnityEvent.Invoke () (at <d3b66f0ad4e34a55b6ef91ab84878193>:0)
UnityEngine.UI.Button.Press () (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:68)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:110)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:262)
UnityEngine.EventSystems.EventSystem:Update() (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:385)

мой код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class move : MonoBehaviourPun { private float x,y; public float speed;

private Joystick joystick;
private PhotonView view;
private Rigidbody2D rb;

void Start() {

    rb = GetComponent&lt;Rigidbody2D&gt;();
    view=GetComponent&lt;PhotonView&gt;();
    joystick= GameObject.FindGameObjectWithTag(&quot;Joystick&quot;).GetComponent&lt;Joystick&gt;();
}

public void jump(){
    y = joystick.Vertical*speed;
    rb.velocity = new Vector2(0,y);
}

void Update() {
    x = joystick.Horizontal*speed;
    if(view.IsMine){
        jump();
        rb.velocity = new Vector2(x,0);
    }
}


}

Кнопку просто через ui вызвал и добавил phonton view, при нажатии вызываю JUMP, если что-то ещё понадобится, то могу скинуть.

4500zenja
  • 3,923
nenaj
  • 1
  • https://ru.stackoverflow.com/q/936026/373567 – aepot Jan 23 '22 at 16:18
  • немного не то. Я знаю как сделать движение, но после добавления модуля Phonton возникли проблемы с функциями внутри кода ( он их просто не видит или типо того) – nenaj Jan 23 '22 at 18:45
  • В функции jump на 23 строчке та ошибка: move.jump() (at Assets/scripts/move.cs:23). Выведите по-строчно значения joystick, joystick.Vertical и speed, думаю поможет понять какой неправильный. – gil9red Jan 28 '22 at 12:47

1 Answers1

0

Судя по всему, Вы забыли проинициализировать переменную speed, из-за этого её значение для всего кода пустое (т.е. равно null). Как следствие, при попытке вычислить выражение со speed программа пытается перемножить null с другой переменной и при этом выбрасывает NullPointerException.

Более подробная информация об этом исключении, а также способы её решения прилагаю в этом ответе.

4500zenja
  • 3,923
  • Но веду у меня тип float и он не может быть null, к тому же, если я конечно правильно понял ваш ответ, я в Jump() присвоил y значение joystick'а. ''' public void jump(){
        y = joystick.Vertical*speed;
        if (y){
                    rb.velocity = new Vector2(0,y);
        }
    
    }
    

    '''

    – nenaj Jan 23 '22 at 15:13