团结 - 反思与;折射(依赖于标签)激光更新每帧?

时间:2013-10-25 23:38:42

标签: unity3d unityscript raycasting

我尝试过使用Raycast Reflection和LineRenderers的几种不同方法,但似乎都没有正常工作。这是唯一一个半工作的,只在开始时设置自己,永远不会更新移动的对象;并且变得非常不稳定和扭曲,并且上下轻微地变得严重扭曲(在此没有折射,不要打扰指出这一点)。有任何想法吗?我已经坚持了很久。

根据要求不工作(对于我正在尝试做的一个例子,全新的代码是可行的选择):

@script RequireComponent(LineRenderer)

private var goTransform:Transform;
private var lineRenderer:LineRenderer;

private var ray:Ray;
private var hit:RaycastHit;
private var inDirection:Vector3;
public var nReflections:int = 2;
private var nPoints:int;


function Awake () 
{
    goTransform = this.GetComponent(Transform);
    lineRenderer = this.GetComponent(LineRenderer);
}

function Update () {
    nReflections = Mathf.Clamp(nReflections,1,nReflections);
    ray = new Ray(goTransform.position,goTransform.forward);

    Debug.DrawRay (goTransform.position,goTransform.forward * 100, Color.magenta);

    nPoints = nReflections;
    lineRenderer.SetVertexCount(nPoints); 
    lineRenderer.SetPosition(0,goTransform.position);

    for(var i:int=0;i<=nReflections;i++) {
       if(i == 0) {
         if(Physics.Raycast(ray.origin,ray.direction, hit, 100)) {  
          if(hit.transform.CompareTag("LaserReflector")) {
              inDirection = Vector3.Reflect(ray.direction, hit.normal);
              ray = new Ray(hit.point,inDirection);

              Debug.DrawRay (hit.point, hit.normal*3, Color.blue);
              Debug.DrawRay (hit.point, inDirection*100, Color.magenta);

              Debug.Log("Object name: " + hit.transform.name);

              if(nReflections==1)
              {
                 lineRenderer.SetVertexCount(++nPoints); 
              }

              lineRenderer.SetPosition(i+1, hit.point);
          } 
         }
       }
       else
       {
         if(Physics.Raycast(ray.origin,ray.direction, hit, 100)) {
          if(hit.transform.CompareTag("LaserReflector")) {
              inDirection = Vector3.Reflect(inDirection, hit.normal);
              ray = new Ray(hit.point, inDirection);

              Debug.DrawRay (hit.point, hit.normal*3, Color.blue);
              Debug.DrawRay (hit.point, inDirection*100, Color.magenta);

              Debug.Log("Object name: " + hit.transform.name);

              lineRenderer.SetVertexCount(++nPoints); 
              lineRenderer.SetPosition(i+1,hit.point);
          } 
         }
       }
    }
}

0 个答案:

没有答案