设定一个物体使得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. Ogre 1.8 terrain 和 paging 组件

    以下转自:http://hi.baidu.com/xocoder/item/e8d87cf53d87612b753c4cfd OGRE地形生成 OGRE可以通过两个接口来生成地形,分别是void Te ...

  2. [转] linux中巧用ctrl-z后台运行程序

    背景: 最近在执行一些长时间程序的时候,老是一不小心忘了输入‘&’ , 结果终端就卡在那里了,很是郁闷 以前总是再新开一个终端. 今天翻看<鸟哥的linux私房菜>的时候,发现介绍 ...

  3. Ubuntu 14.10 下设置时间同步

    在启动HBase机群的时候,发现了一个错误,因为机群时间不同步导致,所以要同步集群时间. Linux的时间分为System Clock(系统时间)和Real Time Clock (硬件时间,简称RT ...

  4. Errors

    Errors running builder 'Android Resource Manager' on project 'Demo'. java.lang.NullPointerException ...

  5. HTTP协议详解(经典)

    转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...

  6. Koch曲线

    Koch曲线是一种分形,完整的Koch曲线像雪花,维基百科上记录Koch曲线最早出现在海里格·冯·科赫的论文<关于一条连续而无切线,可由初等几何构作的曲线>中,它的定义如下,给定线段AB, ...

  7. Java中接口作为方法的返回

    在<算法>中的散列表一节,在用拉链法实现散列表的API时要求实现以下一个方法: public Iterable<Key> keys() 我们知道Iterable是一个接口,那么 ...

  8. 多个storyboard开发应用程序,封装.bundle和.a不用xib使用storyboard!!!

    一,封装.bundle和.a使用xib的方式前面已经说过了,具体方式不再赘述,简单介绍于下: 静态库加.h  bundle:删plist,改sdk,加xib 简称psx三步 引用库的项目,加.a .b ...

  9. 20145210实验五《Java网络编程》

    20145210实验五<Java网络编程> 实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代码, ...

  10. sourceMappingURL

    JavaScript Source Map 详解