Jump to content
Unity Insider Forum

Bewegen einer eigenen Figur durch "durchlässiges" Terrain


mawue

Recommended Posts

Werte Profis

Ich habe wahrscheinlich ein Anfängerproblem, sorry. Ich habe folgendes Script probiert, das einfach eine Capsule durch eine selbst gebaute Welt (terrain) führt.

Es klappt auch, nur kann ich durch die gezeichneten Berge "hindurchfahren".  Ich  verwende nicht einen Rigidbody für die Spielfigur, da ich ja die Klassen CharacterController verwende und alles selber steuern will. Auch das Zu- und Abschalten eines Capsule Collider löst das Problem nicht. 

Ich habe auch schon probiert, dem Terrain ein PhysicMaterial zuzuordnen, auch das nützt nichts.

Kann mir bitte jemand sagen, wie ich das hinbekomme, dass Berge, Trees usw. Hindernisse sind, bei denen ich nicht einfach durchsausen kann.

Hier noch mein Script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraControl : MonoBehaviour
{
    public float speed = 5.0f;
    private Vector3 moveVector = Vector3.zero;
    public float turn = 200.0f;
    private Vector3 turnVector = Vector3.zero;
    private CharacterController player;
    public float jump = 5.0f;
    public float gravity = 15.0f;


    void Start()
    {
        player = gameObject.GetComponent<CharacterController>();
    }

 
    void Update()
    {

        if (player.isGrounded)
        {

            moveVector.x = Input.GetAxis("Horizontal");

            moveVector.z = Input.GetAxis("Vertical");

            turnVector.y = Input.GetAxis("Mouse X");
            if (Input.GetButton("Jump"))
            {

                moveVector.y = jump;
            }
        }
        moveVector.y = moveVector.y - (gravity * Time.deltaTime);
        moveVector = transform.TransformDirection(moveVector);
        player.Move(moveVector * Time.deltaTime * speed);


        gameObject.GetComponent<Transform>().Rotate(turnVector * Time.deltaTime * turn);




    }
}

Danke für Eure Hilfe

Wueschn

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb TheOnlyOne:

Rigidbody brauchst du aber so oder so.

Das stimmt nicht. Ein CharacterController kann sich wunderbar bewegen und Kollision erkennen, ohne dass ein Rigidbody involviert wäre.

vor 3 Stunden schrieb mawue:

Auch das Zu- und Abschalten eines Capsule Collider löst das Problem nicht.

Ein CharacterController ist bereits ein CapsuleCollider :)

Um aber das Problem zu lösen. Da der Code soweit in Ordnung aussieht: Gehst du durch alle Collider durch oder nur durch das Terrain? Wenn du durch alles gehst, hast du ein allgemeines Problem, ansonsten stimmt etwas mit dem Terrain nicht. Da du dem Terrain schon ein Physic Material geben wolltest, hat das Terrain ja offenbar einen Collider. Ich nehme an, es handelt sich um ein normales Unity-Terrain, was wiederum heißt, dass du ausschließlich 3D-Physik benutzt. Hast du ansonsten noch andere Scripts auf deinem Player als dieses?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Sascha

Danke fürs Nachfragen. Das Problem habe ich nur mit dem Terrain. Das ist ein ganz normales 3D-Terrain, wie es standardmäßig von Unity angeboten wird. Ich habe lediglich aus dem Standard Asset darin ein Gras-Material draufgezeichnet und mit dem Raise-Werkzeug die Berge geformt. Und eben durch diese Berge "sause ich durch".Wenn ich andere Objekte einfüge, reagieren diese ganz normal auf ein Kollision. Ich habe das Problem also nur mit den Bergen des Terrains.

Ein 2. Skript habe ich auch noch, aber das schaltet nur von 1stMan auf 3thirdMan-Ansicht der Kamera.

Hier das Script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraSwitch : MonoBehaviour
{
    public Camera camera1st;
    public Camera camera3rd;
    public float look = 100.0f;
    private Vector3 lookVector = Vector3.zero;


    void Update()
    {
        if(Input.GetKey(KeyCode.A))
        {
            camera1st.enabled = true;
            camera3rd.enabled = false;
        }

        if (Input.GetKey(KeyCode.S))
        {
            camera1st.enabled = false;
            camera3rd.enabled = true;
        }

        lookVector.x = -Input.GetAxis("Mouse Y");
        camera1st.transform.Rotate(lookVector * Time.deltaTime * look);
        camera3rd.transform.Rotate(lookVector * Time.deltaTime * look);
    }
}

Jetzt habe ich aber aufgrund deiner Fragen gemerkt, dass ich das Problem mit dem "Terrain-Durchsausen" nicht mit der Spielfigur, sondern mit der KAMERA habe. In der 3rdMan-Ansicht (Kamera folgt dem Objekt) habe ich das Problem nicht. Schalte ich in die 1stMan-Ansicht, sause ich durch.

Ich vermute, ich habe hier ein Problem mit der Kamera. Was kann ich hier machen ....

Ich schicke noch einen Screenshot, der zeigt, dass ich 2 Kameras als Child des Spielobjekts genutzt habe.

 

Vielen Dank vorab

wueschn

moving1.JPG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ah, dann bleibt der CharacterController vermutlich brav oberhalb des Terrains. Ist aber interessant, dass das nicht bei der 3rd-Person-, sondern der 1st-Person-Ansicht passiert. Die 1st-Person-Kamera sollte i.d.R. innerhalb des CharacterControllers liegen und die Far Plane so nah sein, dass man damit nicht in Collider clipt, die den CC berühren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo nochmals

Ah, jetzt verstehe ich langsam die Logik.

Die 3rdPerson-Ansicht der ersten Kamera ist ein wenig oberhalb des Character Controlls des Objektes, die 1stPerson-Ansicht der zweiten Kamera genau innerhalb des Objektes, wobei man aufpassen muss, dass man innerhalb des Character Control-Colliders ist. Stimmt das so?

Ich meinem Fall habe ich kontrolliert, und meine 1stPerson Kamera war tatsächlich vor dem Character Control Element und dadurch ist die Kamera durch den Terrain gesaust (noch bevor der Character Control gekommen ist). Die 2. Kamera war hinter und oberhalb des Character Controlls (in Laufrichtung) und dadurch hat der Character Controll Collider gewirkt.

Klingt das logisch, was ich interpretiere?

Danke nochmals

wueschn

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 52 Minuten schrieb wueschn:

Die 3rdPerson-Ansicht der ersten Kamera ist ein wenig oberhalb des Character Controlls des Objektes, die 1stPerson-Ansicht der zweiten Kamera genau innerhalb des Objektes, wobei man aufpassen muss, dass man innerhalb des Character Control-Colliders ist. Stimmt das so?

Klingt gut.

vor 52 Minuten schrieb wueschn:

Klingt das logisch, was ich interpretiere?

Klingt ebenfalls sehr richtig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...