Jump to content
Unity Insider Forum

DocFx

Members
  • Content count

    1
  • Joined

  • Last visited

Community Reputation

0 Neutral

About DocFx

  • Rank
    Newbie
  1. Ich habe folgendes Problem; Ich verscuhe ein (oder mehrere) Script(s) zu schreiben, die es ermöglichen eine Granate zu werfen, genau in Blickrichtung... Diese soll nun aber nicht immer nach festgelter Zeit explodieren, sondern man soll schon den Ring abziehen können(sie also starten) und noch in der Hand halten können, bevr man sie wirft... dazu messe ich die Zeit, wie lange sie, nach dem ziehen, in der Hand gehalten wird udn versuche dann diesen Wert im Script der Granate von dem "Countdown" abzuziehen. Grundsätzlich klappt alles nur kriege ich den Wert nicht von einem ins andere Script übertragen. er soll ja auch immer auf die richtige Granate übertragen werden.... Hier das Script der Granate: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Grenade : MonoBehaviour { public float delay = 3f; public GameObject ExplosionEffect; public GameObject Granatenobjekt; float countdowntoBoom; public float timepassedingrenadescript; public throwGranade throwscript; public float radius; public float force; public float exforce; public ForceMode forceMode; bool HasExploded; bool ZeitAbgezogen = false; // Use this for initialization public void Start () { countdowntoBoom = delay; GetComponent<Rigidbody>().AddForce(transform.forward * force, forceMode); HasExploded = false; } // Update is called once per frame void Update () { countdowntoBoom -= Time.deltaTime; if (ZeitAbgezogen == false) { //hier liegt das Problem Granatenobjekt = GameObject.Find("MainCamera"); Granatenobjekt.GetComponent<throwGranade>(); Debug.Log(throwscript.TimePassed); // hier wird die Zeit abgezogen countdowntoBoom -= timepassedingrenadescript; ZeitAbgezogen = true; } if (countdowntoBoom <= 0) { if (HasExploded == false) { HasExploded = true; Explode(); } } } public void Explode() { Instantiate(ExplosionEffect, transform.position, transform.rotation); Collider[] colliders = Physics.OverlapSphere(transform.position, radius); foreach (Collider nearbyObjects in colliders) { Rigidbody rb= nearbyObjects.GetComponent<Rigidbody>(); if (rb != null) { rb.AddExplosionForce(exforce, transform.position, radius); } } Destroy(gameObject); } } und Hier das Script womit ich werfe: using System.Collections; using System.Collections.Generic; using UnityEngine; public class throwGranade : MonoBehaviour { public float force = 100f; public GameObject GrenadePrefab; public float TimePassed; bool hasstarted; public Grenade grenadescript; // Use this for initialization void Start () { TimePassed = 0f; hasstarted = false; } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { hasstarted = true; TimePassed = TimePassed + Time.deltaTime; } if (Input.GetMouseButtonUp(0)) { if (hasstarted == true) { ThrowNade(); } } } void ThrowNade() { GameObject grenade = Instantiate(GrenadePrefab, transform.position, transform.rotation); Rigidbody rb = grenade.GetComponent<Rigidbody>(); rb.AddForce(transform.forward * force, ForceMode.VelocityChange); } } Vielen Dank für eure Hilfe schonmal im Voraus. Bin leider noch blutiger Anfänger mit Unity
×