NemProgrammering.dk logo

Post Processing

3D spiludvikling med Unity » Post Processing # 40
Denne video kræver medlemskab
Læs mere!
Post Processing
Inkluderet:
Livstidsadgang
40 videolektioner
7 timers undervisning
Stil spørgsmål
Kursusbevis

Information om denne video

Underviser: Christian 'Code' Skriver Kragegaard   Video: 11:09   Lektion nr. 40 af 40

Vi får spillet til at se lækkert ud ved at bruge nogle forskellige post processing effekter, såsom motion blur og bloom.

LILLE OPDATERING TIL POST PROCESSING

 

 

Hent dit kursusbevis

Du har nu været igennem en lang række videoer, og du har forhåbentlig lært en hel masse om 3D-spiludvikling i Unity, som du kan bruge til at lave dine egne spil eller i forbindelse med dit arbejde. Nedenfor kan du hente et kursusbevis, som du f.eks. kan vedlægge dit CV, når du søger job.

Kursusbeviset kan kun hentes, hvis du har købt og gennemført vores Unity3D kursus. Læs mere her

Spørgsmål og kommentarer

Kun medlemmer med adgang til dette kursus kan stille spørgsmål og kommentere. Bliv medlem her!

  • Vilmar S. siger:

    Hej Christian,
    Jeg har givet det et nyt forsøg, og har haft meget succes, men efter jeg har bygget spillet virker spawncontrolleren ikke, siden der ikke længere er et library, så de ved ikke hvor de skal hen, har du et forslag?

    1. Christian ". siger:

      Hej Vilmar
      Så vil det sige at din spawncontroller virker i editoren? Jeg ved ikke hvad du mener med at der ikke længere er et library :)
      Hvis det virker i Unity og ikke når du builder, så skal du prøve at opdatere din unity editor – har oplevet underlige build fejl i nogle bestemte unity versioner.
      Hilsen Code

  • Vilmar S. siger:

    Hej Christian.
    Jeg har et timings problem.
    Når jeg slår med min økse/hakke får jeg resuorce for tidelidt.
    Med andre ord træet/stenen forsvinder et sekund før øksen/hakken rammer.
    Jeg har prøvet nogle ting der giver mening i mit hovdet men virker ikke!
    Kan du hjælpe?

    Mvh. Vilmar

    1. Christian ". siger:

      Hej Vilmar
      Du kan jo prøve at tage et screenshot af koden hvor den laver det med timingen, det er nok bare en variable der skal ændres :)

      Hilsen Code

          1. Christian ". siger:

            Hej Vilmar
            Det er nok din animation som er langsommere. Når man trykker så vil den spille animationen og så sende et ray (en stråle) ud for at se hvad det rammer. Den vil altid ramme et træ eller sten med det samme og så spille animationen imens. Der er dog desværre ikke lige en nem måde hvorpå at jeg kan ændre din kode til at den får en forsinkelse i det, så skulle den være lavet på en anden måde :)

            Hilsen Code

            1. Vilmar S. siger:

              Hvad gør jeg så?

          2. Christian ". siger:

            Kan du sende mig det script du har? Så kan jeg måske rette det så du kan gøre det :)
            Hilsen Code

            1. Vilmar S. siger:

              Er det her godt nok

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

              public class WeaponsController : MonoBehaviour
              {

              public Animator AxeAnimator;
              public Animator PickaxeAnimator;
              public AudioSource PlaceAudio;
              public LayerMask TurretHitMask;
              public ResourceController ResourceControllerRef;

              public GameObject TurretPrefab;
              public Camera FPSCamera;

              private float _axeInterval = 2f;
              private float _pickaxeInterval = 1.21f;
              private int _selectedWeapon = 1;

              public GameObject WeaponAxe;
              public GameObject WeaponPickaxe;
              public GameObject WeaponPistol;
              public bool PistolEnabled = false;

              private Pistol _pistol;
              private bool _canPlaceTurret = false;

              // Start is called before the first frame update
              void Start()
              {

              _pistol = GetComponent();
              _pistol.enabled = false;

              }

              public void PlaceTurret()
              {
              _canPlaceTurret = true;
              }

              public void SetSelectedWeapon(int selectedWeapon)
              {
              _selectedWeapon = selectedWeapon;
              if (selectedWeapon == 3)
              {
              _pistol.enabled = true;
              }
              }

              // Update is called once per frame
              void Update()
              {

              if (Input.GetKeyDown(KeyCode.Alpha1))
              {
              _selectedWeapon = 1;
              _pistol.enabled = false;
              }

              else if (Input.GetKeyDown(KeyCode.Alpha2))
              {
              _selectedWeapon = 2;
              _pistol.enabled = false;
              }

              else if (Input.GetKeyDown(KeyCode.Alpha3))
              {
              if (PistolEnabled == true)
              {
              _selectedWeapon = 3;
              _pistol.enabled = true;
              }
              }

              if (_selectedWeapon == 1)
              {
              WeaponAxe.SetActive(true);
              WeaponPickaxe.SetActive(false);
              WeaponPistol.SetActive(false);

              if (_axeInterval > 2f)
              {
              if (Input.GetMouseButtonDown(0))
              {
              AxeAnimator.Play(“Axe_Swing”);
              _axeInterval = 0;

              RaycastHit hit;
              if (Physics.Raycast(transform.position, transform.forward, out hit, 10))
              {
              if (hit.transform.tag == “Tree”)
              {
              hit.transform.GetComponent().Hit();
              }
              }
              }
              }
              }
              else if (_selectedWeapon == 2)
              {
              WeaponAxe.SetActive(false);
              WeaponPickaxe.SetActive(true);
              WeaponPistol.SetActive(false);

              if (_pickaxeInterval > 1.21f)
              {
              if (Input.GetMouseButtonDown(0))
              {
              PickaxeAnimator.Play(“Pickaxe_Swing”);
              _pickaxeInterval = 0;

              RaycastHit hit;
              if (Physics.Raycast(transform.position, transform.forward, out hit, 10))
              {
              if (hit.transform.tag == “stone”)
              {
              hit.transform.GetComponent().Hit();
              }
              }
              }
              }
              }
              else if (_selectedWeapon == 3)
              {
              // pistol
              WeaponAxe.SetActive(false);
              WeaponPickaxe.SetActive(false);
              WeaponPistol.SetActive(true);
              PistolEnabled = true;
              }

              _axeInterval += Time.deltaTime;
              _pickaxeInterval += Time.deltaTime;

              if (_canPlaceTurret == true)
              {

              if (Input.GetKeyDown(KeyCode.T))
              {
              _canPlaceTurret = false;

              RaycastHit TerrainHit;
              if (Physics.Raycast(FPSCamera.transform.position, FPSCamera.transform.forward, out TerrainHit, 10, TurretHitMask))
              {
              GameObject SpawnedTurret = Instantiate(TurretPrefab) as GameObject;
              SpawnedTurret.transform.position = TerrainHit.point;
              SpawnedTurret.transform.forward = FPSCamera.transform.parent.transform.forward;
              PlaceAudio.Play();
              }
              }
              }
              }
              }
              ]
              det er koden jeg kan ikke sende filer så det her må være godt nok
              :)

          3. Christian ". siger:

            Prøv denne:
            https://pastebin.com/WEBuwXZV

            Jeg har gjort sådan at “StartCorouting(DelayAndThenHit());” kører når du slår.

            Du skal op i ” IEnumerator DelayAndThenHit()” oppe på linje 47 og så på linje 49 skal du ændre t til hvor meget delay der skal være.

            1. Vilmar S. siger:

              Hej Christian.

              Jeg er endelig motiveret til at gå i gang.
              Men så kopire jeg scriptet og det her sker . _ .
              https://imgur.com/a/nA0t9rk

    2. Christian ". siger:

      Hej Vilmar
      Jeg kan ikke svare videre på tråden længere nede så jeg håber du ser det her ang. https://imgur.com/a/nA0t9rk.

      Den fejl du har kan skyldes et mangle på en parentes ) eller krøllet parentes } prøv at tage et screenshot af koden i WeaponsController.

      Hilsen
      Code

      1. Vilmar S. siger:

        Hej Christian.

        Jeg havde set det men i scriptet så det udsom enetet manglede.
        Og der var flere fejl end linjer i scriptet(jeg er doven)

        1. Christian ". siger:

          Hej Vilmar

          Det tager også flere forsøg at blive en haj til programmering, så fortvivl ej hvis du ikke forstår det de første mange gange :) Jeg vil foreslå at du følger videoerne helt til punkt og prikke og lægger mærke til hvordan alt koden står i forhold til din egen.
          Hilsen
          Code

  • Vilmar S. siger:

    Hej Christian.
    Jeg har lavet en Pickaxe fordi det er lidt underligt at slå sten med en økse men når jeg slår så kommer fejlen
    “NullReferenceException: Object reference not set to an instance of an object
    ResourceController.AddResource (System.Int32 Amount, System.String Type) (at Assets/Scripts/ResourceController.cs:24)
    Resource.Hit () (at Assets/Scripts/Resource.cs:26)
    WeaponsController.Update () (at Assets/Scripts/WeaponsController.cs:119)”
    Jeg har også ændret tags til Tree og stone. jeg kikede i scriptet men jeg kunne ikke forstå hvad fejlen er.
    her er et screenshot

    https://photos.google.com/photo/AF1QipPQYoZdgzhu4lACWKPwWvpEAytvpDdIM0cp90Ll

    Hvis du skal have flere screenshots så sig til.

    Jeg håber du kan hjælpe :)

    1. Christian ". siger:

      Hej Vilmar
      Billedet kan jeg ikke set, prøv at se om det er et offentligt link eller upload på f.eks. imgur.com

      Men generelt er en NullReferenceException fordi den vil tilgå noget som den ikke kan få fat på. Måske mangler du at sætte noget i inspectoren eller så er det fordi du har ændret noget andet :)

      Hilsen Code

      1. Vilmar S. siger:

        Her er dit link
        https://imgur.com/a/gQ4Wz5r

        1. Christian ". siger:

          Når du tager screenshots må linjenummeret gerne komme med :)
          Har din ResourceController GameObject et ResourceController script på sig?

          1. Vilmar S. siger:

            Her kan alle se min fejl!
            https://imgur.com/a/YoSISfN
            Nu er det da fikset.

            1. Christian ". siger:

              Sådan :)