2016-05-06 7 views
1

関数定義に整数引数を追加し、その関数が呼び出される唯一のインスタンスに整数を追加しました。エラーが生成されます。コンパイラがUnity3dで正しいコードをコンパイルすることを拒否していますC#

CustomShaderEditor.cs(44,46):エラーCS1501:私はこの種類のエラーに対処する方法がわからない

方法UpdateTexture' takes 0' を引数なしの過負荷、私はいくつかのアドバイスが大好きです。

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

public class CustomShader : MonoBehaviour 
{ 

    public int numTiles = 10; 
    public GameObject RenderGameObject; 
    public GameObject[] gamObjectClones;  
    public Texture2D ComputeTexture;  
    public ComputeShader ComputeShader; 
    ComputeBuffer wavBuffer ; 
    ComputeBuffer computeBuffer ; 

    void Start() 
    { 
     ResetTexture(); 
     gamObjectClones = new GameObject[numTiles]; 
     for (int i=0; i<numTiles; i++) 
     { 
      gamObjectClones[i] = (GameObject)Instantiate(RenderGameObject, new Vector3(i * 10.0f, 0, 0), Quaternion.identity); 
     } 

    } 

    void Update() 
    { 
     RefreshComputeShaderMaterial(); 
    } 

    public void RefreshComputeShaderMaterial() 
    {  
     for (int i=0; i<numTiles; i++) 
     { 

      UpdateTexture( 10);   


      Material m = gamObjectClones[i].GetComponent<Renderer>().sharedMaterial; 

      if (m.HasProperty("_DataTexture")) 
      { 
       m.SetTexture("_DataTexture", ComputeTexture); 
      } 
     } 
    } 

    public void ResetTexture() 
    { 
     int BufferSize = ComputeTexture.width * ComputeTexture.height; 
     Color[] ColorBuffer = new Color[BufferSize]; 
     ComputeTexture.SetPixels(ColorBuffer); 
     ComputeTexture.Apply(); 
    } 

    public void SetupTexture() 
    { 
     int BufferSize = ComputeTexture.width * ComputeTexture.height; 
     Color[] ColorBuffer = ComputeTexture.GetPixels(); 

     for (int i=0; i<BufferSize; i++) 
     { 
      if ((i&31)==31) 
      { 
       ColorBuffer[i] = Color.white; 
      } 
     } 

     ComputeTexture.SetPixels(ColorBuffer); 
     ComputeTexture.Apply(); 
    } 

    public void UpdateTexture(int tile) 
    { 
     int csi; 
     csi = ComputeShader.FindKernel("computeGameOfLife"); 

     if (csi>-1) 
     { 
      var ran = UnityEngine.Random.Range(1f,100f); 

      int BufferSize = ComputeTexture.width * ComputeTexture.height; 
      Vector4[] TextureBuffer = new Vector4[BufferSize]; 
      Color [] ColorBuffer = ComputeTexture.GetPixels(); 

      for (int i=0; i<BufferSize; i++) 
      { 
       TextureBuffer[i].x = 0;//Mathf.Sin(i/10f); 
       TextureBuffer[i].y = 0; 
       TextureBuffer[i].z = 0; 
       TextureBuffer[i].w = 0; 
      } 

      computeBuffer = new ComputeBuffer(BufferSize, sizeof(float) * 4); 
      computeBuffer.SetData(TextureBuffer); 
      ComputeShader.SetBuffer(csi, "DataTexture", computeBuffer); 

      //////////////////// patch 
      int sBufferSize = 88000 ; 
      float[] sTextureBuffer = new float[sBufferSize] ; 

      for (int i = 0 ; i < sBufferSize ; i++) 
      { 
       sTextureBuffer[ i ] = Mathf.Sin(i/ran + 20*Mathf.Sin(i/1000) ) ; 
      } 

      ReleaseBuffers(); 
      print(" sin " + sTextureBuffer[23]); 
      wavBuffer = new ComputeBuffer(sBufferSize, sizeof(float) ) ; 
      wavBuffer.SetData(sTextureBuffer); 
      ComputeShader.SetBuffer(csi, "re", wavBuffer) ; 
      //wavBuffer.Release() ; 
      ///////////////////// 

      ComputeShader.Dispatch(csi, 1, 1, 1);   
      computeBuffer.GetData (TextureBuffer); 
      computeBuffer.Release(); 

      for (int i=0; i<BufferSize; i++) 
      { 
       ColorBuffer[i].r = TextureBuffer[i].x; 
       ColorBuffer[i].g = TextureBuffer[i].y; 
       ColorBuffer[i].b = TextureBuffer[i].z; 
       ColorBuffer[i].a = TextureBuffer[i].w; 
      } 

      ComputeTexture.SetPixels(ColorBuffer); 
      ComputeTexture.Apply(); 
     } 
    } 

    public void ReleaseBuffers() { 
     if (wavBuffer != null) wavBuffer.Release(); 
     wavBuffer = null; 
    } 




} 
+2

あなたがマークした行があなたが得るエラーを引き起こす可能性は非常に低いです。そのような質問のコードを提供する際の[MCVE]ガイダンスを必ずお読みください。きれいなビルド*はもっと妥当なエラーを生成するかもしれません。 –

+0

こんにちは、私はそれを完全に投稿しました。エラーは44行目に書かれています。関数引数を追加するための2つの行の変更だけがエラーを生成することを確認するために、さまざまなシナリオチェックを行いました。私が統一をリロードしたとき、「ウィンドウのレイアウトを再ロードするのに失敗しました。あなたはdefaut/tallを選択しますか?」という奇妙なエラーです。 –

答えて

1

UpdateTexture(I)。 // '= - ='この行のエラーです

これはコードには問題ありません。別の場所に問題があります。新しいコードを保存し、古いコードが新しいコードの代わりに使用されているコードであるかどうかを確認してください。またUnityを再起動してください。これらが失敗した場合は、あなたの今のものが問題ではないため、ここでコード全体をダンプしてください。

+0

こんにちは、ありがとう、良いアイデア。 Unityを再起動して、同じエラーが発生しています。それは関数呼び出しである行44として引用されます。私は関数定義と関数呼び出しに整数を追加するだけで、エラーを得るために2行を変更し、整数を使用するために関数にダミーの整数加算を追加しようとしました。 samerエラーとコードが変更と保存に応答しています。私は完全なコードを投稿しました。 –

+0

@comprehensible更新された完全なコードでは、コードに何も問題はありません。これはおそらくUnity-> Visualスタジオ同期の問題です。 Visual Studio、Unityをアンインストールすることをお勧めします。コンピュータを再起動し、Visual Studio、Unityを再度インストールします。これは問題を解決するはずです。 – Programmer

+0

CustomShaderEditor.csと呼ばれる隠しコードがありましたが、CustomShader.cs ...ではなく、私はこれまで44行目で関数を呼び出したプロジェクトでは見たことがなかったので、エラーメッセージをダブルクリックした場合にしか見つかりませんでした私はやっていない他のコードを開いた。それは私が存在していなかったプロジェクトのバックグラウンドのどこかにある古いGUIレイアウトコードでした。それは私が1 2日以来変化している生活のユニティ3dコンピーティングシェイダーテクスチャ更新プロジェクトのゲームです。ありがとう。私の不在心と悪い判断には申し訳ありません。 –

関連する問題