Решил я сделать физику ручками, чтобы rigitbody не использовать, ну не суть.
Знаю, что в принципе можно сделать, чтобы совсем чуть-чуть отталкивать игрока, что зашёл в коллизию, однако, это не самый лучший метод. Мб чисто логично, у вас есть какие-то другие варианты, как это сделать.
В данный момент, я проверяю Raycast`ом очень маленькую дистанцию
Синтаксис:
Используется csharp
Cback = Physics.Raycast(_targett.transform.position, Vector3.back, out infoDist, Mathf.Abs(velocity.z) + skin_width+0.5f, triger_mask);
и, немного игрока отталкиваю, однако, проблема в логике, потому что должно быть ещё что-то, насколько я понимаю, до отталкивания.
Синтаксис:
Используется csharp
void Move()
{
x = Input.GetAxis("Horizontal");
z = Input.GetAxis("Vertical");
if ((Input.GetAxis("Horizontal") != 0) || (Input.GetAxis("Vertical") != 0))
{
if (!Cforward || !Cback)
{
velocity.z = z * mod_z;
}
if (!Cleft || !Cright)
{
velocity.x = x * mod_x;
}
}
//Need to fix later
if (Cforward )
{
velocity.z = (infoDist.distance - skin_width) * directionZ*mod_z;
if(Cforward && z > 0)
{
velocity.z = velocity.z * -skin_width * mod_z;
z = 0f;
}
}
}
{
x = Input.GetAxis("Horizontal");
z = Input.GetAxis("Vertical");
if ((Input.GetAxis("Horizontal") != 0) || (Input.GetAxis("Vertical") != 0))
{
if (!Cforward || !Cback)
{
velocity.z = z * mod_z;
}
if (!Cleft || !Cright)
{
velocity.x = x * mod_x;
}
}
//Need to fix later
if (Cforward )
{
velocity.z = (infoDist.distance - skin_width) * directionZ*mod_z;
if(Cforward && z > 0)
{
velocity.z = velocity.z * -skin_width * mod_z;
z = 0f;
}
}
}
(directionZ = это Mathf.Sign к значении velocity, а skin_width - это 0.0015f)
Просто проблема возникает из-за того, что оно очень сильно отталкивает, в самом начале входа в объект, и, при большой velocity, мы просто входим в объект немного, вот мб есть какой-то метод лучше?
Прошу прощения, если похожая тема была, но гугл молчит, или я просто гуглить не умею.