Grappling Hook не захватывает игрока в Unity - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь запрограммировать захват в C # в Unity. Идея состоит в том, чтобы бросить игровой объект с мячом в игровой объект с тегом «Hookable» и доставить игрока туда, где мяч схватился. Мяч может быть брошен и успешно распознает столкновение, но не приносит игроку с ним. Код кажется правильным, и консоль не выдает никаких предупреждений, но я не понимаю, что происходит из-за неработоспособности. Вот код, извините, если это звучит нубистски:

Грейферный крюк (прикреплен к игровому объекту игрока):

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GrapplingHook : MonoBehaviour
{
    public GameObject hook;
    public GameObject hookHolder;

    public float hookTravelSpeed;
    public float playerTravelSpeed;

    public static  bool fired;
    public bool hooked;

    public float maxDistance;
    private float currentDistance;

    void Update()
    {
    //firing the hook
        if(/*Input.GetMouseButtonDown(0)*/Input.GetKeyDown(KeyCode.H) && fired == false)
            fired = true;

        if (fired == true && hooked == false)
        {
            hook.transform.Translate(Vector3.forward * Time.deltaTime * hookTravelSpeed);
            currentDistance = Vector3.Distance(transform.position, hook.transform.position);

            if(currentDistance >= maxDistance)
                ReturnHook();
        }

        if(hooked == true)
        {
            transform.position = Vector3.MoveTowards(transform.position,
            hook.transform.position, Time.deltaTime * playerTravelSpeed);
            float distanceToHook = Vector3.Distance(transform.position, hook.transform.position);

            if(distanceToHook < 1)
                ReturnHook();
        }
    }

    void ReturnHook()
    {
        hook.transform.position = hookHolder.transform.position;
        fired = false;
        hooked = false;
    }

}

Вот код, который проверяет, обнаружен ли захватный крюк (присоединен к объекту Hook и Hookable):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HookDetector : MonoBehaviour
{
    public GameObject player;

   void OnTriggerEnter(Collider other)
   {
        if(other.tag == "Hookable")
        {
        player.GetComponent<GrapplingHook>().hooked = true;
        Debug.Log("Tocou");
        }
   }
}

1 Ответ

0 голосов
/ 10 марта 2019

Проблема решена. Я поставил скрипт не к тому игровому объекту, решение было прикрепить к игроку GameObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...