Ich möchte eine andere Skript-Methode (Sterne) aufrufen, wenn Objekt zerstört wird, Unten ist mein Code so weit ich getan habe, bekomme ich Fehler (Null-Referenz) bei Zeile "tim.stars" , Irgendwelche Vorschläge was ich falsch gemacht habe? Hier ist mein Code.Call-Methode von einem anderen Skript C# Unity3d
using UnityEngine;
using System.Collections;
public class clear : MonoBehaviour {
// Use this for initialization
void Start() {
GetComponent<ParticleSystem>().emissionRate = 0;
}
// Update is called once per frame
void Update() {
if (Input.GetMouseButtonDown (1)) {
GetComponent<ParticleSystem>().Emit (10);
}
}
void OnParticleCollision(GameObject obj)
{
if (obj.gameObject.tag == "fire1") {
Destroy (obj, 5.0f);
TimingForIndust2 tim = GetComponent<TimingForIndust2>();
tim.stars();
}
StartCoroutine (TestCoroutine());
}
IEnumerator TestCoroutine(){
yield return new WaitForSeconds(8);
Application.LoadLevel (25);
}
}
hier ist mein zweites Skript TimingForIndust2
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using MadLevelManager;
public class TimingForIndust2 : MonoBehaviour {
public Transform TimingBar;
public Transform TextIndicator;
public Transform TextRemaining;
[SerializeField] private float currentAmount;
[SerializeField] private float speed;
// method to reduce the time continously
void Update() {
if (currentAmount > 0) {
currentAmount -= speed*Time.deltaTime;
TextIndicator.GetComponent<Text>().text=((int)currentAmount).ToString()+"s";
TextRemaining.gameObject.SetActive(true);
} else {
TextRemaining.gameObject.SetActive(false);
TextIndicator.GetComponent<Text>().text="TimeUP";
Application.LoadLevel (62);
}
TimingBar.GetComponent<Image>().fillAmount = currentAmount/60;
}
public void stars()
{
if (currentAmount > 45.0f) {
MadLevelProfile.SetLevelBoolean (MadLevel.currentLevelName, "star_1", true);
MadLevelProfile.SetLevelBoolean (MadLevel.currentLevelName, "star_2", true);
MadLevelProfile.SetCompleted (MadLevel.currentLevelName, true);
} else if (currentAmount > 20.0f && currentAmount < 29.0f) {
MadLevelProfile.SetLevelBoolean (MadLevel.currentLevelName, "star_1", true);
MadLevelProfile.SetLevelBoolean (MadLevel.currentLevelName, "star_2", true);
MadLevelProfile.SetCompleted (MadLevel.currentLevelName, true);
} else if (currentAmount > 2.0f && currentAmount < 19.0f) {
MadLevelProfile.SetLevelBoolean (MadLevel.currentLevelName, "star_1", true);
}
}
}
Ist 'TimingForIndust2'-Skript an das gleiche Spielobjekt angehängt, an das das obige Skript (' clear') angehängt ist? Oder ist 'TimingForIndust2' an das Spielobjekt mit dem 'fire1'-Tag angehängt, an dem Sie die Kollision erkennen werden? – Programmer
clear Skript ist mit meinem (Feuerlöscher Prefeb die aus dem Inventar laden) angefügt, und TimingForIndust2 Skript ist an Timer angeschlossen (Timer ist eigentlich Leinwand, wo die Zeit läuft). clear script und TimingForIndust2 script sind an verschiedenen Objekten angehängt. @Programmer –