Unity – die besten Beiträge

Kamera Movement in Unity?

Hallo,

ich bin relativ neu in Unity und bin gerade dabei, eine Szene zu erstellen, wobei man die Kamera, wenn man die rechte Maustaste gedrückt hält, verschieben kann.

Die Szene ist isotropisch, weshalb die Kamera auch orthographisch ist.

[SerializeField] private Camera cam;
private Vector3 dragOrigin = Vector3.zero;
public float speed = 10;
    
void Update(){
    if(Input.GetMouseButtonDown(1)){
        dragOrigin = cam.ScreenToWorldPoint(Input.mousePosition);
    }
    if(Input.GetMouseButton(1)){
        Vector3 difference = cam.ScreenToWorldPoint(Input.mousePosition) - cam.transform.position;
        Vector3 targetPosition = dragOrigin - difference;
            
        cam.transform.position = Vector3.Lerp(cam.transform.position, targetPosition, speed * Time.deltaTime);
    }
}

Das funktioniert eigentlich auch, nur gibt es das Problem, dass sich der y-Wert der Kamera auch ändert. Die sollte immer auf dem gleichen y-Wert bleiben.

Wenn ich

targetPosition.y = cam.transform.position.y;

schreibe, bleibt zwar die Kamera auf der gleichen y-Position, aber die Kamera verschiebt sich nach oben und unten langsamer.

Wie kann ich den Code umschreiben, dass sich bei der Kamera nur die x-/ und z-Position ändert und das Verschieben in allen Richtungen gleich schnell geht?

Danke im Voraus.

Software, Kamera, programmieren, C Sharp, Visual Studio, Unity, Game-Developement

Unity Character Controller verbuggt?

Hey Leute,

ich habe mir gerade dieses:

(44) Basic Third Person Character Controller in Unity - Unity C# Tutorial 2022 - YouTube

Tutoral für third person controller angeschaut. Nach programmierung der Scripts habe ich aber zwei Bugs:

Mein Character "slided" weiter über den Boden auch wenn ich aufhöre w zu drücken. Man kann sich das vorstellen wie auf einer Eisbahn.

Obwohl ich eine Rigidbody eingefügt habe, fällt der Character nicht auf den Boden! Mein leicht abgeänderter Code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
  public Animator playerAnim;
  public Rigidbody playerRigid;
  public float w_speed, wb_speed, olw_speed, rn_speed, ro_speed;
  public bool walking;
  public Transform playerTrans;
  void FixedUpdate()
  {
    if (Input.GetKey(KeyCode.W))
    {
      playerRigid.velocity = transform.forward * w_speed * Time.deltaTime;
    }
    if (Input.GetKey(KeyCode.S))
    {
      playerRigid.velocity = -transform.forward * wb_speed * Time.deltaTime;
    }
  }
  void Update()
  {
    if (Input.GetKeyDown(KeyCode.W))
    {
       playerAnim.SetTrigger("walk");
       playerAnim.ResetTrigger("idle");
       walking = true;
       //steps1.SetActive(true);
    }
    
    if (Input.GetKeyUp(KeyCode.W))
    {
      playerAnim.ResetTrigger("walk");
      playerAnim.SetTrigger("idle");
      walking = false;
  //steps1.SetActive(false);
    }
    
    if (Input.GetKeyDown(KeyCode.S))
    {
      playerAnim.SetTrigger("walk");
      playerAnim.ResetTrigger("idle");
      walking = true;
    }
    
    if (Input.GetKeyUp(KeyCode.S))
    {
      playerAnim.ResetTrigger("walk");
      playerAnim.SetTrigger("idle");
      walking = false;
    }
    
    if (Input.GetKey(KeyCode.A))
    {
      playerTrans.Rotate(0, -ro_speed * Time.deltaTime, 0);
    }
    
    if (Input.GetKey(KeyCode.D))
    {
      playerTrans.Rotate(0, ro_speed * Time.deltaTime, 0);
    }
  }
}

Danke für alle Antworten

Computer, programmieren, Unity, Spiele und Gaming

Meistgelesene Beiträge zum Thema Unity