设定一个物体使得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;
}

 

旋转camera到特定对象的更多相关文章

  1. 让camera实现类似cs第一人称视角旋转和位移

    直接把这个脚本挂在摄像机上就可: using System.Collections; using System.Collections.Generic; using UnityEngine; /* * ...

  2. Raspiberry Camera详解+picamera库+Opencv控制

    使用树莓派的摄像头,将树莓派自身提供的picamera的API数据转换为Python Oencv可用图像数据: # import the necessary packages from picamer ...

  3. Raspberry Camera详解+picamera库+Opencv控制

    使用树莓派的摄像头,将树莓派自身提供的picamera的API数据转换为Python Oencv可用图像数据: # import the necessary packages from picamer ...

  4. Camera三维动画

    一.概述 在Android中说到3D开发,我们首先想到的是OpenGL,但用起来比较复杂繁琐,不适合做应用级别的3D变换.Android为我们提供了一个简化版的3D开发入口:Camera(这里的Cam ...

  5. Cesium中级教程3 - Camera - 相机(摄像机)

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Camera CesiumJS中的Camera控制场景的视图.有 ...

  6. View动画和属性动画

    在应用中, 动画效果提升用户体验, 主要分为View动画和属性动画. View动画变换场景图片效果, 效果包括平移(translate), 缩放(scale), 旋转(rotate), 透明(alph ...

  7. 用DirectX实现魔方(三)视角变换及缩放(附源码)

    在本系列第一篇介绍过鼠标按键的功能,如下. 左键拖拽 - 旋转魔方 右键拖拽 - 变换视角 滚轮 - 缩放魔方 今天研究一下如何实现后面两个功能,用到的技术主要是Arcball,Arcball是实现M ...

  8. View Transform(视图变换)详解

    http://www.cnblogs.com/graphics/archive/2012/07/12/2476413.html 什么是View Transform 我们可以用照相机的原理来阐释3D图形 ...

  9. Away 3d 基本属性

    出处:http://blog.sina.com.cn/s/blog_59f0ac9d0101ci2j.html View3D在初始化时候就已经创建的Camera3D 所以有时候没有创建Camera3D ...

随机推荐

  1. 利用DetachedCriteria实现模糊查询和分页

      分类: Java-Developing  前段时间在做模糊查询,并利用数据库分页,DAO用hibernate实现,刚开始的时候 根据业务层的数据,拼hql语句进行查询,且不说要进行一些if判断,单 ...

  2. 您不能在64-位可执行文件上设置DEP属性?

    我是为dllhost.exe设置DEP时遇到了同样的情况.你需要选择64位系统对应的程序.64位系统:C:\Windows\SysWOW64\dllhost.exe32位系统:C:\Windows\S ...

  3. Java Abstract Class

    在Baths-stomp里面的每个Fluent Interface Interactor Impl,都继承了MarketDataAccessor,which is an abstract class. ...

  4. 13年省赛-B题-连通分量

    题意:求从1到N是否存在一条路,可以遍历每个节点. 思路:求任意两点之间是否通畅即可: 疑惑:完全暴力,bfs但是TLE,问题在于求连通分量(PS:不会)贴别人代码,先保存着. #include &l ...

  5. Tiling Up Blocks_DP

    Description Michael The Kid receives an interesting game set from his grandparent as his birthday gi ...

  6. Entityframework批量删除

    UI层 <a href="#" onclick="DelData(0);return false;" id="a_del" class ...

  7. C语言----变量及作用域 、 指针 、 指针和数组 、 进程空间 、 字符串

    1 使用程序来模拟放球.取球的问题 1.1 问题 栈是一种特殊的线性表,它的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称为运算受限的线性表. 栈的定义是限制仅在表的一端进行插入和删 ...

  8. dedecms SQL数据库连接信息注解(借鉴)

    <?php $cfg_dbhost = 'localhost'; //数据库地址,这里的localhost指的是本机$cfg_dbname = 'hunuo'; //数据库名$cfg_dbuse ...

  9. OpenFlow Switch学习笔记(七)——Matching Fields

    Matching Fields in_port=port Matches OpenFlow port port dl_vlan=vlan Matches IEEE 802.1q Virtual LAN ...

  10. 蓝牙SIG

    蓝牙SIG 蓝牙SIG是一个国际性的非营利组织,它的目的是制定蓝牙的技术规范和推广蓝牙技术的应用.该组织由发起会员(Promoter).合作会员(Associate Member)和接受会员(Adop ...