unity中C#跟随和射线

来源:互联网 发布:盛世传奇翅膀进阶数据 编辑:程序博客网 时间:2024/06/05 07:03
usingUnityEngine;
usingSystem.Collections;
publicclassgensui:MonoBehaviour{
   publicTransforma;//a是主物体被跟随物体
   publicTransformb;//b是跟随主物体的物体
   // public Animator ani;
   publicNavMeshAgentagint;//是跟随主物体的物体,获取组件
   publicLineRendererlr;//射线渲染
   // Use this for initialization
   voidStart () {
       
       //射线长度
        lr.SetVertexCount(2);
       //跟随移动
       /*
        1.选中plane--选择属性列表里的Static
        2.选中plane--Windows--Navigation--右下角Back烘焙一下
        3.建白Cube,建黑Cube
        */
    }
   // Update is called once per frame
   voidUpdate () {
       //跟随
        agint.SetDestination(a.position);
       //射线的两种方法
       ////1.1.屏幕发出,是摄像机射出的绿色线
       ////实例化射线
       //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
       ////检测射线碰撞
       //RaycastHit hit;
       //if (Physics.Raycast(ray,out hit))
       //{
       //    Debug.Log(hit.point);
       //}
       //Debug.DrawLine(ray.origin,hit.point,Color.green);
       ////2.指定射线,是被跟随物体射出来的线
       //Ray ray2 = new Ray(a.position,b.position-a.position);
       //RaycastHit hit2;
       //if (Physics.Raycast(ray2,out hit2))
       //{
       //    Debug.Log(hit2.point);
       //    Debug.Log(hit2.collider.gameObject.name);
       //}
       ////画射线
       //Debug.DrawLine(ray2.origin, ray2.direction*20, Color.red);
       //Move();
        look();
        Fire();
    }
   voidlook() {
       Rayray =Camera.main.ScreenPointToRay(Input.mousePosition);
 //射线命中检测
       RaycastHithit;
//物理方法检测射线
       if(Physics.Raycast(ray,outhit))
        {
           //射线朝向跟随鼠标
            a.LookAt(newVector3(hit.point.x,0.1f,hit.point.z));
        }
    }
   voidFire() {
       Rayray2 =newRay(a.position, a.forward);
 //射线命中检测
       RaycastHithit2;
       if(Input.GetMouseButtonDown(0))
        {
           //再次点击出射线
            lr.enabled =true;
//传射线坐标  起始点位置靠上
            lr.SetPosition(0,newVector3(A.position.x,1,A.position.z));
                //             终点朝向,玩家位置
            lr.SetPosition(1,a.position+a.forward*15);
 //开启时间间隔协程
            StartCoroutine("startTime");
           if(Physics.Raycast(ray2,outhit2))
            {
                Destroy(hit2.collider.gameObject);
            }
        }
    }
   IEnumeratorstartTime() {
       yieldreturnnewWaitForSeconds(0.1f);
        lr.enabled =false;
    }

}

做记录用,不喜勿喷!!!谢谢

原创粉丝点击