Figur bewegt sich nicht aber Kamera (Unity)?

Hallo zsm.

Ich habe folgendes Problem.

Ich bin gerade dabei eine Figur das Laufen beizubringen in Unity. Das Laufen Funktioniert aber das Bewegen/ herumschauen mit der Kamera funktioniert noch nicht ganz.

Wenn ich die Maus bewege sie sich die Kamer Ultra komisch aus und ich finde einfach das Problem nicht.

Die Anleitung habe ich von einem YouTube Video -> Unity Third-Person-Shooter Tutorial [Deutsch] #007 :: Kamera-Steuerung

Script ist das da hier.

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Laufen2 : MonoBehaviour

{

  public CharacterController cc;

  public GameObject player;

  public GameObject cam;

  public float speed;

  public float normalspeed;

  public float highspeed;

  public float gravity;

  private float MouseX;

  private float MouseY;

  private Vector3 movedir;

  void Start()

  {

    cc = GetComponent<CharacterController>();

  }

  // Update is called once per frame

  void Update()

  {

    MouseX = Input.GetAxis("Mouse X");

    MouseY = Input.GetAxis("Mouse Y");

    speed = normalspeed;

    if(cc.isGrounded)

    {

      movedir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

      movedir *= speed;

    }

    cam.transform.Rotate(0, 0, -MouseY * 3);

    player.transform.Rotate(0, MouseX * 3, 0);

    movedir.y -= gravity * Time.deltaTime;

    cc.Move(movedir * Time.deltaTime);

  }

}

Schönen Tag noch

Bild zum Beitrag
programmieren, Unity
First person movement in Unity?

Ich habe schon von allen möglichen Tutorials abgeschrieben aber es geht trotzdem nicht

Beim Start dreht sich die Kamera komplett random in alle möglichen Richtungen selbst wenn ich meine Maus nicht bewege

das ist der Code von der MainCamera:

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

public class CameraMovement : MonoBehaviour
{
    
    Vector3 rotation;
    public GameObject player;

    void Update()
    {

        transform.position = player.transform.position;
        transform.Translate(0, 0.5f, 0);

        rotation += Input.GetAxis("forwardBackwardRotate") * Vector3.right;
        rotation += Input.GetAxis("leftRightRotate") * Vector3.up;
        rotation *= 50 * Time.deltaTime;

        transform.Rotate(rotation);

    }

}

und das ist vom Player (falls es nötig ist) :

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

public class PlayerMovement : MonoBehaviour
{
    
    public int speed;
    Vector3 movement;
    Vector3 rotation;
    CharacterController player;

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

    }

    void Update()
    {

        movement += transform.right * Input.GetAxis("leftRightMove");
        movement += transform.forward * Input.GetAxis("forwardBackwardMove");
        movement *= speed * Time.deltaTime;
        player.Move(movement);

        rotation = Input.GetAxis("leftRightRotate") * Vector3.up;
        rotation *= 50 * Time.deltaTime;
        transform.Rotate(rotation);

    }

}

hier ist das Video: https://drive.google.com/file/d/16LzqYkn3ojHhpp6Aw-cWdq_sCp9kUsfq/view?usp=sharing

C Sharp, Unity, Unity Engine
Wie kann ich "Object reference not set to an instance of an object" beheben?

Hallo,

ich bin dabei, ein Spiel zu machen und bekomme die ganze Zeit den Fehler

Object reference not set to an instance of an object

bei dem Code.

using System;
using System.Collections.Generic;
using UnityEngine;
using Random = UnityEngine.Random;
using Object = UnityEngine.Object;

// Token: 0x02000007 RID: 7
public class LevelGeneration : MonoBehaviour
{
  // Token: 0x06000015 RID: 21 RVA: 0x0000246C File Offset: 0x0000066C
  private void Awake()
  {
    this.lastEndPosition = this.levelPart_Start.Find("EndPosition").position;
    int num = 5;
    
    for (int i = 0; i < num; i++)
    {
      this.spawnLevelPart();
    }
  }

