2017-03-24 13 views
1

私はUnity3DプロジェクトにおけるラインレンダラlineRenderer0_2を持つ2つのゲームオブジェクト(sphereObject0sphereObject2)を接続しようとしています。実行時にラインレンダラの開始位置と終了位置を更新するには?

最初は細かい線が表示されます。私の問題は、sphereObject0sphereObject2の位置に一致するように、その開始位置と終了位置を更新するためにラインレンダラーが必要であるということです。

いくつかの理由から、私のラインレンダラは絶対に静的で、GameObjectsが最終的に動き回る球と共に開始点と終了点を調整する方法を見つけることができません。

私のC#スクリプトは、私が間違っていることを考えていますか?どんな助けでも大歓迎です!

using UnityEngine; 
using System.Collections; 

public class autoCreateNetwork : MonoBehaviour { 

    public bool sphereHasGravity = false; 
    private Collider coll; 
    private Renderer rend; 
    private SpringJoint springJoint; 
    public Material lines; 

    GameObject sphereObject0; 
    GameObject sphereObject2; 
    LineRenderer lineRenderer0_2 ; 

    void Start() { 

     // Spawn a sphere and set it up 
     sphereObject0 = GameObject.CreatePrimitive(PrimitiveType.Sphere); 
     sphereObject0.transform.position = new Vector3(-10.2571400951f, 98.8977277884f, -19.9870244083f); 
     Rigidbody sphereBody0 = sphereObject0.AddComponent<Rigidbody>(); 
     sphereBody0.mass = 1f; 
     // Physics model 
     coll = sphereBody0.GetComponent<Collider>(); 
     PhysicMaterial material0 = new PhysicMaterial(); 
     material0.dynamicFriction = 1; 
     coll.material = material0; 
     coll.material.bounciness = .8f; 
     // Render (color, smoothness, etc.) 
     rend = sphereBody0.GetComponent<Renderer>(); 
     rend.material.color = new Color32(171,166,164,255); 
     rend.material.SetFloat("_Metallic", 0.0f); 
     rend.material.SetFloat("_Glossiness", 0.0f); 
     sphereBody0.useGravity = sphereHasGravity; 
     sphereBody0.transform.localScale = new Vector3(0.5f,0.5f,0.5f); 

     // Spawn a sphere and set it up 
     sphereObject2 = GameObject.CreatePrimitive(PrimitiveType.Sphere); 
     sphereObject2.transform.position = new Vector3(-28.1943570987f, 89.5665878403f, 5.43686642264f); 
     Rigidbody sphereBody2 = sphereObject2.AddComponent<Rigidbody>(); 
     sphereBody2.mass = 1f; 
     // Physics model 
     coll = sphereBody2.GetComponent<Collider>(); 
     PhysicMaterial material2 = new PhysicMaterial(); 
     material2.dynamicFriction = 1; 
     coll.material = material2; 
     coll.material.bounciness = .8f; 
     // Render (color, smoothness, etc.) 
     rend = sphereBody2.GetComponent<Renderer>(); 
     rend.material.color = new Color32(105,150,187,255); 
     rend.material.SetFloat("_Metallic", 0.0f); 
     rend.material.SetFloat("_Glossiness", 0.0f); 
     sphereBody2.useGravity = sphereHasGravity; 
     sphereBody2.transform.localScale = new Vector3(0.5f,0.5f,0.5f); 

     // Spawn a line and set it up 
     GameObject line0_2 = new GameObject(); 
     LineRenderer lineRenderer0_2 = line0_2.AddComponent<LineRenderer>(); 
     lineRenderer0_2.material = lines; 
     lineRenderer0_2.widthMultiplier = 0.0482773661501f; 
     lineRenderer0_2.SetPosition(0, sphereObject0.transform.position); 
     lineRenderer0_2.SetPosition(1, sphereObject2.transform.position); 
     float alpha0_2 = .9f; 
     Gradient gradient0_2 = new Gradient(); 
     gradient0_2.SetKeys(
      new GradientColorKey[] { new GradientColorKey(new Color32(171,166,164,255), 0.0f), new GradientColorKey(new Color32(105,150,187,255), 1.0f) }, 
      new GradientAlphaKey[] { new GradientAlphaKey(alpha0_2, 0.0f), new GradientAlphaKey(alpha0_2, 1.0f) } 
     ); 
     lineRenderer0_2.colorGradient = gradient0_2; 
     lineRenderer0_2.useWorldSpace = true; 

    } 

    void Update() { 

      lineRenderer0_2.SetPosition(0, sphereObject0.transform.position); 
      lineRenderer0_2.SetPosition(1, sphereObject2.transform.position); 

     } 
    } 

答えて

1

あなたの問題は、あなたの代わりにあなたのメンバ変数の新しい変数にAddComponentLineRendererを代入している方法です。ここでライン:

LineRenderer lineRenderer0_2 = line0_2.AddComponent<LineRenderer>(); 

Start()の範囲内lineRenderer0_2という名前の新しい変数を作成し、他の場所でその関数内で参照メンバ変数を隠します。行を次のように変更してください。

lineRenderer0_2 = line0_2.AddComponent<LineRenderer>(); 

これは問題なく動作します。サイドノードとしては、メンバ変数に "m_"という接頭辞を付けて、これらの問題にぶつからないようにするのが一般的です。

+0

これはすばらしい(そして本当にクリアな)、Guntherに感謝します! – Rodolphe

関連する問題