• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

System strzelania się z wrogiem w Unity 5.6.0

42 Warsaw Coding Academy
0 głosów
460 wizyt
pytanie zadane 18 czerwca 2020 w C# przez ZIXOZIZ Nowicjusz (220 p.)

Cześć. 

Robię grę, w której można strzelać. Chcę zrobić system zabijania przeciwnika kilkoma strzałami z pistoletu. Daje mój skrypt. Wydaje się dobry, ale po strzeleniu w wroga, on od razu umiera. Natomiast mi chodzi o to aby umieral dopiero po otrzymaniu 5 strzałów. Będę wdzięczny za pomoc :).

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

public class OponentSystem : MonoBehaviour
{

    public float oponentWalkSpeed = 30.0f;
    public float oponentDistance = 5.0f;
    public float oponentLive = 100.0f;
    public float glockPower = 20.0f;

    void Start()
    {
        
    }

    void Update()
    {

    }

    void OnTriggerStay(Collider col)
    {
        if (col.tag.Equals("Player"))
        {
            Quaternion targetRotation = Quaternion.LookRotation(col.transform.position - transform.position);
            float onlyRotationX = transform.rotation.x;
            float onlyRotationZ = transform.rotation.z;

            Quaternion oponentRotation = Quaternion.Slerp(transform.rotation, targetRotation, 5.0f * Time.deltaTime);
            oponentRotation.x = onlyRotationX;
            oponentRotation.z = onlyRotationZ;
            transform.rotation = oponentRotation;

            float distance = Vector3.Distance(transform.position, col.transform.position);
            if (distance > oponentDistance)
            {
                transform.Translate(Vector3.forward * oponentWalkSpeed * Time.deltaTime);
            }

            if (col.tag("GlockBullet"))
            {
                oponentLive -= glockPower;
            }

            if (col.tag.Equals("GlockBullet") && oponentLive == 0)
            {
                Dead();
            }
        }
    }

    void Dead()
    {
        Destroy(gameObject, 3.0f);
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 18 czerwca 2020 przez KamQiX Dyskutant (9,090 p.)
Nie jestem pewny, ale czy funkcja OnTriggerStay nie wykonuje się w każdej klatce w której nabój jest na Triggerze przeciwnika? Tym samym zanim nabój przeleci odejmują się wszystkie życia. Może lepiej zadziała OnTriggerEnter
komentarz 18 czerwca 2020 przez ZIXOZIZ Nowicjusz (220 p.)

 

To niestety nie to :(

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

public class OponentSystem : MonoBehaviour
{

    public float oponentWalkSpeed = 30.0f;
    public float oponentDistance = 5.0f;
    public float oponentLive = 100.0f;
    public float glockPower = 10.0f;

    void Start()
    {
        
    }

    void Update()
    {

    }

    void OnTriggerStay(Collider col)
    {
        if (col.tag.Equals("Player"))
        {
            Quaternion targetRotation = Quaternion.LookRotation(col.transform.position - transform.position);
            float onlyRotationX = transform.rotation.x;
            float onlyRotationZ = transform.rotation.z;

            Quaternion oponentRotation = Quaternion.Slerp(transform.rotation, targetRotation, 5.0f * Time.deltaTime);
            oponentRotation.x = onlyRotationX;
            oponentRotation.z = onlyRotationZ;
            transform.rotation = oponentRotation;

            float distance = Vector3.Distance(transform.position, col.transform.position);
            if (distance > oponentDistance)
            {
                transform.Translate(Vector3.forward * oponentWalkSpeed * Time.deltaTime);
            }
        }
    }

    void OnTriggerEnter(Collider col)
    {
        if (col.tag.Equals("GlockBullet"))
        {
            oponentLive -= glockPower;
        }

        if(oponentLive == 0)
        {
            Dead();
        }
    }

    void Dead()
    {
        Destroy(gameObject);
    }
}


 

komentarz 18 czerwca 2020 przez KamQiX Dyskutant (9,090 p.)
Hm... To nie wiem. Te zmienne masz publiczne, czyli są widoczne w Inspectorze Unity. Może tam masz ustawione inne wartości dla oponentLive lub glockPower.

Podobne pytania

0 głosów
1 odpowiedź 363 wizyt
pytanie zadane 14 czerwca 2020 w C i C++ przez Szyszka Gaduła (3,510 p.)
0 głosów
2 odpowiedzi 184 wizyt
pytanie zadane 13 grudnia 2023 w Systemy operacyjne, programy przez M4jk3l07 Początkujący (310 p.)
0 głosów
0 odpowiedzi 164 wizyt
pytanie zadane 24 października 2018 w C# przez koyoo Początkujący (340 p.)

93,379 zapytań

142,380 odpowiedzi

322,534 komentarzy

62,737 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...