Очень надеюсь что про сваип в гугл вы тоже найдете, там вроде все просто.
А вот по инерции принцип подскажу.
По сути в таче(и в курсоре мышки) есть дельта
https://docs.unity3d.com/ScriptReference/Touch-del...
По сути - на сколько сместилась за кадр (если на апдеите считываете)
Так вот можно просто дельту, можно за несколько кадров усредненную (как кому больше нравится) - запомнить.
Вот эта запомненная дельта и будет мерой инертности) И по сути вам нужно просто продолжать на апдеите применять такую жу дельту к вращению и потихоньку её уменьшать (банально в том же апдеите множить на что то меньшее и близкое к единице, какие нибудь 0,97)
Собственно множитель и будет мерой инертности)
//////////
Vector2 position = UnifiedInput.position();
dLong = -position.x * longitudeSensivity;
dLat = position.y * latitudeSensivity;
velocity += new Vector2(dLat, dLong);
// Also implement tap controls
if (velocity.sqrMagnitude > boundary * boundary)
{
float dt = Time.deltaTime;
Vector2 prevVelocity = velocity;
velocity -= dt * damping * velocity;
if (Vector2.Dot(velocity, prevVelocity) <= 0)
velocity = Vector2.zero;
latitude += dt * velocity.x;
longitude += dt * velocity.y;
latitude = Mathf.Clamp(latitude, 0 + boundary, Mathf.PI - boundary);
longitude = Mathf.Repeat(longitude, 2 * Mathf.PI);
relativePosition = SphericalToCartesian(longitude, latitude, orbitRadius);
}
this.transform.position = this.realTarget.transform.position + this.relativePosition;
this.transform.LookAt(this.realTarget.transform);
///////
private Vector3 SphericalToCartesian(float longitude, float latitude, float radius)
{
float x = radius * Mathf.Sin(latitude) * Mathf.Cos(longitude);
float y = radius * Mathf.Cos(latitude);
float z = radius * Mathf.Sin(latitude) * Mathf.Sin(longitude);
return new Vector3(x, y, z);
}