- Home /
Question by
ShiNoKitsune · Nov 09, 2017 at 04:28 PM ·
cameraraycastthird-person
How to raycast camera 3rd Person?
Guys, help me plz how go I creat a raycast to the cameraHolder, to Camera... So when camera touch on some place goes foward and get back in place if is not....
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace SA
{
public class CameraManager : MonoBehaviour
{
public bool lockOn;
public float followSpeed = 9;
public float mouseSpeed = 2;
public Transform target;
public EnemyTargget lockonTarget;
public Transform lockonTransfrom;
[HideInInspector]
public Transform pivot;
[HideInInspector]
public Transform camTrans;
StateManager states;
float turnSmothing = 0.1f;
public float minAngle = -35;
public float maxAngle = 85;
float SmoothX;
float SmoothY;
float SmoothXvelocity;
float SmoothYvelocity;
public float lookAngle;
public float tiltAngle;
void Start ()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
public void Init (StateManager st)
{
states = st;
target = st.transform;
camTrans = Camera.main.transform;
pivot = camTrans.parent;
}
public void Tick (float d)
{
float h = Input.GetAxis ("Mouse X");
float v = Input.GetAxis ("Mouse Y");
float targetSpeed = mouseSpeed;
if (lockonTransfrom != null) {
if (lockonTransfrom == null) {
lockonTransfrom = lockonTarget.GetTarget ();
states.lockonTransform = lockonTransfrom;
}
}
FollowTarget (d);
HandleRotations (d, h, v, targetSpeed);
}
void FollowTarget (float d)
{
float speed = followSpeed * d;
Vector3 targgetPosition = Vector3.Lerp (transform.position, target.position, speed);
transform.position = target.position;
}
void HandleRotations (float d, float h, float v, float targetSpeed)
{
if (turnSmothing > 0) {
SmoothX = Mathf.SmoothDamp (SmoothX, h, ref SmoothXvelocity, turnSmothing);
SmoothY = Mathf.SmoothDamp (SmoothY, v, ref SmoothYvelocity, turnSmothing);
} else {
SmoothX = h;
SmoothY = v;
}
tiltAngle -= SmoothY * targetSpeed;
tiltAngle = Mathf.Clamp (tiltAngle, minAngle, maxAngle);
pivot.localRotation = Quaternion.Euler (tiltAngle, 0, 0);
if (lockOn && lockonTarget != null) {
Vector3 targetDir = lockonTransfrom.position - transform.position;
targetDir.Normalize ();
if (targetDir == Vector3.zero) {
targetDir = transform.forward;
}
Quaternion targetRot = Quaternion.LookRotation (targetDir);
transform.rotation = Quaternion.Slerp (transform.rotation, targetRot, d * 9);
lookAngle = transform.eulerAngles.y;
return;
}
lookAngle += SmoothX * targetSpeed;
transform.rotation = Quaternion.Euler (0, lookAngle, 0);
}
public static CameraManager Singleton;
void Awake ()
{
Singleton = this;
}
}
}
][1]
Comment
The CameraHolder is in the same Cords as the player! And the script is on CameraHolder
Your answer
Follow this Question
Related Questions
Getting camera to not see under the ground 3 Answers
Unity C# - RaycastHit internal error? 1 Answer
Camera raycast and rotated collider 0 Answers
3rd person camera that avoids objects 0 Answers
Raycast Object Selection 3 Answers