2017-03-24 82 views
1

我想兩個遊戲物體(sphereObject0sphereObject2)與行渲染lineRenderer0_2在Unity3D項目連接。如何在運行時更新線渲染器的開始和結束位置?

該行首先顯示正常。我的問題是我需要線渲染器來更新其開始和結束位置,以匹配sphereObject0sphereObject2的位置。

由於某些原因,我的線渲染器是絕對靜態的,我無法找到讓它隨着球體GameObject最終移動而調整其開始和結束位置的方式。

這是我的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

你的問題是你如何分配LineRendererAddComponent到一個新的變量,而不是你的成員變量。這裏的行:

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

創建的Start()範圍內命名爲lineRenderer0_2新的變量和隱藏當該功能的其他地方引用的成員變量。將該行更改爲:

lineRenderer0_2 = line0_2.AddComponent<LineRenderer>(); 

它應該可以正常工作。作爲一個旁節點,通常使用「m_」前綴來命名成員變量,這樣您就不會遇到這些問題。

+0

這真是太棒了(而且非常清晰),感謝Gunther! – Rodolphe

相關問題