设定一个物体使得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. poj1159 dp最长公共子串

    //Accepted 204 KB 891 ms //dp最长公共子串 //dp[i][j]=max(dp[i-1][j],dp[i][j-1]) //dp[i][j]=max(dp[i][j],dp ...

  2. ACM - 概率、期望题目 小结(临时)

    概率DP求期望大多数都是全期望公式的运用.主要思考状态空间的划分以及状态事件发生的概率.问题可以分为无环和有环两类.无环一类多数比较简单,可以通过迭代或者记忆化搜索完成.有环一类略复杂,可以通过假设方 ...

  3. TPLink 备份文件bin文件解析

    TPLink 路由器备份文件bin文件 测试路由器 WR885,备份文件加密方式DES,密钥:478DA50BF9E3D2CF linux端: openssl enc -d -des-ecb -nop ...

  4. 2013 imac 安装 win7

    昨天晚上安装imac win7系统,其实步骤是很简单的,首先需要一个用boot camp助手做好的win7安装U盘或者有个外接光驱加一张win7光盘,然后用boot camp助理划分一个分区给win7 ...

  5. 在.net中实现在textbox中按ctrl+enter进行数据的提交

    textbox.Attributes.Add("onKeydown", "if(event.ctrlKey&&event.keyCode == 13){d ...

  6. (spring-第14回【IoC基础篇】)国际化信息

    国际化又称为本地化. 当你把手机的language由中文切换到英文时,你的微信也相应改用英语,这就是i18n国际化.一般来说,应用软件提供一套不同语言的资源文件,放到特定目录中,应用根据不同语言的操作 ...

  7. HDU 圆桌会议 - 数学题

    圆桌   题意就是每分钟可以将相邻的两个人的位置互换一下 , 问你 ,几分钟可以将所有人的位置互换成    原先的  B 在A的右边 C在A的左边 , 换成现在的 C 在A 的右边 , B 在 A 的 ...

  8. Drools规则文件结构说明

    一.规则文件构成 package(规则文件所在包) import(导入java包) global(规则文件中的"全局变量") function(函数) query(查找) rule ...

  9. The Cow Lineup_找规律

    Description Farmer John's N cows (1 <= N <= 100,000) are lined up in a row.Each cow is labeled ...

  10. 【题解】【排列组合】【素数】【Leetcode】Unique Paths

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...