2016-07-16 6 views
2

ロジックとゲームで起こっている動作に関する問題が発生しています。ユニティ、パワーアップの衝突の問題

私はパワーアップを実装したいと思います。このパワーアップは、そのキャラクターを特定の時間だけ停止させます。だから私は彼のスクリプトを無効にして、何もしません。今これは動作していますが、問題は5秒後にスクリプトを元に戻す方法が見つからないということです。キャラクターを2秒間止めたい。

答えて

3

あなたのコードが間違っています。 Invokeを使用してください。

非常に簡単です。

のような...

void ApplyPenalty() 
{ 
yourPauseSystem = true; 
Debug.Log("starting penalty.."); 
Invoke("EndPenalty", 5f); 
} 

void EndPenalty() 
{ 
yourPauseSystem = false; 
Debug.Log(" ...ended penalty"); 
} 

Debug.Log文を忘れてはいけない何かを。理想的ApplyPenalty(及びEndPenaltyが)は、それらゲームオブジェクトON実際

なければならない

注意。

は実際にそのコードをそのゲームオブジェクトに置きます。ここでは「衝突オブジェクトコード」ではありません。あなたはそれを得る?ペナルティを適用するには、あなたの場合はそう

、それは何かのような..あなたが見る

void OnCollisionEnter(Collision c) 
{ 
if ((c.gameObject.tag == "Character")) 
    c.GetComponent<YourHerosCode?().ApplyPenalty() 
} 

でしょうか?

物理層システムを使用する必要があります。文字通りUnityで衝突を起こさせるためにそれを使用する必要があります。あなたは何と衝突することができるものを示すために、...

enter image description here

を「物理グリッド」を使用しなければなりません。あなたのコメントでは、彼らは "衝突しない"と言いますが、あなたは絶対に何かに衝突する(または衝突しない)ことができます。

実際には、EVERYTHINGにはUnityで独自の物理層が必要であることに注意してください。

確かにあなたのヒーロー、敵などはすべて独自のレイヤーを持ちます。

ヒント:確かに「敵の投射物」と「プレイヤーの投射物」にはそれぞれ独自のレイヤーが必要です。

+0

まあ...でも、あなたは私の言うことを正確にする必要があります。私の友人は、あなたの "ペナルティ"コードの重要なことは、あなたの "ペナルティ"コードでなければなりません。あなたはそのコードをあなたのヒーローに移動する必要がありますか? – Fattie

+0

フェア十分です。楽しみに前進! – Fattie

+0

あなたは絶対に層、私の友人を使用する必要があります!それは絶対必要です。物理層。 – Fattie

1

NullReferenceがこの行にある場合は、無効コンポーネントを参照しようとしている可能性があります。gameObject.GetComponent<PlayerControls>().enabled = true;です。その後、

(スタートでVARを割り当てるようにしてください)コンポーネント

var playerController = gameObject.GetComponent<PlayerControls>(); 

にして、それを無効に/それを参照し、有効にするためにこれを使用する:

playerController.enable = true; //or false