Ru/Camera Bob: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
m (Removed unnecessary credits.)
(Обновил работу кода, чтобы та зависела от осей XYZ.)
Line 5: Line 5:
}}
}}


Этот туториал научит вас основам создания реалистичной камеры, когда игрок ходит/бегает. Результатом является довольно реалистичная симуляция качки головы игрока, которая подходит под стандартную скорость ходьбы игрока и звукам. Этот туториал был тестирован только на мултиплеере Orange Box и бета-версии OB SDK, но этот код должен работать почти на каждой версии программного кода Valve. Большое спасибо [http://forums.steampowered.com/forums/member.php?u=562817 sharkkk] и [http://forums.steampowered.com/forums/member.php?u=380894 Winston] с форумов Steam за их коды.
Этот туториал научит вас основам создания реалистичной камеры, когда игрок ходит/бегает. Результатом является довольно реалистичная симуляция качки головы игрока, ''которая подходит под стандартную скорость ходьбы игрока и звукам''. '''Не очень-то и подходит''', нужна более тонкая настройка по осям '''XYZ''', а то выглядит так, будто у игрока голова на резинке.
 
Большое спасибо [http://forums.steampowered.com/forums/member.php?u=562817 sharkkk] и [http://forums.steampowered.com/forums/member.php?u=380894 Winston] с форумов Steam за их коды. Жаль форум старый уже мертв.
Источники:
Комментарий с дополнениями от [https://developer.valvesoftware.com/wiki/User:EclipseTheory EclipseTheory]:
[http://forums.steampowered.com/forums/showthread.php?t=862508#11 код Sharkkk'а]
Этот код работает в любой версии движка. 2007, OB, 2013. SP/MP.  
[http://forums.steampowered.com/forums/showthread.php?t=706707#3 код Winston'а]
Собственно, обновлённый код ниже:


== Код ==
== Код ==
Line 15: Line 15:
<source lang="cpp">
<source lang="cpp">
// Camera Bob
// Camera Bob
ConVar cl_viewbob_enabled ( "cl_viewbob_enabled", "1", 0, "Oscillation Toggle", true, 0, true, 1 );
ConVar cl_viewbob_enabled("cl_viewbob_enabled", "0", 0, "Oscillation Toggle", true, 0, true, 1);
ConVar cl_viewbob_timer ( "cl_viewbob_timer", "10", 0, "Speed of Oscillation");
ConVar cl_viewbob_timer("cl_viewbob_timer", "10", 0, "Speed of Oscillation");
ConVar cl_viewbob_scale ( "cl_viewbob_scale", "0.05", 0, "Magnitude of Oscillation");
ConVar cl_viewbob_scale_x("cl_viewbob_scale_x", "0.015", 0, "Magnitude of Oscillation");
ConVar ​cl_viewbob_scale_y("cl_viewbob_scale_y", "0.01", 0, "Magnitude of Oscillation");
ConVar cl_viewbob_scale_z("cl_viewbob_scale_z", "0.05", 0, "Magnitude of Oscillation");
</source>
</source>


Мы добавили консольные команды для включения/отключения, контроля скорости и силы качки.
Мы добавили консольные команды для включения/отключения, контроля скорости и силы качки, которая тонко регулируется по осям XYZ.


В этом же файле, найдите функцию void ''CGameMovement::WalkMove( void )'' и добавьте в самый вверх следующий код:
В этом же файле, найдите функцию void ''CGameMovement::WalkMove( void )'' и добавьте в самый вверх следующий код:
<source lang="cpp">
<source lang="cpp">
if ( cl_viewbob_enabled.GetInt() == 1 && !engine->IsPaused() )
//view bob code
if (cl_viewbob_enabled.GetInt() == 1 && !engine->IsPaused())
{
{
float xoffset = sin( gpGlobals->curtime * cl_viewbob_timer.GetFloat() ) * player->GetAbsVelocity().Length() * cl_viewbob_scale.GetFloat() / 100;
float xoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_x.GetFloat() / 400;
float yoffset = sin( 2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat() ) * player->GetAbsVelocity().Length() * cl_viewbob_scale.GetFloat() / 400;
float yoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * ​cl_viewbob_scale_y.GetFloat() / 400;
player->ViewPunch( QAngle( xoffset, yoffset, 0));
float zoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_z.GetFloat() / 400;
 
player->ViewPunch(QAngle(xoffset, yoffset, zoffset));
}
}
//end view bob code
</source>
</source>


Вот это и добавит качку, которая будет вычислять скорость игрока и собственно применят ее.
Вот это и добавит качку, которая будет вычислять скорость игрока и собственно применят ее.  


[[Category:Programming:ru]]
[[Category:Programming:ru]]
[[Category:Tutorials:ru]]
[[Category:Tutorials:ru]]

Revision as of 11:02, 6 May 2021

Template:Otherlang2

Этот туториал научит вас основам создания реалистичной камеры, когда игрок ходит/бегает. Результатом является довольно реалистичная симуляция качки головы игрока, которая подходит под стандартную скорость ходьбы игрока и звукам. Не очень-то и подходит, нужна более тонкая настройка по осям XYZ, а то выглядит так, будто у игрока голова на резинке. Большое спасибо sharkkk и Winston с форумов Steam за их коды. Жаль форум старый уже мертв. Комментарий с дополнениями от EclipseTheory: Этот код работает в любой версии движка. 2007, OB, 2013. SP/MP. Собственно, обновлённый код ниже:

Код

В gamemovement.cpp, перед списком определений, около строки 65 добавьте:

// Camera Bob
ConVar cl_viewbob_enabled("cl_viewbob_enabled", "0", 0, "Oscillation Toggle", true, 0, true, 1);
ConVar cl_viewbob_timer("cl_viewbob_timer", "10", 0, "Speed of Oscillation");
ConVar cl_viewbob_scale_x("cl_viewbob_scale_x", "0.015", 0, "Magnitude of Oscillation");
ConVar cl_viewbob_scale_y("cl_viewbob_scale_y", "0.01", 0, "Magnitude of Oscillation");
ConVar cl_viewbob_scale_z("cl_viewbob_scale_z", "0.05", 0, "Magnitude of Oscillation");

Мы добавили консольные команды для включения/отключения, контроля скорости и силы качки, которая тонко регулируется по осям XYZ.

В этом же файле, найдите функцию void CGameMovement::WalkMove( void ) и добавьте в самый вверх следующий код:

	//view bob code
	if (cl_viewbob_enabled.GetInt() == 1 && !engine->IsPaused())
	{
		float xoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_x.GetFloat() / 400;
		float yoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_y.GetFloat() / 400;
		float zoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_z.GetFloat() / 400;

		player->ViewPunch(QAngle(xoffset, yoffset, zoffset));
	}
	//end view bob code

Вот это и добавит качку, которая будет вычислять скорость игрока и собственно применят ее.