Skulderkanon

3D GameKit # 5

I Unity3D gamekittet findes der en model for et våben. Vi kan gøre det muligt at skyde i spillet ved at bruge nogle af disse præfabrikerede gestande, samt kode lidt selv og lave noget opsætning.

Jeg har baseret dette på en fuld video fra en engelsk talende ungarer der laver en pistol feature
https://www.youtube.com/watch?v=0yCdnExn1pY

Vi starter med at ændre Playerinput.cs

using UnityEngine.Events;
...
    public UnityEvent OnAimActivate;
    public UnityEvent OnAimInactivate;
...
    protected bool m_Aim;
...
 public bool Aim {
   get { return m_Aim && !playerControllerInputBlocked && !m_ExternalInputBlocked; }
}
...

void Update() {
    bool tempAim = m_Aim;
    m_Aim = Input.GetButton("Fire2");
    if(m_Aim != tempAim) {
        if(m_Aim) OnAimActivate.Invoke();
        else OnAimInactivate.Invoke();
    }
    ...
}

Zoom når du sigter

Vi tilføjer et nyt script

CameraAim.cs

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

public class CameraAim : CinemachineExtension {

	public Vector3 Offset;

	protected override void PostPipelineStageCallback(CinemachineVirtualCameraBase vcam, CinemachineCore.Stage stage, ref CameraState state, float deltaTime) {
		if (stage == CinemachineCore.Stage.Aim) {
			state.PositionCorrection += state.FinalOrientation * Offset;
		}
	}
}

Tilføj dette script til KeyboardAndMouseFreeLook objektets komponent “Cinemachine Free Look” extension og disable det. Giv det en offset på 0.16 X og 3.08 Z

Derefter tilføj til CameraSettings.cs

public void ToggleAim(bool b) {
   var aim = Current.GetComponent<CameraAim>();
   aim.enabled = b;
}

Vælg derefter Playerinput komponentet i spillet og tilføj CameraSettings ToggleAim funktionen til OnAimActivate og OnAimDeactive med true og false bools parametre

Sigtekorn

Vi tilføje et canvas objekt i vores hierarki samt et image objekt under canvas’et.

Hent dette billede https://www.clipartmax.com/download/m2H7K9i8m2A0d3A0_crosshair-aim-shoot-target-goal-hit-comments-crosshairs-vector/ Læg det ind i projektet Så på billedet vælger du texturetype UI and Sprite, trykker apply og sætter det på Source i det Image objekt vi havde lavet

Derefter tilføjer vi vores image objekt til Player input activate funktioner hvor vi vælger GameObject SetActive til og fra (med og uden flueben)

Hvis du sigter nu(højreklik) så bliver dit sigtekorn billede slået til

Skyd med pistolen

Derefter finder vi PistolRoot på Ellen og tilføjer RangeWeapon Pistol objektet aktiverer vi og fjerner vi de 2 scripts der er og sætter dens Rotation og Position til 0 Vi sætter PistolRoot under Ellen_UpperChest og dens position til -0.2, 0.1, 0. Dens Rotation skal være 90, -80, 0 RangeWeapon muzzle offset sætter vi til 0.18, 0.06, -0.03

I PlayerController

public RangeWeapon rangedWeapon;
...
if (m_Input.Attack && canAttack) 
    rangedWeapon.Attack(rangedWeapon.transform.right * 10);
    //m_Animator.SetTrigger(m_HashMeleeAttack);

I PlayerControllerEditor.cs

...
        SerializedProperty m_MeleeWeaponProp;
        SerializedProperty m_RangedWeaponProp;
...
        GUIContent m_MeleeWeaponContent = new GUIContent("Melee Weapon", "Used for damaging enemies when Ellen swings her staff.");
        GUIContent m_RangedWeaponContent = new GUIContent("Ranged Weapon", "Used for damaging enemies when Ellen shoots her gun.");
...
            m_MeleeWeaponProp = serializedObject.FindProperty("meleeWeapon");
            m_RangedWeaponProp = serializedObject.FindProperty("rangedWeapon");
...
                EditorGUILayout.PropertyField(m_MeleeWeaponProp, m_MeleeWeaponContent);
                EditorGUILayout.PropertyField(m_RangedWeaponProp, m_RangedWeaponContent);
                EditorGUILayout.PropertyField(m_CameraSettingsProp, m_CameraSettingsContent);
...

Sæt pistol root som ranged weapon

Nu skal vi finde EnergyGrenade prefabbet og lægge det i vores Scene hvor vi omdøber den til PistolProjectile og giver den scale 0.17,0.17,0.17 Så fjerner vi Grenadier scriptet og sætter Spit script på i stedet. Shot type sættes til MOST_DIRECT Projectile Speed 50 Damage amount 1 Damage Mask Enemy Explosion Radius 1 Explosion Timer -1 Vælg VFX -> Weapons -> HitParticle som Explosion VFX

Fjern Sphere collider fra PistolProjectile barn Sphere Men smid en sphere collider på pistol projectile med radius 0.17 Fjern Audio Reset Position

Lav Pistol Projectile til en Prefab