  // Token: 0x06000016 RID: 22 RVA: 0x000024A8 File Offset: 0x000006A8
  private void Update()
  {
    if (Vector3.Distance(this.player.transform.position, this.lastEndPosition) < 200f)
    {
      this.spawnLevelPart();
    }
  }

  // Token: 0x06000017 RID: 23 RVA: 0x000024D4 File Offset: 0x000006D4
  private Transform SpawnLevelPart(Transform levelPart, Vector3 spawnPosition)
  {
    Transform transform = Object.Instantiate<Transform>(levelPart, spawnPosition, Quaternion.identity);
    this.putRight(transform);
    return transform;
  }

  // Token: 0x06000018 RID: 24 RVA: 0x000024F8 File Offset: 0x000006F8
  private void spawnLevelPart()
  {
    Transform levelPart = this.levelPartList[Random.Range(0, this.levelPartList.Count)];
    Transform transform = this.SpawnLevelPart(levelPart, this.lastEndPosition);
    this.lastEndPosition = transform.Find("EndPosition").position;
  }

  // Token: 0x06000019 RID: 25 RVA: 0x00002548 File Offset: 0x00000748
  private void putRight(Transform levelPart)
  {
    this.bottomPosition.y = levelPart.Find("bottom").position.y;
    this.topPosition.y = levelPart.Find("top").position.y;

    if (this.bottomPosition.y <= -10f)
    {
      levelPart.transform.position += new Vector3(0f, 3f, 0f);
    }

    if (this.topPosition.y >= 10f)
    {
      levelPart.transform.position -= new Vector3(0f, 3f, 0f);
    }
  }

  // Token: 0x04000013 RID: 19
  private const float PLAYER_DISTANCE_SPAWN_LEVEL_PART = 200f;

  // Token: 0x04000014 RID: 20
  [Header("Level Parts")]
  [SerializeField]
  private Transform levelPart_Start;

  // Token: 0x04000015 RID: 21
  [SerializeField]
  private List<Transform> levelPartList;  

  // Token: 0x04000016 RID: 22
  [Header("Objects")]
  [SerializeField]
  private GameObject player;

  // Token: 0x04000017 RID: 23
  private Vector3 lastEndPosition;

  // Token: 0x04000018 RID: 24
  private Vector3 bottomPosition;

  // Token: 0x04000019 RID: 25
  private Vector3 topPosition;
}

Ich danke jetzt schon für die Antworten. ^^

Computer, programmieren, C Sharp, Unity
Unity - Kann eine Funktion ausgelöst werden, sobald ein Variable Wert sich ändert?

Hallo.

ich habe in meinem spielt sehr viele Funktionen, die über public void update laufen, also jeden Frame ausgelöst werden. Zum Beispiel:

if (Leben == 0)

{
Destroy(gameObject);
}

Ich mache mir dabei ein wenig Sorgen, dass es es von der Leistung zu viel wird für das Gerät auf dem das Spiel läuft. Besonders, weil ich mir denke, dass es bei vielen Funktionen gar nicht nötig ist jeden Frame abgefragt zu werden, weil sie nur paar mal ausgelöst werden. Deshalb wollte ich mal fragen, ob es möglich ist, dass eine Funktion nur dann ausgelöst wird, sobald der Wert einer Variable sich verändert. Zum Beispiel soll Funktion a ausgelöst werden, sobald int Leben seinen Wert ändert z.B. von 10 auf 9. klar könnte ich den Wert abspeichern und sobald der aktuelle Wert nicht mehr den abgespeicherten Wert entspricht wird die Funktion dann ausgelöst, aber dann nutze ich ja auch wieder public void update um das abzufragen.
Wie machen das gewöhnlich die Profis? Lassen sie wirklich Funktionen wie diese jeden Frame abfragen? Bitte um Hilfe!

Und dazu würde mich auch interessieren, wie sehr belastet zum Beispiel das obige Beispiel die Leistung eines Geräts, wenn 100 Funktionen wie diese jeden Frame abgefragt werden? Gibt es ein Maß an den man sich richten sollte oder kann ein gewöhnliches Gerät sogar bedenkenlos viele solcher Funktionen per Frame mit Leichtigkeit abfragen?

Computer, Leistung, Unity

Meistgelesene Beiträge zum Thema Unity