2016-10-20 3 views
-2
public class Scroll : MonoBehaviour { 

    public float speed = 0.5f; 

    void Update() 
    { 
     Vector2 offset = new Vector2(0, Time.time * speed); 

     renderer.material.mainTextureOffset = offset; 

    } 

私は問題がどこにあるのか分かりませんでしたが、それはレンダリングの材料部分にあるはずです。私はレンダラーにバグがあります

私はこのコードをQuadに入れて、自分の背景にしようとしました。

編集:エラーメッセージ: - Assets/Scroll.cs(12,8):エラーCS0619:UnityEngine.Component.renderer' is obsolete:プロパティレンダラーは廃止予定です。代わりにGetComponent()を使用してください。 (UnityUpgradable) ' - Assets/Scroll.cs(12,17):エラーCS1061:タイプUnityEngine.Component' does not contain a definition for素材'拡張メソッドなしmaterial' of type UnityEngine.Component 'が見つかりました(使用するディレクティブまたはアセンブリ参照がありません) - ファイルを解析することができませんasset/game scene.unity.meta:[制御文字は許可されていません]

+0

Exception \ Errorメッセージ –

+0

を追加します。「Time.time」は2つのフレーム間のデルタですか?ちょうど時間の。 'y'値は時間とともに増加するからです。現在の更新と以前の更新の間の差分を計算することができます。 –

+0

おそらく、 'Time.deltaTime'は2つのフレームの間の経過時間です。 – muXXmit2X

答えて

0

MonoBehaviourから継承されたrendererにアクセスすることはできません。 Rendererを取得するには、GetComponentを使用する必要があります。同じことがRigidbodyAudioSourceなどの他のコンポーネントにも当てはまります。コース

Renderer myRenderer; 
public float speed = 0.5f; 

void Start() 
{ 
    myRenderer = GetComponent<Renderer>(); 
} 

// Update is called once per frame 
void Update() 
{ 
    Vector2 offset = new Vector2(0, Time.time * speed); 
    myRenderer.material.mainTextureOffset = offset; 
} 

GetComponent<Renderer>().material.mainTextureOffset = offset;はあまりにも働いている可能性が、私が最初のスクリプトでやったようにそれをキャッシュすることをお勧めします。

+0

また、 'muXXmit2X'で述べたように、' Time.deltaTime * speed'でなければなりません。 @ GunnarB。 –

+0

'Time.time'は1秒ごとにインクリメントするので、これに使うべきです。テクスチャオフセットを移動するには、常に増減する変数を使用する必要があります。それは 'Time.deltaTime'が使われるものではありません。 'Time.deltaTime'は、値を平滑化するために使用されます。 'Time.time'は[this](https://docs.unity3d.com/ScriptReference/Material-mainTextureOffset.html)に適しています。 – Programmer

+0

@Ademでは、 'Texture Type'を' Texture'に変更してから 'Wrap Mode'を' Repeat'に変更してください。詳細情報[ここ](http://stackoverflow.com/a/36948841/3785314)。 – Programmer

関連する問題