Pro 3D Camera



Version 3.0 Notes



➔ Mobile support/development discontinued. (I am unable to test on multiple devices)

➔ Editor window to modify over 70 settings across 4 different cameras

➔ The editor window speaks for itself - each setting has an info button next to it. When clicked, information about that setting can be viewed.

➔ A new test environment has been created to present extreme collision scenarios and obstacles for the player controller.

➔ API access for accomplishing various tasks on the camera at run-time

❏ Adjust camera offset ❏ Set new targets for the camera ❏ Change the camera type ❏ Set FPS sensitivity ❏ Modify orbiting and panning input ❏ Modify orbiting and panning speeds ❏ Shake the camera ❏ Set min and max bounds for the RTS camera ❏ & Much More!  


➔ You can now choose to have the camera auto-revert to certain angles when not orbiting. For instance, the RPG camera angle can always rotate back to being behind the target - or any X-Y angle combo that you choose.

➔ You can now seamlessly transition between the RPG and FPS cameras when zooming in and out

➔ RTS camera now has settings for restricting camera location to boundaries

➔ RTS camera now has elasticity settings. You can choose to have the RTS camera “bounce” back to the boundary when the user releases pan input

➔ You can now set the initial position for the RTS camera - since it does not have a target to rely on.  

Player Controller

➔ The test environment now uses Unity Technologies’s character asset, Ethan. 

Special Features

➔ New shake feature. Create your own camera shake sequences from the editor by modifying position curves, intensity, and decay values. Give them names and call them from the API metho .  


➔ You can easily add padding to your camera when it collides, pushing it forward based on the padding value you choose. This can reduce the amount of clipping in close quarters situations. Using high padding will never push the camera through the target.

➔ A toggleable feature has been added to the collision settings where when the camera is backed against a wall, it will get pushed upward and look down on the target. Distance to determine when this is activated, and the height the camera moves up to, are both values that can be tweaked.

➔ The camera’s smoothing rate when colliding and not colliding are now independent of each other and can be modified from either the position settings or the collision settings.

➔ A new toggleable feature has been added where the camera’s target will fade when the camera is too close. The user defines how close is “too close” and how much fade will be applied to the target. For now, fading can only be done on targets whose materials use the Standard Shader or some variation of it.  



➔ Improved workflow. You no longer need to worry about saving camera data.

➔ All features and settings can be modified from an easy editor - accessible through the camera control script.

➔ Camera data is now handled more safely on the lower level (c++) side, through the use of scriptable objects

➔ Consolidated cameras into one script  


➔ Transitions between different cameras at run-time has been smoothed out  


➔ Collision detection has been greatly improved - with more unique cases being cared for in volatile, clip-prone scenarios.  

Player Controller

➔ PlayerController handles bumpy terrain and hills more properly. The forward vector is based on the normal of the ground below, meaning the speed of the player will not be limited by slope of terrain.  

➔ A maximum slope is set (so the player cannot run up walls). This value can be tweaked from the Player Controller section in the editor.

➔ To check for grounded, the player controller now uses Physics.CheckSphere(). This method has been tested against other methods and proves to be reliable.  

Special Features

➔ The obstruction handler settings can be modified from the editor. There is now an API method which will allow you to set this feature to be active at runtime - since this feature operates independently of the camera control system. See the method here