/// <summary> /// 设置移动目标参数 /// </summary> /// <param name="vec3"> 目标坐标 </param> /// <param name="offsetY"> Y轴相对偏移值(旋转角度计算 某些模型朝向非z轴正向) </param> /// <param name="axisY"> 旋转角度是否计算Y轴 </param> public void SetMoveTarget(Vector3 vec3, float offsetY = 0, bool axisY = false) { bool rotate = false; TarPos = vec3; Vector3 movingDir = mTarPos - mPos; rotate = movingDir != mMovingDir; mMovingDis = movingDir.magnitude; mLimitMovingDis = movingDir.magnitude; if (mMovingDis > 0) { mMovingDir = movingDir.normalized; } Vector3 angles = Vector3.zero; if (axisY == false) { angles = Mathex.GetAnglesNoY(mPos, vec3); } else { angles = Mathex.GetAngles(mPos, vec3); } angles.y += offsetY; mTarAngles = new Vector3(angles.z, angles.y, angles.x); //项目用法 不知是否是模型偏移了90°导致的 if (rotate == true) { if (mRotateRate == 0) { return; } mRotateTabTime = Time.realtimeSinceStartup; } }
/// <summary> /// 刷新欧拉角角度 /// </summary> protected virtual void RefreshAngles() { if (mRotateRate != 0) { if (mRotateTabTime > 0) { float cur = Time.realtimeSinceStartup; float off = cur - mRotateTabTime; if (mRotateRate - off >= 0) { Mathex.GetRangeAngles(ref mAngles, ref mTarAngles); if (off == 0) { off = mRotateRate; } Vector3 angles = Mathex.GetLinearPoint(mAngles, mTarAngles, off); SetEulerAngle(angles); } else { SetEulerAngle(mTarAngles); mRotateTabTime = 0; } } } else { SetEulerAngle(mTarAngles); } }
/// <summary> /// 设置欧拉角角度 /// </summary> public void SetEulerAngle(Vector3 vec3) { vec3.y = Mathex.GetModAngles(vec3.y); mAngles = vec3; }