using UnityEngine;
using System.Collections;
using DG.Tweening;
public class CameraFloatEffect : MonoBehaviour
{
private GameObject camera;
private bool startFloatingCamera = false;//开始位移
private bool canFloating = false;//可以位移
public float xFloat = 5;//X偏移量
public float yFloat = 5;//Y偏移量
public float zFloat = 5;//Z偏移量
public float startSpeed = 0.1f;//初始速度
public float nowSpeed = 0f;//当前速度
public float maxSpeed = 5f;//最大速度
public float speedPercent = 1.1f;//速度增加减少的百分比
public float BaseDisplace = 1f;//基础位移系数
public Vector3 originPosition;//原点,以原点为基准计算随机区域
public Vector3 startPosition;//起始坐标
public Vector3 targetPosition;//目标坐标
public Vector3 midPosition;//中心点坐标
public bool ismid = false;//是否经过了中心点
public float lastMagnitude = 0f;//上一次距离目标点的距离
public float memoryDistance;//到达最大速度时的距离
// Use this for initialization
void Start()
{
camera = this.gameObject;
SetOriginPosition(this.transform.position);
startFloatingCamera = true;
FloatingCamera();
}
// Update is called once per frame
void Update()
{
UpdateCameraPosition();
}
public void FloatingCamera()
{
float _x = Random.Range(-xFloat, xFloat);
float _y = Random.Range(-yFloat, yFloat);
float _z = Random.Range(-zFloat, zFloat);
targetPosition = new Vector3(originPosition.x + _x, originPosition.y + _y, originPosition.z + _z);
startPosition = camera.transform.position;
midPosition = (targetPosition + startPosition) / 2;
lastMagnitude = (midPosition - startPosition).magnitude;
canFloating = true;
nowSpeed = startSpeed;
memoryDistance = 0;
}
float testF = 0;
public void UpdateCameraPosition()
{
if (startFloatingCamera)
{
if (canFloating)
{
if (!ismid)
{
nowSpeed = nowSpeed * speedPercent;
if (nowSpeed >= maxSpeed)
{
nowSpeed = maxSpeed;
memoryDistance = (camera.transform.position - startPosition).magnitude;
}
Vector3 normalIzed = (midPosition - startPosition).normalized;
Debug.Log(normalIzed);
camera.transform.position += normalIzed * nowSpeed;
if (lastMagnitude < (midPosition - camera.transform.position).magnitude)
{
ismid = true;
lastMagnitude = (targetPosition - midPosition).magnitude;
}
else
{
lastMagnitude = (midPosition - camera.transform.position).magnitude;
}
}
else
{
if (nowSpeed >= maxSpeed)
{
if (memoryDistance > (targetPosition - camera.transform.position).magnitude)
{
nowSpeed = nowSpeed / speedPercent;
}
}
else
{
nowSpeed = nowSpeed / speedPercent;
if (nowSpeed <= startSpeed)
{
nowSpeed = startSpeed;
}
}
Vector3 normalIzed = (targetPosition - midPosition).normalized;
camera.transform.position += normalIzed * nowSpeed;
if (lastMagnitude < (targetPosition - camera.transform.position).magnitude)
{
ismid = true;
}
//Debug.Log("target == " + (targetPosition - camera.transform.position).magnitude);
if ((targetPosition - camera.transform.position).magnitude < 0.1f)
{
ismid = false;
canFloating = false;
FloatingCamera();
}
else
{
lastMagnitude = (targetPosition - camera.transform.position).magnitude;
}
}
// Debug.Log(percent);
//camera.transform.position = Vector3.Lerp(camera.transform.position, targetPosition,speed);
//if ((targetPosition - camera.transform.position).magnitude <= 0.01f)
//{
// camera.transform.position = targetPosition;
// canFloating = false;
// FloatingCamera();
//}
}
}
}
public void SetOriginPosition(Vector3 _position)
{
originPosition = _position;
}
}
using System.Collections;
using DG.Tweening;
public class CameraFloatEffect : MonoBehaviour
{
private GameObject camera;
private bool startFloatingCamera = false;//开始位移
private bool canFloating = false;//可以位移
public float xFloat = 5;//X偏移量
public float yFloat = 5;//Y偏移量
public float zFloat = 5;//Z偏移量
public float startSpeed = 0.1f;//初始速度
public float nowSpeed = 0f;//当前速度
public float maxSpeed = 5f;//最大速度
public float speedPercent = 1.1f;//速度增加减少的百分比
public float BaseDisplace = 1f;//基础位移系数
public Vector3 originPosition;//原点,以原点为基准计算随机区域
public Vector3 startPosition;//起始坐标
public Vector3 targetPosition;//目标坐标
public Vector3 midPosition;//中心点坐标
public bool ismid = false;//是否经过了中心点
public float lastMagnitude = 0f;//上一次距离目标点的距离
public float memoryDistance;//到达最大速度时的距离
// Use this for initialization
void Start()
{
camera = this.gameObject;
SetOriginPosition(this.transform.position);
startFloatingCamera = true;
FloatingCamera();
}
// Update is called once per frame
void Update()
{
UpdateCameraPosition();
}
public void FloatingCamera()
{
float _x = Random.Range(-xFloat, xFloat);
float _y = Random.Range(-yFloat, yFloat);
float _z = Random.Range(-zFloat, zFloat);
targetPosition = new Vector3(originPosition.x + _x, originPosition.y + _y, originPosition.z + _z);
startPosition = camera.transform.position;
midPosition = (targetPosition + startPosition) / 2;
lastMagnitude = (midPosition - startPosition).magnitude;
canFloating = true;
nowSpeed = startSpeed;
memoryDistance = 0;
}
float testF = 0;
public void UpdateCameraPosition()
{
if (startFloatingCamera)
{
if (canFloating)
{
if (!ismid)
{
nowSpeed = nowSpeed * speedPercent;
if (nowSpeed >= maxSpeed)
{
nowSpeed = maxSpeed;
memoryDistance = (camera.transform.position - startPosition).magnitude;
}
Vector3 normalIzed = (midPosition - startPosition).normalized;
Debug.Log(normalIzed);
camera.transform.position += normalIzed * nowSpeed;
if (lastMagnitude < (midPosition - camera.transform.position).magnitude)
{
ismid = true;
lastMagnitude = (targetPosition - midPosition).magnitude;
}
else
{
lastMagnitude = (midPosition - camera.transform.position).magnitude;
}
}
else
{
if (nowSpeed >= maxSpeed)
{
if (memoryDistance > (targetPosition - camera.transform.position).magnitude)
{
nowSpeed = nowSpeed / speedPercent;
}
}
else
{
nowSpeed = nowSpeed / speedPercent;
if (nowSpeed <= startSpeed)
{
nowSpeed = startSpeed;
}
}
Vector3 normalIzed = (targetPosition - midPosition).normalized;
camera.transform.position += normalIzed * nowSpeed;
if (lastMagnitude < (targetPosition - camera.transform.position).magnitude)
{
ismid = true;
}
//Debug.Log("target == " + (targetPosition - camera.transform.position).magnitude);
if ((targetPosition - camera.transform.position).magnitude < 0.1f)
{
ismid = false;
canFloating = false;
FloatingCamera();
}
else
{
lastMagnitude = (targetPosition - camera.transform.position).magnitude;
}
}
// Debug.Log(percent);
//camera.transform.position = Vector3.Lerp(camera.transform.position, targetPosition,speed);
//if ((targetPosition - camera.transform.position).magnitude <= 0.01f)
//{
// camera.transform.position = targetPosition;
// canFloating = false;
// FloatingCamera();
//}
}
}
}
public void SetOriginPosition(Vector3 _position)
{
originPosition = _position;
}
}