- Home /
Question by
iiirwnsyh · Sep 24, 2018 at 06:25 PM ·
cameracollisioncollision detectionthird-person
Camera Collision Didn't Work. Please Help me...
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ThirdPersonCam : MonoBehaviour {
[Header("Player to follow")]
public Transform target;
public float mouseSensitivity = 5;
public float dstFromTarget = 14; // 9 atau 15
//public float zoomSmooth = 100;
public float maxDistance = 15;
public float minDistance = 7;
public bool smoothFollow = true;
public float smooth = 5.0f;
public Vector2 pitchMinMax = new Vector2 (-40, 85); // maksimum and minimum pitch rotation
public bool lockCursor;
public float rotationSmoothTime = .12f;
Vector3 rotationSmoothVel;
Vector3 currentRotation;
float yaw, pitch;
public bool state;
public PlayerMovement playerMov;
//cam colission var
[Header("Layer(s) to include")]
public LayerMask CamOclusion;
Vector3 dollyDir;
Vector3 camPosition;
public float distance;
void Start () {
if (lockCursor) {
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
//cam collision
dollyDir = transform.localPosition.normalized;
distance = transform.localPosition.magnitude;
}
// Update is called once per frame
void Update (){
state = playerMov.swordState;
}
void LateUpdate () {
yaw += Input.GetAxis ("Mouse X") * mouseSensitivity;
pitch -= Input.GetAxis ("Mouse Y") * mouseSensitivity;
pitch = Mathf.Clamp (pitch, pitchMinMax.x, pitchMinMax.y);
Vector3 targetOffset = new Vector3(target.position.x, target.position.y, target.position.z);
currentRotation = Vector3.SmoothDamp (currentRotation, new Vector3 (pitch, yaw), ref rotationSmoothVel, rotationSmoothTime);
transform.eulerAngles = currentRotation;
CamColisionFunc (ref targetOffset);
Zoom ();
transform.LookAt(target);
}
void Zoom(){
if (state == true) {
dstFromTarget = 9;
}
else if (state == false) {
dstFromTarget = maxDistance;
}
camPosition = target.position - transform.forward * dstFromTarget;
transform.position = Vector3.Lerp(transform.position, camPosition, Time.deltaTime * smooth);
}
void CamColisionFunc(ref Vector3 targetFollow){
//#region prevent wall clipping
Vector3 desiredCameraPos = Camera.main.transform.localPosition;
RaycastHit wallHit;
if (Physics.Linecast (targetFollow, desiredCameraPos, out wallHit,CamOclusion)){
smooth = 10f;
camPosition = new Vector3(wallHit.point.x + wallHit.normal.x * 0.5f, camPosition.y, wallHit.point.z + wallHit.normal.z * 0.5f);
Debug.Log ("Hit Ray"+ wallHit.collider);
} else {
//Zoom ();
//dstFromTarget = maxDistance;
Debug.Log ("Not Hit");
}
//#endregion
}
}
Comment
What is your problem? You're moving an object outside of FixedUpdate and your question mentioned collisions, so I assume you're getting jerky behavior on your camera?
Answer by _Venus_ · Sep 26, 2018 at 04:41 PM
You have to give us details on how it "didnt work". Maybe a little background on purpose of the script?
Your answer
![](https://koobas.hobune.stream/wayback/20220612175155im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
3rd person camera that avoids objects 0 Answers
3rd Person Camera Collision 4 Answers
How to keep the player on the left side o the screen? 2 Answers
Top down camera lock 2 Answers