- 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
![](https://koobas.hobune.stream/wayback/20220612142620im_/https://answers.unity.com/themes/thub/images/avi.jpg)
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