Unity之升高人物视野

来源:互联网 发布:股市大数据数据宝app 编辑:程序博客网 时间:2024/04/29 23:57

在做漫游的时候,如果你是使用的第一人称,看比你视野高或者低的物体时,你需要看清物体贴图的细节,比如说你要看清上面写的小字是什么,仰视或者俯视,由于距离的限制很难能够到达清晰的效果,如果平视就需要改变视野的高度,在这里就简单探讨一下如何来改变第一人称视野的高度问题。


在Unity里第一人物呈现在场景里就是这么一个绿柱,绿色部分代表人物高度,默认值是2,高度增加绿柱随之增长。绿柱中间部分灰色的胶囊体为摄像机所在位置,默认位置为中间位置,既center.y=0,他放射出的锥形白色细线就为人物视野范围。调整人物视野高度实际就是调节摄像机在Y轴的高度。
摄像机高度在第一人称的场景中是由人物高度height和摄像机相对人物高度的位移center.y的值来决定的。


因为重力原因,在运行场景时,人物高度呈现的绿色柱体是落地的,人物中transform.poition.y的y轴坐标只代表人物的初始位置,与运行后人物落地的坐标值是不一致的,所以在程序中单纯更改坐标y轴的值是改变不了任务视野高度的。另外,如果在运行场景中人物的y轴的坐标值不变的情况下,光更改人物高度height的值,有可能会捅破天,达到场景的上限值尤其是在一个房间里的场景表现的特为明显,单纯更改center.y的值有可能会直接捅破地,超出地面的下限值,这两种情况都可能导致人物掉出场景。要想更改视野高度只能几个值同时改变。
首先我们建立第一人物视野。先倒入第一人物,在project里点击右键导入character controller,然后再在这个选项中找到first person controller将它拖到hierarchy中,将第一人物拖到场景中调整人物位置,这样第一人物就建立好了。


接下来我们进行第二步,调整高度。
private var controller:CharacterController=null; //建立角色对象
private var moveSpeed:float=0.4f;  //上下移动步幅
private var cameraY:float=14.0f;   //初始化人物高度


这里补充说一句,最好将摄像机位置放在绿柱的最上方,相当于人头在身体的上方一样,这里我把center中y轴的值设为了-4,负值代表向绿柱的上方移动,具体的值你要在场景中观察,以人物高度来定,人物高度不同,这个值也是不同的。
private var pos:Vector3;  //角色坐标
function Start () {controller=GetComponent(CharacterController);
   
}


function Update () {


controller.height=cameraY;
//按下Q键升高视野高度
  if(Input.GetKeyDown(KeyCode.Q))
  {
  if(controller.height<24)  //规定一个升高的上限值
  {
      cameraY=cameraY+moveSpeed;
    controller.height=cameraY;
    controller.center.y=controller.center.y-0.2f;
    //升高角色y轴坐标值,防止因参数改变人物身体捅破地
   controller.transform.position=new Vector3(controller.transform.position.x,controller.transform.position.y+(moveSpeed*0.8f),controller.transform.position.z);
   }
  }
  //按下E键降低视野高度


   if(Input.GetKeyDown(KeyCode.E))
  {
     if(controller.height>8)   //规定一个下降的下限值
  {
    cameraY=cameraY-moveSpeed;
    controller.height=cameraY;
    controller.center.y=controller.center.y+0.2f;
    
   controller.transform.position=new Vector3(controller.transform.position.x,controller.transform.position.y+(moveSpeed*0.8f),controller.transform.position.z);
     }
  }


  pos=controller.transform.position;
  
  
}



原创粉丝点击