📄 thirdpersoncameragamecomponent.cs
字号:
#region Using Statements
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using SceneryComponent.Components;
using Microsoft.Xna.Framework.Input;
#endregion
namespace SceneryComponent.Components
{
/// <summary>
/// Componente de c醡ara en tercera persona
/// </summary>
public partial class ThirdPersonCameraGameComponent : BaseCameraGameComponent
{
// Posici髇 relativa del espectador
private readonly Vector3 viewerPosition = new Vector3(0f, 5f, 20f);
// Modelo que sigue la c醡ara
private TankGameComponent m_ModelToFollow;
/// <summary>
/// Obtiene o establece el modelo que sigue la c醡ara
/// </summary>
public TankGameComponent ModelToFollow
{
get
{
return m_ModelToFollow;
}
set
{
m_ModelToFollow = value;
}
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="game">Juego</param>
public ThirdPersonCameraGameComponent(Game game)
: base(game)
{
}
/// <summary>
/// Actualiza el estado del componente
/// </summary>
/// <param name="gameTime">Tiempo de juego</param>
public override void Update(GameTime gameTime)
{
if (ModelToFollow != null)
{
if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
{
// Obtener la rotaci髇 del objetivo desde el quaternion
Matrix rotation = Matrix.CreateFromQuaternion(ModelToFollow.Rotation);
// Calcular la posici髇 relativa de la c醡ara
Vector3 transformedCameraPosition = Vector3.Transform(viewerPosition, rotation);
// A馻dir la posici髇 relativa de la c醡ara a la posici髇 del modelo para obtener la posici髇 de la c醡ara
m_Position = ModelToFollow.Position + transformedCameraPosition;
//La c醡ara mira al modelo
m_Direction = ModelToFollow.Position - m_Position;
// Crear la matriz de vista
m_ViewMatrix = Matrix.CreateLookAt(
m_Position,
m_Position + m_Direction,
Vector3.Up);
}
else
{
// Establecer la matriz
m_ViewMatrix = m_ModelToFollow.CurrentViewMatrix;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -