fixed strafing, added shooting effects, created a new testing level, enlarged enemies, updated bullet firing system
This commit is contained in:
@ -1,10 +1,14 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Unity.Burst.CompilerServices;
|
||||
using UnityEngine;
|
||||
|
||||
using UnityEngine.VFX;
|
||||
|
||||
public class PistolComponent : MonoBehaviour
|
||||
{
|
||||
|
||||
public enum AimMode {GUN,MODIFIED,CAMERA};
|
||||
public AimMode aimMode = AimMode.CAMERA;
|
||||
[SerializeField]
|
||||
private Light targetingLight;
|
||||
|
||||
@ -27,9 +31,17 @@ public class PistolComponent : MonoBehaviour
|
||||
private float maxProjectileDuration = 5f;
|
||||
[SerializeField]
|
||||
private float maxTargetObjDistance = 15f;
|
||||
|
||||
[SerializeField]
|
||||
private VisualEffect shootEffect;
|
||||
[SerializeField]
|
||||
private Light shootLight;
|
||||
[SerializeField]
|
||||
private float shootLightDuration = 0.1f;
|
||||
private float timeSinceLightDuration = 0f;
|
||||
|
||||
private bool hasCloseTarget = false;
|
||||
[SerializeField]
|
||||
private LayerMask ignoreLayers;
|
||||
|
||||
//private Dictionary<int,float> projectiles = new Dictionary<int, float>();
|
||||
|
||||
@ -42,7 +54,7 @@ public class PistolComponent : MonoBehaviour
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
timeSinceLightDuration += Time.deltaTime;
|
||||
}
|
||||
private float CalculateDrop(Vector3 origin,Vector3 destination,Vector3 force)
|
||||
{
|
||||
@ -61,12 +73,19 @@ public class PistolComponent : MonoBehaviour
|
||||
}
|
||||
private void FixedUpdate()
|
||||
{
|
||||
|
||||
if (this.IsEnabled)
|
||||
if (shootLight.gameObject.activeSelf&&timeSinceLightDuration>shootLightDuration)
|
||||
{
|
||||
shootLight.gameObject.SetActive(false);
|
||||
}
|
||||
if (aimMode==AimMode.CAMERA)
|
||||
{
|
||||
targetObject.gameObject.transform.position = PlayerAim.active.targetPosition;
|
||||
}
|
||||
if (this.IsEnabled&&aimMode!=AimMode.CAMERA)
|
||||
{
|
||||
Ray ray = new Ray(transform.position, transform.up);
|
||||
RaycastHit hit;
|
||||
if (Physics.Raycast(ray, out hit, 50))
|
||||
if (Physics.Raycast(ray, out hit, 50,ignoreLayers))
|
||||
{
|
||||
|
||||
float hitDist = Vector3.Distance(hit.point, transform.position);
|
||||
@ -101,15 +120,17 @@ public class PistolComponent : MonoBehaviour
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
public void Fire()
|
||||
{
|
||||
Fire(!hasCloseTarget);
|
||||
}
|
||||
|
||||
public void Fire(bool offsetWithTargetBall)
|
||||
{
|
||||
|
||||
shootLightDuration = 0;
|
||||
shootLight.gameObject.SetActive(true);
|
||||
GameObject projectile = Instantiate(projectilePrefab, this.bulletSpawnPoint);
|
||||
projectile.transform.localPosition = Vector3.zero;
|
||||
projectile.transform.localEulerAngles = Vector3.zero;
|
||||
@ -123,22 +144,32 @@ public class PistolComponent : MonoBehaviour
|
||||
*/
|
||||
Vector3 launchVector = pRigid.transform.up * this.firePower;
|
||||
|
||||
if(offsetWithTargetBall)
|
||||
if(offsetWithTargetBall||aimMode==AimMode.MODIFIED)
|
||||
{
|
||||
Vector3 ballCamVector = targetObject.transform.position - this.GetComponentInParent<PlayerMovementController>().cam.transform.position;
|
||||
Ray r = new Ray();
|
||||
r.origin = targetObject.transform.position;
|
||||
r.direction = ballCamVector.normalized;
|
||||
RaycastHit hit;
|
||||
if (Physics.Raycast(r,out hit))
|
||||
if (Physics.Raycast(r,out hit,ignoreLayers))
|
||||
{
|
||||
launchVector = (hit.point - pRigid.transform.position).normalized;
|
||||
launchVector *= this.firePower;
|
||||
}
|
||||
}
|
||||
else if(aimMode==AimMode.CAMERA)
|
||||
{
|
||||
Vector3 target = PlayerAim.active.targetPosition;
|
||||
|
||||
Vector3 lv = target - pRigid.transform.position;
|
||||
launchVector = lv.normalized;
|
||||
launchVector*= this.firePower;
|
||||
|
||||
}
|
||||
|
||||
pRigid.AddForce(launchVector, ForceMode.Impulse);
|
||||
projectile.transform.parent = null;
|
||||
shootEffect.Play();
|
||||
|
||||
|
||||
|
||||
@ -160,6 +191,7 @@ public class PistolComponent : MonoBehaviour
|
||||
Destroy(targetObject);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void LightToggle() {
|
||||
this.targetingLight.gameObject.SetActive(!this.targetingLight.gameObject.activeSelf);
|
||||
|
@ -5,6 +5,7 @@ using Cinemachine;
|
||||
|
||||
public class CameraShift : MonoBehaviour
|
||||
{
|
||||
public static CameraShift active;
|
||||
[SerializeField]
|
||||
private Camera childCam;
|
||||
[SerializeField]
|
||||
@ -44,6 +45,7 @@ public class CameraShift : MonoBehaviour
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
active = this;
|
||||
if (isCenter)
|
||||
{
|
||||
targetOffset= Vector3.zero;
|
||||
|
28
Assets/Scripts/Player/PlayerAim.cs
Normal file
28
Assets/Scripts/Player/PlayerAim.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class PlayerAim : MonoBehaviour
|
||||
{
|
||||
public static PlayerAim active;
|
||||
public Vector3 targetPosition;
|
||||
private Camera cam;
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
active = this;
|
||||
cam = GetComponent<Camera>();
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
Ray r = new Ray(cam.transform.position,cam.transform.forward);
|
||||
RaycastHit hit;
|
||||
if(Physics.Raycast(r,out hit))
|
||||
{
|
||||
targetPosition = hit.point;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
11
Assets/Scripts/Player/PlayerAim.cs.meta
Normal file
11
Assets/Scripts/Player/PlayerAim.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d0634141320a06b4f94b506dbed94499
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -31,7 +31,28 @@ public class PlayerAnimationController : MonoBehaviour
|
||||
{
|
||||
animController.SetFloat(runningSpeedParameter, movement.magnitude);
|
||||
animController.SetBool(runningParameter,isMoving);
|
||||
//animController.SetFloat(sideStepSpeedParameter, movement.x);
|
||||
|
||||
if (this.movement.IsAiming)
|
||||
{
|
||||
|
||||
animController.SetFloat("StrafingSpeed", movement.x);
|
||||
float dir = 0;
|
||||
if (movement.x > 0)
|
||||
{
|
||||
dir = 1;
|
||||
}else if (movement.x < 0)
|
||||
{
|
||||
dir = -1;
|
||||
}
|
||||
animController.SetFloat("StrafingDirection", dir);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
animController.SetFloat("StrafingSpeed", 0);
|
||||
animController.SetFloat("StrafingDirection", 1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
public void Animate(PlayerQuickAnimationType animation)
|
||||
@ -64,7 +85,7 @@ public class PlayerAnimationController : MonoBehaviour
|
||||
{
|
||||
animController.SetBool("IsCarrying", interactionHandler.IsCarrying);
|
||||
animController.SetBool("HasGun",interactionHandler.GunEnabled);
|
||||
|
||||
|
||||
if (interactionHandler.GunEnabled&&!interactionHandler.isDead&&movement.AllowRotation)
|
||||
{
|
||||
|
||||
|
@ -249,7 +249,16 @@ public class PlayerInteractionHandler : MonoBehaviour
|
||||
this.DisableFlashlight();
|
||||
|
||||
float aimAxis = Input.GetAxis("Aim");
|
||||
|
||||
|
||||
if (aimAxis > 0.5f)
|
||||
{
|
||||
pistol.aimMode = PistolComponent.AimMode.CAMERA;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
pistol.aimMode = PistolComponent.AimMode.MODIFIED;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
|
@ -34,6 +34,8 @@ public class PlayerMovementController : MonoBehaviour
|
||||
|
||||
[HideInInspector]
|
||||
public bool AllowRotation = false;
|
||||
[HideInInspector]
|
||||
public bool IsAiming = false;
|
||||
|
||||
[SerializeField]
|
||||
private NoiseVisibilitySettingsManager noiseSettings;
|
||||
@ -80,9 +82,15 @@ public class PlayerMovementController : MonoBehaviour
|
||||
movement += cam.transform.forward *y * Time.deltaTime * speed;
|
||||
|
||||
//movement += transform.forward * Mathf.Abs(x) * Time.deltaTime * speed;
|
||||
movement += cam.transform.right * x * Time.deltaTime*speed;
|
||||
|
||||
movement += Vector3.down * 9.8f;
|
||||
if (!IsAiming)
|
||||
movement += cam.transform.right * x * Time.deltaTime * speed;
|
||||
else
|
||||
movement += cam.transform.right * x * Time.deltaTime * sideSpeed;
|
||||
|
||||
|
||||
|
||||
movement += Vector3.down*Time.deltaTime*9.8f;
|
||||
ccontroller.Move(movement);
|
||||
}
|
||||
|
||||
@ -110,21 +118,23 @@ public class PlayerMovementController : MonoBehaviour
|
||||
void Update()
|
||||
{
|
||||
if(isDead) return;
|
||||
AllowRotation = Input.GetMouseButton(1) || Input.GetAxis("Aim")>0.5f||IsRunning;
|
||||
AllowRotation = IsAiming||IsRunning;
|
||||
IsAiming = Input.GetMouseButton(1) || Input.GetAxis("Aim") > 0.5f;
|
||||
GetMovementOld();
|
||||
MovePlayer();
|
||||
|
||||
animcontroller.Animate(new Vector2(x, y), false,isRunning);
|
||||
|
||||
this.lookingDirectionVector = ((cameraController.Forward * y) + cameraController.Right * x).normalized;
|
||||
if (isRunning && !Input.GetMouseButtonDown(1)||AllowRotation)
|
||||
if (isRunning && !Input.GetMouseButtonDown(1) || AllowRotation)
|
||||
{
|
||||
if (AllowRotation && x == 0 && y == 0)
|
||||
if (AllowRotation && x == 0 && y == 0 || IsAiming && PlayerInteractionHandler.instance.GunEnabled)
|
||||
{
|
||||
this.lookingDirectionVector = cameraController.Forward.normalized;
|
||||
|
||||
}
|
||||
|
||||
SlowLookAt(this.lookingDirectionVector);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -146,6 +156,7 @@ public class PlayerMovementController : MonoBehaviour
|
||||
transform.rotation = Quaternion.Lerp(transform.rotation, toRotation, animatedRotationSpeed * Time.deltaTime);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void PhysicalForceMove(Vector3 vector)
|
||||
{
|
||||
|
Reference in New Issue
Block a user