zoukankan      html  css  js  c++  java
  • 摄像机按照自设的路径围绕并朝着某一个物体进行360度旋转

    using UnityEngine;
    using System.Collections;

    public class Slow_Motion : MonoBehaviour
    {

    public Transform motionRoot;
    public Transform Aim;
    int moveIndex = 0;

    public float moveSpeed = 3f;
    float moveNeedTime = 0;
    float timer = 0;

    public Transform motionCamera;
    void Awake()
    {
    ReInitData();
    }


    void Update()
    {
    if (motionRoot != null && motionRoot.childCount > 0)
    {

    if (moveIndex <= motionRoot.childCount - 1)
    {
    timer += Time.deltaTime;
    if (timer < moveNeedTime)
    {
    float progress = timer / moveNeedTime;
    if (motionCamera != null)
    {

    if (moveIndex < motionRoot.childCount - 1)
    {
    //球形插值和直线插值
    //motionCamera.position = Vector3.Slerp(motionWayRoot.GetChild(moveIndex).position, motionWayRoot.GetChild(moveIndex+1).position, progress);
    motionCamera.position = Vector3.Lerp(motionRoot.GetChild(moveIndex).position, motionRoot.GetChild(moveIndex + 1).position, progress);
    }
    else
    {
    //motionCamera.position = Vector3.Slerp(motionWayRoot.GetChild(moveIndex).position, motionWayRoot.GetChild(moveIndex+1).position, progress);
    motionCamera.position = Vector3.Lerp(motionRoot.GetChild(motionRoot.childCount - 1).position, motionRoot.GetChild(0).position, progress);

    }

    motionCamera.LookAt(Aim);
    }
    }
    else
    {
    moveIndex++;
    ReInitData(moveIndex);
    }
    }
    else
    {
    ReInitData();
    }

    }

    }

    void OnDrawGizmos()
    {
    if (motionRoot != null && motionRoot.childCount > 0)
    {
    int c = motionRoot.childCount;
    for (int i = 0; i + 1 < c; i++)
    {
    Debug.DrawLine(motionRoot.GetChild(i).position, motionRoot.GetChild(i + 1).position, Color.green);
    }
    Debug.DrawLine(motionRoot.GetChild(motionRoot.childCount - 1).position, motionRoot.GetChild(0).position, Color.green);
    }
    }

    void ReInitData(int moveIndex_ = 0)
    {
    moveIndex = moveIndex_;
    timer = 0;
    if (motionRoot != null && motionRoot.childCount > 0)
    {
    if (motionRoot.childCount >= 2)
    {
    if (moveIndex < motionRoot.childCount - 1)
    {
    moveNeedTime = Vector3.Distance(motionRoot.GetChild(moveIndex).position, motionRoot.GetChild(moveIndex + 1).position) / moveSpeed;
    }
    else
    {
    moveNeedTime = Vector3.Distance(motionRoot.GetChild(motionRoot.childCount - 1).position, motionRoot.GetChild(0).position) / moveSpeed;
    }

    }
    }
    }
    }

  • 相关阅读:
    Codeforces Round #694 (Div.1, Div.2)题解(2A-1D)(1E-1F待填)
    【Luogu日报#294】OI中你可能会用到的一些不等式及其证明 | 习题题解
    SP10570 LONGCS
    Unity 数字孪生笔记 工具介绍
    Unity3D 最佳数字孪生插件(一个基于Unity的自动化概念设计,仿真,虚拟调试和3D HMI的框架)
    Unity 数字孪生笔记 PiXYZ快速入门
    数据结构:堆排序
    HDU 4704 Sum (欧拉降幂+二项式公式+快速幂)
    Codeforces Goodbye2020部分题解
    Apache架构师的30条设计原则
  • 原文地址:https://www.cnblogs.com/Study088/p/7161526.html
Copyright © 2011-2022 走看看