Unity, Изменение вращения дочернего объекта. Невозможно получить доступ к дочернему объектуC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Unity, Изменение вращения дочернего объекта. Невозможно получить доступ к дочернему объекту

Сообщение Anonymous »

Я разрабатываю логику прицеливания и стрельбы игрока в 2D-игре. Когда пользователь щелкает и перетаскивает экран, он должен вращать вокруг спрайта линию, образованную тремя точками, под тем же углом, под которым перетаскивал игрок, чтобы он мог прицелиться. Как в пузырьковом шутере.

Префаб «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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»