赞
踩
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//旋转父对象,子对象不跟着移动
public class CCamera : MonoBehaviour {
public Transform cameraLook; //相机看向目标
public Transform cameraAt; //相机所在位置
// Use this for initialization
Vector3 initPos;
Vector3 initTarget;
void Start()
{
//cameraAt目标初始化相对位置
initPos = cameraAt.parent.transform.rotation * cameraAt.localPosition;
Debug.Log("init "+(initPos).ToString("F2"));
//cameraLook目标初始化相对位置
initTarget = cameraLook.parent.transform.rotation * cameraLook.localPosition;
}
// Update is called once per frame
void Update () {
//当前旋转UserControl后,计算cameraLook的位置
Vector3 lookv3 = cameraLook.parent.transform.rotation * cameraLook.localPosition;
cameraLook.position = cameraLook.position + (initTarget - lookv3);
//当前旋转UserControl后,计算cameraAt的位置
Vector3 newv3 = cameraAt.parent.transform.rotation * cameraAt.localPosition;
transform.position = cameraAt.position + (initPos - newv3);
//相机所在位置看向目标方位
Vector3 dir = (cameraLook.position - transform.position).normalized;
Quaternion q = Quaternion.LookRotation(dir);
transform.rotation = q;
Debug.Log((newv3).ToString("F2")+","+(newv3- initPos).ToString("F2"));
}
}
图:
可以看到胶囊旋转后,相机位置和目标位置是不变的,只有角色在旋转。
重点要理解 四元数 × 位置 = 旋转后所在位置
旋转向量也是同样道理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。