Я пытаюсь получить 3D-модель, которую я внедрил в код Monogame (Xna 4.0), чтобы он постоянно находился в правом нижнем углу экрана, это пистолет - базовая модель пистолета, в нем нет ничего фантастического - не даже есть текстуры! Но я не могу понять это, я пробовал некоторые математики, чтобы заставить его остаться там, но проблема в том, что смещение X и Z, которое я установил, жестко запрограммировано, поэтому, когда игрок поворачивает камеру, в то время как пистолет вращается перед новым LookAt, реальная модель не перемещается, поэтому она очень быстро исчезает из виду.
Это был долгий путь для довольно бессмысленной трехмерной игры для курса A-Level (я полагаю, эквивалент старшей школы) по информатике, который я делаю в Monogame Xna, чтобы набрать эти оценки сложности, но я должен На последнем отрезке мне нужно, чтобы моя модель fbx сидела так, как будто игрок держит ее в правом нижнем углу экрана. Прямо сейчас, если он расположен в центре экрана, это не так заметно, однако, если я увеличу свое смещение по оси X или Z, чтобы расположить его там, где я хочу, когда вы начнете поворачивать камеру, она отстанет от камеры или войдет внутрь. массивный круг вокруг камеры, который разбивает погружение (несмотря на то, как глупо это звучит, это действительно меня раздражает).
После того, как простой способ не сработал, я попытался прикрепить его к BoundingBox, который используется текущей камерой: все еще оставил пробел, попробовал BoundingSphere, чтобы посмотреть, смогу ли я заставить его перемещаться по краю сферы и следовать играть таким образом: не повезло. Еще.
tl; dr Я пытался прикрепить пистолет к BoundingBox, BoundingSphere и обычному векторному позиционированию, но безуспешно.
if (pausedGame == false)
{
camera.UpdateCamera(gameTime);
if (carryingWeapon)
{
weapons[weaponToCarry].SetRotationMatrix(Matrix.CreateRotationX(camera.GetCameraRotation().X), Matrix.CreateRotationY(camera.GetCameraRotation().Y));
weapons[weaponToCarry].SetPosition(camera.weaponSlot.Center + camera.GetLookAtOffSet());
//Debug.WriteLine(weapons[weaponToCarry].Position);
//Debug.WriteLine(camera.Position);
}
CheckCollision();
AIMovement();
UpdateVisitedNodes(updatedNodes);
}
это было мое обновление для него, простая установка положения и поворота модели. «Weaplot.Centre» происходит из-за того, что я прямо сейчас остановился на использовании BoundingSphere, так что часть кода все еще там.
else if (_state == ItemState.Dynamic)
{
foreach (var mesh in model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.PreferPerPixelLighting = true;
effect.World = Matrix.CreateScale(SCALE, SCALE, SCALE) * rotationMatrix *
Matrix.CreateTranslation(position);
effect.View = view;
effect.Projection = projection;
}
mesh.Draw();
}
}
это мой розыгрыш настоящего предмета, ничего особенного.
Как вы можете себе представить, я хочу, чтобы он был заблокирован в правом нижнем углу усеченного конуса и перемещал его положение в соответствии с тем, куда смотрит сам игрок. Прямо сейчас позиционирование предмета действительно испорчено - любая концептуальная помощь приветствуется! Спасибо.