我正在尝试创建一个随播放器一起移动但在播放器单击按钮上的锁时锁定到敌人的摄像头。该行为几乎按照我的意愿工作,相机锁定在目标上。当玩家站在目标的前面时,它可以正常工作。然而,只要玩家跑过目标,相机的行为就会很奇怪。它仍然看着敌人,但它不会留在玩家后面。下面是决定行为的代码:Unity - 让相机锁定在敌人身后并留在玩家身后?
if(MouseLock.MouseLocked && !lockedOn){ // MOUSE CONTROL:
Data.Azimuth += Input.GetAxis("Mouse X") * OrbitSpeed.x;
Data.Zenith += Input.GetAxis("Mouse Y") * OrbitSpeed.y;
} else if(lockedOn) { // LOCKON BEHAVIOUR:
FindClosestEnemy();
}
if (Target != null) {
lookAt += Target.transform.position;
base.Update();
gameObject.transform.position += lookAt;
if(!lockedOn){
gameObject.transform.LookAt (lookAt);
} else if(enemyTarget != null) {
Vector3 pos1 = Target.transform.position ;
Vector3 pos2 = enemyTarget.transform.position ;
Vector3 dir = (pos2 - pos1).normalized ;
Vector3 perpDir = Vector3.Cross(dir, Vector3.right) ;
Vector3 midPoint = (pos1 + pos2)/2f;
gameObject.transform.LookAt (midPoint);
}
}
,代码为查找最近的敌人:
void FindClosestEnemy() {
int numEnemies = 0;
var hitColliders = Physics.OverlapSphere(transform.position, lockOnRange);
foreach (var hit in hitColliders) {
if (!hit || hit.gameObject == this.gameObject || hit.gameObject.tag == this.gameObject.tag){
continue;
}
if(hit.tag != "Enemy") // IF NOT AN ENEMY: DONT LOCK ON
continue;
var relativePoint = Camera.main.transform.InverseTransformPoint(hit.transform.position);
if(relativePoint.z < 0){
continue;
}
numEnemies += 1;
if(enemyTarget == null){
print ("TARGET FOUND");
enemyTarget = hit;
}
}
if(numEnemies < 1){
lockedOn = false;
enemyTarget = null;
}
}
正如我所说,德行为几乎正常工作,但我需要将相机留在玩家身后锁定,并且必须面对敌人和玩家之间的敌人/中点。如何才能做到这一点?感谢您的时间。