美文网首页
射线练习题

射线练习题

作者: 胤醚貔貅 | 来源:发表于2017-04-19 11:26 被阅读40次

    场景中创建N(两个以上)个物体,鼠标可以选中任何物体,当鼠标选中为非地面时,选中的物体变为红色,之前选中的物体恢复为之前的颜色,鼠标点击到地面时,让之前选中的那个物体移动的当前点击的位置

    思考:在点击下一个物体移动的时候,上一个物体继续移动

    GameController脚本

    usingUnityEngine;

    usingSystem.Collections;

    publicclassGameController1:MonoBehaviour{

    privateRaycastHithit;//碰撞信息

    privateGameObjectselectdeGameObject;//选中物体

    privateboolflag;//标记当前是否选中了地面

    privateColorselectedColor;//当前选中物体的颜色

    voidUpdate(){

    if(Input.GetMouseButtonDown(0)){

    //从摄像头发射一条经过鼠标的射线,如果射线碰撞到任何碰撞体,该方法返回true,否则返回false

    if(Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),outhit)){

    //判断鼠标是否点击到地面

    if(hit.collider.name=="Plane"){

    flag=true;

    }else{

    flag=false;

    //null;空对象,引用类型

    if(selectdeGameObject){

    //将前一个选中的物体颜色恢复为原来的颜色

    selectdeGameObject.GetComponent().material.color=selectedColor;

    }

    //更新选中的物体

    selectdeGameObject=hit.collider.gameObject;

    selectedColor=selectdeGameObject.GetComponent().material.color;

    selectdeGameObject.GetComponent().material.color=Color.red;

    }

    }

    }

    //当鼠标选中地面,并且被选中物体存在

    if(flag&&selectdeGameObject){

    Move(hit.point);

    }

    }

    voidMove(Vector3distination){

    if(Vector3.Distance(selectdeGameObject.transform.position,distination)<=0.01f){

    selectdeGameObject.transform.position=distination;

    }else{

    Vector3pos=selectdeGameObject.transform.position;

    pos=Vector3.Lerp(pos,distination,Time.deltaTime);

    selectdeGameObject.transform.position=newVector3(pos.x,selectdeGameObject.transform.position.y,pos.z);

    }

    }

    }

    相关文章

      网友评论

          本文标题:射线练习题

          本文链接:https://www.haomeiwen.com/subject/cgbczttx.html