Nie wykrywa kolizji.

Programowanie w Unity.

Nie wykrywa kolizji.

Postprzez jaanonim » 12 Paź 2017, 13:13

Proszę o pomoc pisze grę typu FPS.

Gracz którym się chodzi po terenie to pusty game object posiadający chracter controller, colider-a i skrypt:
Kod: Zaznacz wszystko
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[RequireComponent(typeof(CapsuleCollider))]

public class gracz1 : MonoBehaviour
{

    Transform t;
   
    public float spead = 10.0f;
    public float wysokoscSkoku = 7.0f;
    public float aktualnaWysokoscSkoku = 0f;
    public CharacterController Controller;
    public float rochPrzodTyl = 0.0f;
    public float rochLewoPrawo = 0.0f;
    public float czuloscMyszki = 3.0f;
    public float myszGoraDol = 0.0f;
    public float zakresMyszyGoraDol = 90.0f;
    public float zakresMyszyLewoPrawo = 360.0f;
    public float myszLewoPrawo = 0.0f;
    public bool skok = true;
    //public bool test;

    // Use this for initialization
    void Start()
    {
        t = GetComponent<Transform>();

        Controller = GetComponent<CharacterController>();
        t.position = new Vector3(200, 52.5f, 200);
    }

    // Update is called once per frame
    void Update()
    {
        rochPrzodTyl = Input.GetAxis("Vertical") * spead;

        rochLewoPrawo = Input.GetAxis("Horizontal") * spead;

       

        if ( Input.GetButtonDown("Jump") && skok==true)
        {
                aktualnaWysokoscSkoku = wysokoscSkoku;
        }
        if(!skok)
        {
            aktualnaWysokoscSkoku += Physics.gravity.y * Time.deltaTime;
        }
        if(skok)
        {
            //aktualnaWysokoscSkoku = t.position.y * Time.deltaTime;
            aktualnaWysokoscSkoku = 0.0f;
        }

           

       
           ruch = new Vector3(rochLewoPrawo, aktualnaWysokoscSkoku, rochPrzodTyl);
       
   
        ruch = transform.rotation * ruch;
        t.position += ruch* Time.deltaTime;
       

        myszLewoPrawo += Input.GetAxis("Mouse X") * czuloscMyszki;
        myszGoraDol -= Input.GetAxis("Mouse Y") * czuloscMyszki;
        myszGoraDol = Mathf.Clamp(myszGoraDol, -zakresMyszyGoraDol, zakresMyszyGoraDol);
        t.localRotation = Quaternion.Euler(myszGoraDol, myszLewoPrawo, 0);

    }

    void OnCollisionEnter(Collision collision)
    {
        skok = true;
    }

   /* void OnCollisionStay(Collision collisionInfo)
    {
        // Tutaj kod wykonywany co klatkę, w czasie trwania kolizji
    }*/

    void OnCollisionExit(Collision collisionInfo)
    {
        skok = false;
    }
}

Problemem jest to, że skrypt nie wykrywa kolizji i zapada się pod ziemie :cry: .(Tak ogólnie to dopiero zaczynam użytkować Unity.)

W załączniku dodaje ten projekt.

Proszę o szybką pomoc i z góry dziękuje!
jaanonim
 
Posty: 5
Rejestracja: 12 Paź 2017, 12:37
Has thanked: 0 time
Been thanked: 0 time

Re: Nie wykrywa kolizji.

Postprzez MatteJ » 13 Paź 2017, 14:50

Czy dodałeś do obiektu swojego "gracza" komponent 'Rigidbody' ?
MatteJ
 
Posty: 4
Rejestracja: 13 Paź 2017, 14:09
Has thanked: 0 time
Been thanked: 0 time

Re: Nie wykrywa kolizji.

Postprzez Kaze47 » 13 Paź 2017, 15:01

Źle wykonujesz przesunięcie obiektu na którego działa fizyka. Do tego są inne metody dla Rigidbody, żeby fizyka działała. (Rigidbody.MovePosition)
Kaze47
 
Posty: 29
Rejestracja: 23 Sty 2017, 14:40
Has thanked: 0 time
Been thanked: 0 time

Re: Nie wykrywa kolizji.

Postprzez jaanonim » 13 Paź 2017, 20:42

W komponencie niema Rigidbody.
Ten komponent posiada tylko chracter controller, capsule collider i załączony skrypt.
jaanonim
 
Posty: 5
Rejestracja: 12 Paź 2017, 12:37
Has thanked: 0 time
Been thanked: 0 time

Re: Nie wykrywa kolizji.

Postprzez Palanthir » 13 Paź 2017, 21:00

A co jest terenem ?
Palanthir
 
Posty: 20
Rejestracja: 31 Sie 2017, 16:13
Has thanked: 0 time
Been thanked: 0 time

Re: Nie wykrywa kolizji.

Postprzez jaanonim » 14 Paź 2017, 07:26

Normalny obiekt trenu z odpowiednim colliderem.
jaanonim
 
Posty: 5
Rejestracja: 12 Paź 2017, 12:37
Has thanked: 0 time
Been thanked: 0 time

Re: Nie wykrywa kolizji.

Postprzez Marcin » 14 Paź 2017, 09:01

Sprawdź, czy collider obejmuje całą postać. W zasadzie CharacterController sam w sobie jest Colliderem o ile dobrze pamiętam.
Marcin
 
Posty: 270
Rejestracja: 25 Lip 2016, 10:44
Has thanked: 0 time
Been thanked: 0 time

Re: Nie wykrywa kolizji.

Postprzez jaanonim » 14 Paź 2017, 09:11

Ten obiekt nie ma kształtu realnego. Jest on porostu pustym obiektem.
jaanonim
 
Posty: 5
Rejestracja: 12 Paź 2017, 12:37
Has thanked: 0 time
Been thanked: 0 time

Re: Nie wykrywa kolizji.

Postprzez Ether_141 » 14 Paź 2017, 16:08

Możesz dodać collider bez względu na to czy to jest model czy zwykły obiekt. Po co w void Start ustawiasz pozycję gracza?
Może ten obiekt wnika lekko w teren czy coś? Podnieś go na jakąś wysokość nad terenem
Ether_141
 
Posty: 152
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time

Re: Nie wykrywa kolizji.

Postprzez jaanonim » 14 Paź 2017, 16:24

Nie wnika nawet lekko w teren.
jaanonim
 
Posty: 5
Rejestracja: 12 Paź 2017, 12:37
Has thanked: 0 time
Been thanked: 0 time

Następna

Wróć do Skrypty

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 9 gości