Префаб «Player» имеет дочерний объект под названием «Sight», который представляет собой преобразование со спрайтами из 4 точек в качестве дочерних объектов с соответствующими смещениями. поэтому вращение «Прицела» приведет к повороту всей линии.

В каждом цикле обновления я ищу, чтобы прицел вращался в соответствии с положением мыши, но кажется, что переменная прицела равна нулю. Я попытался получить объект по тегу и иметь общедоступную переменную, чтобы можно было назначить сборный объект из инспектора. Также я попытался захватить только компонент преобразования. Я уверен, что это довольно глупая проблема, но я ее не вижу. Буду признателен за любую помощь.
Логика прицеливания:
public class PlayerShooting : MonoBehaviour {
public GameObject BulletPrefab;
public float coolDownTimer = 0.0f;
public float aimDistance = 0.5f;
private Vector2 originPoint = new Vector2 (0f,0f);
private Vector2 endPoint = new Vector2(0f,0f);
private bool dragging = false;
public GameObject sight;
// Update is called once per frame
void Update () {
// TOUCH DOWN
if (Input.GetMouseButtonDown(0) == true) {
originPoint = getPointInWorld(Input.mousePosition);
endPoint = originPoint;
dragging = true;
}
// TOUCH UP
if (Input.GetMouseButtonUp(0) == true) {
endPoint = getPointInWorld(Input.mousePosition);
dragging = false;
FireBullet();
}
// DRAGGING
if (dragging) {
endPoint = getPointInWorld(Input.mousePosition);
// AIM
// !!!: THIS IS THE ISSUE
sight = GameObject.Find("Player/Sight");
if (sight != null && endPoint != originPoint) {
Vector2 dir = originPoint - endPoint;
dir.Normalize();
float zAngle = Mathf.Atan2 (dir.y,dir.x) * Mathf.Rad2Deg - 90;
Quaternion newRotation = Quaternion.Euler(0,0,zAngle);
sight.transform.rotation = newRotation;
}
else
{
Debug.Log("Error: cannot aim because Sight was not instantiated");
}
}
}
void FireBullet (){
}
Vector2 getPointInWorld (Vector3 point){
Vector2 pos = Camera.main.ScreenToWorldPoint(point);
return pos;
}
}
Подробнее здесь: https://stackoverflow.com/questions/312 ... ild-object