- Home /
Question by
ddarwin1003 · Jul 27, 2018 at 05:48 PM ·
animationaimingaimdownsightsthird person shooter
TPS Aiming down sights problem
I'm creating a TPS and want to "combine" my ADS animation with my walk animation when I press mouse one. I figured out the zoom mechanic and now only need to figure out how to have the character lock onto the cross hair (so that if I press right while aiming, I strafe to the right) and how to walk while aiming down sights. How would one go about this?
.
Character Controller
.
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float walkSpeed = 2;
public float runSpeed = 6;
public float adsSpeed;
public float turnSmoothTime = 0.2f;
float turnSmoothVelocity;
public float speedSmoothTime = 0.1f;
float speedSmoothVelocity;
float currentSpeed;
Animator animator;
Transform cameraM;
Transform cameraTarget;
public bool isAiming = false;
void Start() {
animator = GetComponent<Animator>();
cameraM = Camera.main.transform;
}
void FixedUpdate() {
aiming();
movement();
}
void movement() {
Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
Vector2 inputDir = input.normalized;
float animationSpeedPercent = 1;
float targetSpeed;
if (inputDir != Vector2.zero) {
float targetRotation = Mathf.Atan2(inputDir.x, inputDir.y) * Mathf.Rad2Deg + cameraM.eulerAngles.y;
transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref turnSmoothVelocity, turnSmoothTime);
}
if (!isAiming) {
bool running = Input.GetKey(KeyCode.LeftShift) && !(Input.GetKey(KeyCode.Mouse1));
targetSpeed = ((running) ? runSpeed : walkSpeed) * inputDir.magnitude;
currentSpeed = Mathf.SmoothDamp(currentSpeed, targetSpeed, ref speedSmoothVelocity, speedSmoothTime);
transform.Translate(transform.forward * currentSpeed * Time.deltaTime, Space.World);
animationSpeedPercent = ((running)? 1 : .5f) * inputDir.magnitude;
} else if (isAiming) {
targetSpeed = adsSpeed * inputDir.magnitude;
currentSpeed = Mathf.SmoothDamp(currentSpeed, targetSpeed, ref speedSmoothVelocity, speedSmoothTime);
transform.Translate(transform.forward * currentSpeed * Time.deltaTime, Space.World);
animationSpeedPercent = .25f * inputDir.magnitude;
}
animator.SetFloat("speedPercent", animationSpeedPercent, speedSmoothTime, Time.deltaTime);
}
void aiming() {
if (Input.GetKey(KeyCode.Mouse1)) {
isAiming = true;
} else {
isAiming = false;
}
}
}
.
Camera Controller
.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent (typeof(PlayerController))]
public class ThirdPersonCamera : MonoBehaviour {
public bool lockCursor;
public float mouseSensitivity;
public Transform target;
public float distFromTargetForward = 2;
public float distFromTargetRight = 2;
public float distFromTargetUp = 2;
public Vector2 pitchMinMax = new Vector2(-40, 85);
public float rotationSmoothTime = .12f;
Vector3 rotationSmoothVelocity;
Vector3 currentRotation;
public PlayerController playerController;
float yaw;
float pitch;
void Start (){
if (lockCursor) {
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
}
void LateUpdate () {
yaw += Input.GetAxis("Mouse X") * mouseSensitivity;
pitch += Input.GetAxis("Mouse Y") * -mouseSensitivity;
pitch = Mathf.Clamp (pitch, pitchMinMax.x, pitchMinMax.y);
currentRotation = Vector3.SmoothDamp (currentRotation, new Vector3 (pitch, yaw), ref rotationSmoothVelocity, rotationSmoothTime);
transform.eulerAngles = currentRotation;
if (playerController.isAiming) {
distFromTargetRight = -.07f;
distFromTargetUp = .09f;
distFromTargetForward = .7f;
} else {
distFromTargetRight = 0;
distFromTargetUp = 0;
distFromTargetForward = 2;
}
transform.position = target.position - (transform.forward * distFromTargetForward) + (transform.right * distFromTargetRight) + (transform.up * distFromTargetUp);
}
}
Comment
Your answer
Follow this Question
Related Questions
How to move a characters arm when an animation is playing 3 Answers
Character wont stay aiming 0 Answers
Third Person Aiming 0 Answers
How could I cancel an animation smoothly? 1 Answer
enemy character gameobject not working as intended 0 Answers