我有一个2D正射相机,用于与网球类似的游戏。我一直在研究这个代码,我想我到目前为止只是其中的一部分。目前......它......让两个玩家保持一致,框架更加朝向人类玩家 - 玩家一。但是,它也有降低到地面以下的趋势 - 特别是当它缩小以保持目标在视野中时。有四个具体目标:地面,球,一号球员和二号球员。
地面应始终位于底部'否则当相机低于地面时,它会显示天空 - 这不是真正理想的效果。这是我迄今为止开发的代码......两个玩家都是有效的桨,但它只显示了它们之间的中心:
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour {
// Moving Camera, This Camera tries to follow Player One, Two, and Ball //
public static CameraController Instance;
public Transform PlayerOne;
public Transform PlayerTwo;
public Transform Ball;
public bool Ready = false;
private float MinX = -46.0f;
private float MaxX = 46.0f;
private float MinY = 12.0f;
private float MaxY = 35.0f;
private float LimitFromPlayerX = 20.0f;
private float LimitFromPlayery = 20.0f;
private float DistanceToGround = 0.0f;
private float DistanceFromCenter = 2.0f;
private float Height = 4.0f;
private float Damping = 5f;
private Vector3 EstimatedCameraPosition = Vector3.zero;
private Vector3 WantedPosition = Vector3.zero;
void Awake()
{
Instance = this;
}
public void SetCameraPosition()
{
Vector3 PlayerPosistion = PlayerOne.position;
PlayerPosistion.z = -10.10f;
transform.position = PlayerPosistion;
}
// Update is called once per frame
void FixedUpdate () {
if (Ready) {
Vector3 PlayerPosistion = PlayerOne.position;
PlayerPosistion.z = -10.10f;
Vector3 CameraPosition = transform.position;
CameraPosition.z = -10.10f;
// Get the Distance from the Player to the Ball //
Vector3 WantedPosition = PlayerTwo.transform.position - -PlayerOne.transform.position;
float WPMag = Mathf.Abs(WantedPosition.magnitude);
WPMag = Mathf.Clamp(WPMag, 20, 40);
Debug.Log(WPMag);
Camera.main.orthographicSize = WPMag;
transform.position = Vector3.Lerp(CameraPosition, WantedPosition, Damping * Time.deltaTime);
}
}
void LateUpdate()
{
Vector3 Posit = transform.position;
Posit.x = Mathf.Clamp (Posit.x, MinX, MaxX);
Posit.y = Mathf.Clamp (Posit.y, MinY, MaxY);
transform.position = Posit;
}
}
WPMag是我尝试缩小并至少匹配玩家,但到目前为止它只是部分工作。
答案 0 :(得分:0)
要将所有三个物体保持在视野中,您需要将相机对焦于中点或平均值#34;三个物体的位置。获取三个对象的中点就像获取两个对象的中点一样:(PlayerOne.position + PlayerTwo.position + Ball.position) / 3.0f
然后,您希望将正交尺寸设置为距离三个跟踪对象的中点最远的距离。这将确保所有三个对象都保留在框架中。
最后,为了防止相机显示地下天空,您应该对相机的Y位置强制执行下限。正交尺寸是视口垂直高度的一半,因此您可以使用CameraPosition.y = Mathf.Max(CameraPosition.y, groundHeight + camera.main.orthographicSize)