Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в игре юнити C# 0246

Дмитрий Знаток (396), на голосовании 4 месяца назад
Ребята помогите плиз, у мнея есть пушка и она у игрока но когда я использую приват плэйер он выдает ошибку, не знаю как пофиксить код вот: using UnityEngine;
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
Голосование за лучший ответ
Татьяна Просветленный (36374) 5 месяцев назад
Ваш код для стрельбы из пушки в 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;
}
}
ДмитрийЗнаток (396) 5 месяцев назад
попробовал твой код, но все равно что то не так, таже ошибка : The type or namespace name 'Player' could not be found (are you missing a using directive or an assembly reference?)
Татьяна Просветленный (36374) Дмитрий, Убедитесь, что у вас есть класс Player в вашем проекте. Если нет, вам нужно создать его.
Похожие вопросы