Autor Wątek: Unity - Dziury w Terenie i CharacterController  (Przeczytany 1800 razy)

Offline jerryharpman

  • Użytkownik

# Październik 09, 2015, 23:50:11
Męczę się dzisiaj z jedną rzeczą.
Unity domyślnie nie posiada możliwości wycięcia dziur w terenie ( np. wejście do jaskini w ziemi). Ale można to cwano obejść wstawiając na poziomie terenu jakiś obiekt, następnie nadając mu "depth shader" i zmieniając "renderer queue". Mam otwór w terenie i widze przez niego inne obiekty.
Jak do gracza dołączę rigidbody to ładnie spada przez ten otwór i zatrzymuje się na obiektach pod dziurą (Obiekt robiący dziurę jest Triggerem, wyłączającym kolizję między graczem a terenem przez Physics.IgnoreCollision).

Teraz zagwozdka: nie używam Rigidbody tylko CharacterControllera, a ten już nie spada tylko wisi na tej dziurze.Do grawitacji używam "Move".

Obsługa triggera
public class HoleTrigger : MonoBehaviour {

void OnTriggerEnter(Collider col)
{
if(col.tag=="Player")
{
Physics.IgnoreCollision(col,Terrain.activeTerrain.GetComponent<Collider>(),true);
                        Physics.IgnoreCollision(col,GetComponent<Collider>(),true);
}
}
}

Gracz
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");

controller.Move(transform.forward*v*speedMult);
controller.Move(transform.right*h*speedMult);
if(!controller.isGrounded)
   controller.Move(new Vector3(0,-0.35f,0));

Problem jest chyba w tym, że Move() i tak widzi kolizję. Da się jakoś to rozwiązać, żeby Move() ignorowało wybrane kolizje  ?
« Ostatnia zmiana: Październik 10, 2015, 01:00:26 wysłana przez jerryharpman »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline jerryharpman

  • Użytkownik

# Październik 10, 2015, 01:33:25
Yyyymmm, ok .
Problem w jakiś bliżej nieokreślony sposób się rozwiązał.
Przesunąłęm "trigerujący obiekt- dziurę" powyżej terenu i już wpada się i z góry i z boku wchodząc.
Potrafi to ktoś wyjaśnić ?
Chodziło o kolizję tej "dziury" z terenem ?