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

Скрипт для захвата точки.

Cibophoby Знаток (282), на голосовании 1 месяц назад
Я пока что новичок в Unity,поэтому еще не умею писать хорошие скрипты.Помогите пожалуйста написать скрипт для захвата точки врагами или союзниками.Если игровой объект с тегом "Player" находится в 3д-объекте Cube с бокс коллайдером и риджитбади, то союзникам начисляется +1 очко за фрейм.Если в объекте Cube находится игровой объект с тегом "Enemy", то начисляется +1 очко врагам. Если в объекте Cube их равное количество, то никому ничего не начисляется. Если в Cube находится несколько таких и несколько других,то очко начисляется тем,чьих объектов больше.ПОМОГИТЕ ПОЖАЛУЙСТА.

Пока у меня получился такой скрипт, но он почему-то не работает,как мне кажется,проблема где-то в массиве.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class PointController : MonoBehaviour
{
public int scoreGer;
public int scoreRus;
public Transform[] point; // массив точек
private int enemyCount; // количество врагов на точке
private int playerCount; // количество союзников на точке
public GameObject enemy; // враг
public GameObject player; // союзник


private void Start()
{
enemyCount = 0;
playerCount = 0;
}

private void OnTriggerEnter(Collider other)
{
foreach (Transform obj in point)
{
if (obj.gameObject.CompareTag("Enemy"))
{
enemyCount++;
Debug.Log("очко врагам");
}
if (obj.CompareTag("Player"))
{
playerCount++;
Debug.Log("очко РУССКИМ");
}
}
}
private void Update()
{
if (playerCount > enemyCount)
{
GetComponent<ScoreManager>().scoreRus += 1; // добавляем очко союзникам
}
else if (enemyCount > playerCount)
{
GetComponent<ScoreControllerTwo>().scoreGer += 1; // добавляем очко врагам
}
}
}
Голосование за лучший ответ
gf gf Знаток (440) 2 месяца назад
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PointController : MonoBehaviour
{
public int scoreGer;
public int scoreRus;
public Transform[] point; // массив точек
private int enemyCount; // количество врагов на точке
private int playerCount; // количество союзников на точке

private void Start()
{
enemyCount = 0;
playerCount = 0;
}

private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Enemy"))
{
enemyCount++;
Debug.Log("Враги захватывают точку");
CheckPointOwnership();
}
else if (other.gameObject.CompareTag("Player"))
{
playerCount++;
Debug.Log("Союзники захватывают точку");
CheckPointOwnership();
}
}

private void OnTriggerExit(Collider other)
{
if (other.gameObject.CompareTag("Enemy"))
{
enemyCount--;
Debug.Log("Враги покидают точку");
CheckPointOwnership();
}
else if (other.gameObject.CompareTag("Player"))
{
playerCount--;
Debug.Log("Союзники покидают точку");
CheckPointOwnership();
}
}

private void CheckPointOwnership()
{
if (playerCount > enemyCount)
{
Debug.Log("Союзники захватили точку");
scoreRus++;
// Здесь можно добавить свою логику или обновить счетчики очков
}
else if (enemyCount > playerCount)
{
Debug.Log("Враги захватили точку");
scoreGer++;
// Здесь можно добавить свою логику или обновить счетчики очков
}
else
{
Debug.Log("Точка находится в нейтральном состоянии");
// Здесь можно добавить свою логику для нейтральной точки
}
}
}
попробуй это(ответ взят от ии)
CibophobyЗнаток (282) 2 месяца назад
Спасибо,частично работает,а где ты такой ИИ взял?
gf gf Знаток (440) Cibophoby, обычный chatgpt
CibophobyЗнаток (282) 2 месяца назад
Если у кого-то есть еще решение,буду очень признателен
Похожие вопросы