3D Arena Fighter Camera (Local Multiplayer)
Hi There.
I've been stuck on this problem for awhile. I am trying to recreate the camera seen in Power Stone 2 (For reference https://youtu.be/EEiPj30yKMk?t=12m27s). Essentially, it is a multiplayer arena brawler in 3D. Think Smash Bros. with a Z-axis included. My current script can so far take one player and do a smooth follow, but it can't take other players.
using UnityEngine;
using System.Collections;
public class SmoothFollow : MonoBehaviour
{
#region Consts
private const float SMOOTH_TIME = 0.3f;
#endregion
#region Public Properties
public bool LockX;
public float offSetZ;
public bool LockY;
public bool LockZ;
public bool useSmoothing;
public Transform target;
public GameObject hudElements;
#endregion
#region Private Properties
private Transform thisTransform;
private Vector3 velocity;
#endregion
bool hudActive = true;
private void Awake()
{
thisTransform = transform;
velocity = new Vector3(0.5f, 0.5f, 0.5f);
}
void Update()
{
if (hudActive)
{
if (Input.GetKeyDown(KeyCode.H))
{
hudElements.SetActive(false);
hudActive = false;
}
}
else
{
if (Input.GetKeyDown(KeyCode.H))
{
hudElements.SetActive(true);
hudActive = true;
}
}
}
// ReSharper disable UnusedMember.Local
private void LateUpdate()
// ReSharper restore UnusedMember.Local
{
var newPos = Vector3.zero;
if (useSmoothing)
{
newPos.x = Mathf.SmoothDamp(thisTransform.position.x, target.position.x, ref velocity.x, SMOOTH_TIME);
newPos.y = Mathf.SmoothDamp(thisTransform.position.y, target.position.y, ref velocity.y, SMOOTH_TIME);
newPos.z = Mathf.SmoothDamp(thisTransform.position.z, target.position.z + offSetZ, ref velocity.z, SMOOTH_TIME);
}
else
{
newPos.x = target.position.x;
newPos.y = target.position.y;
newPos.z = target.position.z;
}
#region Locks
if (LockX)
{
newPos.x = thisTransform.position.x;
}
if (LockY)
{
newPos.y = thisTransform.position.y;
}
if (LockZ)
{
newPos.z = thisTransform.position.z;
}
#endregion
transform.position = Vector3.Slerp(transform.position, newPos, Time.time);
}
}
I got it from a brawler bundle, but it only works with one player. This next code comes from a YouTube hitbox tutorial, which takes in as many players needed, but does not have smooth follow and doesn't follow the Z-axis (It's designed for 2D fighters.) The lines with the z-axis was my expermenting, and doesn't actually work.
using UnityEngine;
using System.Collections;
public class FighterCamera : MonoBehaviour
{
private Transform[] playerTransforms;
private void Start()
{
GameObject[] allPlayers = GameObject.FindGameObjectsWithTag("Player");
playerTransforms = new Transform[allPlayers.Length];
for (int i = 0; i < allPlayers.Length; i++)
{
playerTransforms[i] = allPlayers[i].transform;
}
}
public float yOffset = 2.0f;
public float minDistance = 7.5f;
private float xMin, xMax, yMin, yMax, zMin, zMax;
private void LateUpdate()
{
if (playerTransforms.Length == 0)
{
Debug.Log("Have not found a player, make sure player tag is on.");
return;
}
xMin = xMax = playerTransforms[0].position.x;
yMin = yMax = playerTransforms[0].position.y;
zMin = zMax = playerTransforms[0].position.z;
for (int i = 1; i < playerTransforms.Length; i++)
{
if (playerTransforms[i].position.x < xMin)
xMin = playerTransforms[i].position.x;
if (playerTransforms[i].position.x > xMax)
xMax = playerTransforms[i].position.x;
if (playerTransforms[i].position.y < yMin)
yMin = playerTransforms[i].position.y;
if (playerTransforms[i].position.y > yMax)
yMax = playerTransforms[i].position.y;
if (playerTransforms[i].position.z < zMin)
zMin = playerTransforms[i].position.y;
if (playerTransforms[i].position.z > zMax)
zMax = playerTransforms[i].position.z;
}
float xMiddle = (xMin + xMax) / 2;
float yMiddle = (yMin + yMax) / 2;
float zMiddle = (zMin + zMax) / 2;
float distance = xMax - xMin;
if (distance < minDistance)
distance = minDistance;
transform.position = new Vector3(xMiddle, yMiddle + yOffset, -distance);
}
}
So, how could I get smooth follow and a camera to follow every player in the xyz axis? Thanks!
Your answer
Follow this Question
Related Questions
Multiplayer First Person Game 0 Answers
MULTIPLAYER NETWORKING 0 Answers
Unity multiplayer VR Node JS 3D 0 Answers
So I am trying to get a multiplayer system working. 0 Answers
Question on Networking for a multiplayer game (making a board game) 0 Answers