zoukankan      html  css  js  c++  java
  • 旋转camera到特定对象

    设定一个物体使得camera可以从现在为止自动飞到当前位置

     1. 设定一个位置,可以在其前方放置一个显示其位置的cube。这里也可以写脚本设定位置。

     2. 使用函数

      移动函数 transform.position = vector3.slerp(positionstart, positionEnd, Time*time*0.001);

      旋转函数 transform.Rotation = Quaternion.slerp(StartRotation, aimRotation, Time.time*0.00001);

     3.在控制自动漫游于原始FPC摄像机的切换脚本中添加功能:按下run,自动记录当前position,rotation;按FPS,恢复原来位置;

     4. aimRotation制定:

       4.1 由于我的摄像机一开始旋转了180度,因此需要添加

            aimRotation = Inverse(CubeRotation);

            aimRotation.y = 180度 + aimRotation.y;

       4.2 当移动到aimpostion时,FPS在轻微移动,因此加上判断;FPS与aimPostion 很近的时候,就直接将位置赋值给FPS;

    Time

         Time.time 这一帧执行的时间距离开始时间

         Time.deltatime * 10 每帧移动10米

       这段脚本是我写的包含控制函数使得摄像机首先扭转方向到目标物体,然后按照该方向飞向目标物体,包含当物体里目标位置很近的时候,模糊摄像机,然后恢复正常状态

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    var startObject : GameObject;
    var aimObject : GameObject;
    var aimObjectLocation : GameObject;
    var maincamera : Camera;
    private var PositionStart : Vector3;
    private var PositionEnd : Vector3;
    private var aimRotation : Quaternion;
    private var startRotation : Quaternion;
    private var distance : float = 10;
    private var angle : float = 10;
    private var isBlur : boolean = false;
    private var isCloseEnough : boolean = false;
    private var relativePos : Vector3;
    private var rotationFinished : boolean = false;
    private var angleDefinition : boolean = false;
    private var translateBegin : boolean = false;
     
    function Update () {
       PositionStart = startObject.transform.position;
       PositionEnd = aimObjectLocation.transform.position;
       if(!translateBegin)
       {   
            relativePos = aimObject.transform.position - PositionStart;
            if(transform.position == PositionEnd)
            {
                 rotationFinished = true;
            }
            else
            {
                if(relativePos != Vector3.zero)
                {
                     aimRotation = Quaternion.LookRotation(relativePos);
                }
                else
               {
                    rotationFinished = true;
               }
               var angle = Quaternion.Angle(transform.rotation, aimRotation);
               if (angle != 0)
              {
                   rotationFinished = false;
                   //distance = 10;
              }
              else
              {
                   rotationFinished = true;
              }
           }
       }
       if(!rotationFinished)
       {
           if(angle > 0.1)
           {
               print("rotationlast");
               transform.rotation = Quaternion.Slerp(startObject.transform.rotation,
                  aimRotation, 0.15);//normal velocity
           }
           else
           {
               print("rotationTheSame");
               rotationFinished = true;
               transform.rotation = aimRotation;
               translateBegin = true;
           }
       }
         
       if(translateBegin)
       {
           distance = Vector3.Distance(transform.position, PositionEnd);
           print(distance);
           if(distance < 0.1)
           {
               print("distance< 0.1");
               transform.position = PositionEnd;
               translateBegin = false;
        
               WaitToBlur();
               //maincamera.orthographic = true;
               transform.rotation = aimObjectLocation.transform.rotation;
           }
           else
           {
               transform.LookAt(aimObject.transform);
               transform.position = Vector3.Slerp(PositionStart,PositionEnd,
                                             0.08);
           }
        }
    }
     
    function WaitToBlur() {
        // suspend execution for waitTime seconds
        var blurCamera= maincamera.GetComponent("BlurEffect");
        blurCamera.enabled = true;
        yield WaitForSeconds (0.5);
        blurCamera.enabled = false;
    }

     

  • 相关阅读:
    form表单里submit的提交,如何不让其阻止ajax的调用
    前端模拟后台json 调接口
    纯前端实现搜索功能、模糊查询
    js如何获取select下拉框的value以及文本内容 并赋值
    清除表单input输入框内数据
    js动态生成的dom mouseover事件无效
    jq获取当前日期xxxx-xx-xx格式
    获取自定义属性、 data-* 的值
    媒体查询不起作用
    shell_判断语句If
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6022600.html
Copyright © 2011-2022 走看看