• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

unity3d kolizja kamery

Object Storage Arubacloud
0 głosów
753 wizyt
pytanie zadane 8 października 2018 w OpenGL, Unity przez HitMan Użytkownik (850 p.)

Witam

Robię grę trzecioosobową i mam problem z kolizją kamery, rozwiązanie częściowo znalazłem:

using UnityEngine;
using System.Collections;


public class kamera : MonoBehaviour
{
    public float minDistance = 1.0f;
    public float maxDistance = 4.0f;
    public float smooth = 10.0f;
    Vector3 dollyDir;
    float distance;
    void Awake()
    {
        dollyDir = transform.localPosition.normalized;
        distance = transform.localPosition.magnitude;
    }
    void Update()
    {
        Vector3 desiredCameraPos = transform.parent.TransformPoint(dollyDir * maxDistance);
        RaycastHit hit;
        if (Physics.Linecast(transform.parent.position, desiredCameraPos, out hit))
        {
            distance = Mathf.Clamp(hit.distance, minDistance, maxDistance);
        }
        else
        {
            distance = maxDistance;
        }
        transform.localPosition = Vector3.Lerp(transform.localPosition, dollyDir * distance, Time.deltaTime * smooth);
    }
}

ale:

1) nie umiem dodać podnoszenia i opadania kamery(przesuwanie myszki góra, dół)

2)W trakcie chodzenia postacią do tyłu kamera zaczyna wariować(przysuwa się i oddala)

Hierarchia:Player->kamera,reszta

Jeżeli ktoś ma jakiś pomysł jak to naprawić, albo zupełnie nowy kod, jestem otwarty na propozycje.

1 odpowiedź

0 głosów
odpowiedź 27 października 2018 przez BlacKY Początkujący (350 p.)

Obracanie kamerą(Dodaj do update), a zmienną mouse sens tam gdzie masz resztę. .


public int MouseSens;

float mouseX=Input.GetAxis("MouseX") * MouseSens; //Jeśli nie chcesz mieć czułości to możesz wywalić tą zmienną
float mouseY=Input.GetAxis("MouseY") * MouseSens; //Jeśli nie chcesz mieć czułości to możesz wywalić tą zmienną
transform.Rotate(mouseX,mouseY,0F);//Jeśli kamera będzie ci uciekać w inne kierunki niż jest to założone to pozmieniaj kolejności zmiennych w Rotate

A jeśli chodzi o kolizję kamery to wystarczy, że dodasz pusty gameObject jako dziecko tej kamery, ustawisz odpowiedni rozmiar i dodasz kolizję

Podobne pytania

0 głosów
0 odpowiedzi 120 wizyt
pytanie zadane 11 lutego 2020 w OpenGL, Unity przez Alan Kruszyński Obywatel (1,410 p.)
0 głosów
0 odpowiedzi 729 wizyt
pytanie zadane 31 sierpnia 2018 w OpenGL, Unity przez NEFOS Początkujący (320 p.)
0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 14 sierpnia 2018 w OpenGL, Unity przez BuxBleed Użytkownik (810 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...