Я использую сопрограмму, чтобы сделать плавное вращение. Я использую Quaternion.LookRotation для задания.
, чтобы вы указали положение объекта для просмотра и продолжительность анимации. Здесь вы хотите повернуть лицо к основной камере
StartCoroutine(SmoothRotation(Camera.main.transform, 3f));
:
:
IEnumerator SmoothRotation(Transform target, float duration)
{
float currentDelta = 0;
var startrotation = transform.rotation;//use your rigisbody if you want here i use the gameobject
var LookPos = target.position - transform.position;
var finalrot = Quaternion.LookRotation(LookPos);
while (currentDelta <= 1f)
{
currentDelta += Time.deltaTime / duration;
transform.rotation = Quaternion.Lerp(startrotation, finalrot, currentDelta);//
yield return null;
}
transform.rotation = finalrot;
}
, если вы хотите видеть (в сцене во время бега), где точки вашей камеры просто добавляют эту строку кода в update ():
Debug.DrawRay(Camera.main.transform.position, Camera.main.transform.TransformDirection(Vector3.forward) * 10f, Color.black);
если вы хотите указать в том же направлении, что и камера, просто измените линию финального рычага в методе SmoothRotation:
var finalrot = Camera.main.transform.rotation;
вам не нужно вычислять LookPos
для вашей задачи сумасшедшего вращения, я предлагаю вам сбросить вращение x и z
direction = hit.transform.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(direction);
rotation.x = 0f;
rotation.z = 0f;
советы по обнаружению того, что вы хотите, с помощью raycast внутри spere: Physics.OverlapSphere : вы можете выбрать что вы хотите использовать при использовании необязательного параметра layermask
private void DetectEnemy(Vector3 center, float radius)
{
var hitColliders = Physics.OverlapSphere(center, radius );
for (var i = 0; i < hitColliders.Length; i++)
{
print(hitColliders[i].name + "," + hitColliders[i].transform.position);
// collect information on the hits here
}
}