Ваш код для стрельбы из пушки в Unity на C# выглядит в целом корректно, но есть несколько моментов, которые могут вызывать ошибку.
Во-первых, обратите внимание на точное описание ошибки 0246, которую вы видите. Она может быть связана с синтаксисом, отсутствием требуемых компонентов, или другими проблемами.
Ниже я выделю несколько потенциальных проблем и исправлений, которые могут помочь устранить ошибку:
Возможные проблемы:
Ошибки в работе с private полями:
Убедитесь, что все переменные правильно объявлены и используются.
В частности, ошибка может возникать из-за того, что вы объявили переменную timebtw как private float timebtw;, но не инициализировали ее значением по умолчанию. В блоке if (timebtw <= 0) возможен некорректный доступ к неинициализированной переменной.
Ошибки в использовании Player.controlType:
У вас используется Player.controlType, но не видно, как именно объявлен тип ControlType в классе Player. Убедитесь, что это поле и его тип определены правильно.
Возможно, ошибка в написании Player.controlType вместо Player.ControlType. Важно, чтобы типы и названия совпадали с тем, как они объявлены.
Проблемы с именами и их регистром:
В коде Player.controlType используется с маленькой буквы "c", а в вызове if (Input.GetMouseButton(0) && player.controlType == Player.controlType.PC) должна быть Player.ControlType.PC (с большой буквы "C").
Проблемы с timebtw:
Возможно, в блоке else нужно обернуть уменьшение timebtw в if, так как в текущем состоянии переменная timebtw уменьшается только в случае, если она больше нуля.
using UnityEngine;
public class gun : MonoBehaviour {
public Joystick joystick;
public float offset;
public GameObject bullet;
public Transform Shotpoint;
private float timebtw = 0; // Инициализация переменной
public float starttimebtw;
private Vector3 difference;
private float rotZ;
private Player player;
private void Start()
{
player = GameObject.FindGameObjectWithTag("Player").GetComponent(); // Поправил название класса
}
void Update()
{
if (player.controlType == Player.ControlType.PC) // Проверка на правильное использование controlType
{
difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
}
else if (player.controlType == Player.ControlType.Android)
{
rotZ = Mathf.Atan2(joystick.Vertical, joystick.Horizontal) * Mathf.Rad2Deg;
}
transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);
if (timebtw <= 0)
{
if (Input.GetMouseButton(0) && player.controlType == Player.ControlType.PC)
{
Shoot();
}
else if (player.controlType == Player.ControlType.Android &&
(Mathf.Abs(joystick.Horizontal) > 0.3f || Mathf.Abs(joystick.Vertical) > 0.3f))
{
Shoot();
}
}
else
{
timebtw -= Time.deltaTime;
}
}
public void Shoot()
{
Instantiate(bullet, Shotpoint.position, transform.rotation);
timebtw = starttimebtw;
}
}
using System.Collections;
using UnityEngine.UI;
public class gun : MonoBehaviour {
public Joystick joystick;
public float offset;
public GameObject bullet;
public Transform Shotpoint;
private float timebtw;
public float starttimebtw;
private Vector3 difference;
private float rotZ;
private Player player;
private void Start()
{
player = GameObject.FindGameObjectWithTag("Player").GetComponent<movePlayer>();
}
void Update()
{
if(player.controlType == Player.ControlType.PC)
{
difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
}
else if(player.controlType == Player.ControlType.Android)
{
rotZ = Mathf.Atan2(joystick.Vertical, joystick.Horizontal) * Mathf.Rad2Deg;
}
transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);
if(timebtw <= 0)
{
if(Input.GetMouseButton(0) && player.controlType == Player.controlType.PC)
{
Shoot();
}
else if(player.controlType == Player.controlType.Android && Mathf.Abs(joystick.Horizontal) > 0.3f || Mathf.Abs(joystick.Vertical) > 0.3f)
{
if(joystick.Horizontal != 0 || joystick.Vertical != 0)
{
Shoot();
}
}
else
{
timebtw -= Time.deltaTime;
}
}
}
public void Shoot()
{
Instantiate(bullet, Shotpoint.position,transform.rotation);
timebtw = starttimebtw;
}
}
код ошибки 0246