2016-03-18 10 views
0

, поэтому у меня есть старый код для игры «Connect4», написанный много лет назад, теперь у меня возникла большая проблема с получением результатов и их перестройкой для проекта unity3D.Обнаружение столкновения для мгновенно обновленного объекта

проблема заключается в том, что каждый объект игры (я сумел спровоцировать на сцене) был предназначен для уничтожения и восстановления каждого кадра (и у меня есть ощущение, что это действительно больше, чем время кадра); желая получить цвет каждого игрового объекта во времени, кажется, действительно сложным, я должен теперь не вводить созданный код, я должен только получать информацию от того, что получаю как графические результаты.

так что теперь у меня есть доска ящиков с сеткой, которая меняет цвета в зависимости от поворота игрока (красный для cp и желтый для plyer).

Я создал фиксированные коробки с коллайдерами и хотел, чтобы игровые объекты сталкивались с ним каждый кадр, но я не смог.

PS: Я проверил этот код и каждое решение, которое я нашел в этом сообществе, надеется найти какую-то помощь, спасибо.

using UnityEngine; 
using System.Collections; 

public class SelectorCode : MonoBehaviour 
{ 
    public Collision other; 

    public GameObject GO; 

    void OnTriggerEnter(Collider other) 
    { 
     GO = other.gameObject; 


    } 
    void OnTriggerStay(Collider other) 
    { 
     GO = other.gameObject; 


    } 
    void OnTriggerExit(Collider other) 
    { 
     GO = other.gameObject; 


    } 

    void Update() 
    { 

     GO = this.other.gameObject; 

    } 
} 
+3

«Проблема в том, что каждый gameObject (я сумел создать инстанцирование на сцене), предназначен для уничтожения и восстановления каждого кадра «воссоздать весь свой объект в каждом кадре - действительно плохая идея, – Boo

+0

Я действительно знаю, но, как я уже сказал, он был разработан много лет назад это действительно старо. –

+0

@Boo крайне правильно. Возможно, было бы лучше воссоздать систему, вместо того чтобы продолжать использовать код, который вы знаете, по своей сути ошибочен в своем дизайне. – BHustus

ответ

0

Сначала убедитесь, что объект, к которому SelectorCode компонент присоединен имеет триггер коллайдер (свойство «спусков» проверяется).

Дальше вы получите сообщение об ошибке Update с GO = this.other.gameObject;, так как другой не назначен. Я думаю, вы должны удалить эту строку.

Наконец, в OnTriggerExit вы положили в GO объект, который покидает свой коллайдер, что не имеет смысла, вы, вероятно, следует назначить GO к null в данный момент:

void OnTriggerExit(Collider other) 
{ 
    if (other.gameObject == GO) 
    { 
     GO = null; 
    } 
} 
+0

, но я хочу чтобы постоянно обнаруживать объект, даже если он был разрушен или воссоздан, но я хочу получить новый объект, который мне нужен, поэтому я думаю, что мне нужно GO для обнаружения объекта, даже если мы выходим из функции запуска. –

+0

Я не думаю, что единство будет иметь возможность обнаруживать столкновения для объектов, которые удалены и воссозданы каждый кадр. В любом случае, вы можете посмотреть [Порядок выполнения скрипта] (http://docs.unity3d.com/Manual/class-ScriptExecution.html). Но по крайней мере удалить строка в 'Update', которая действительно ничего не может сделать, кроме исключения исключений –

+0

спасибо, я попробую это –