2017-02-22 45 views
0
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class BoxCollider : MonoBehaviour { 

    private float degrees = 180f; 
    public float rotateSpeed = 10f; 
    private GameObject character; 
    private bool entered = false; 


    // Use this for initialization 
    void Start() 
    { 

    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (entered == true) 
     { 
      character.transform.rotation = Quaternion.Slerp(character.transform.rotation, Quaternion.Euler(degrees, 0, degrees), rotateSpeed * Time.deltaTime); 
     } 
    } 

    void OnTriggerEnter(Collider c) 
    { 
     character = c.gameObject;   
     entered = true; 
    } 
} 

В первый раз персонаж сталкивается с стеной (пустой игровой объект с полевым коллайдером), он меняет введенный на истину и вращает символ.Как я могу использовать переменные bool логически, когда символ сталкивается с полем?

Но при столкновении с другой стеной после повернутым и достиг другой стены я использовал контрольную точку, и она становится в части:

void OnTriggerEnter(Collider c) 
     { 
      character = c.gameObject;   
      entered = true; 
     } 

Но тогда, когда она становится все функции Update:

if (entered == true) 

Я использовал точку останова на этой строке и ввел false. Не знаете, почему.

На первом столкновении со стеной это правда, но на втором столкновении со стеной это неверно.

Причина, по которой я использую этот bool, состоит в том, чтобы вращать символ только при столкновении с стеной (поле).

У меня есть 4 пустых игровых объекта вокруг ландшафта, у каждого из которых есть коллайдер box istrigger, а также этот скрипт привязан к каждому игровому объекту.

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

+1

Уверен, что вы видите/отлаживаете правильную сущность? (Часто точки останова в многократно используемых объектах путают, если не вводят в заблуждение.) – RuDevel

ответ

1

Либо OnTriggerEnter не работает (если вы сталкиваетесь со стенами, вам не нужно OnCollisionEnter?) Или у вас есть другой скрипт, который устанавливает entered в false. Потому что в соответствии с кодом, который вы отправили после входа в коллайдер, который установлен в isTrigger entered, всегда будет правдой. Убедитесь, что сценарий не привязан ко многим объектам. Это может также дать вам вводящие в заблуждение значения отладки, поскольку это может быть ложно на другом объекте.

Также стоит отметить ...

Примечание: Collision события отправляются только если один из коллайдеров также имеют не кинематическое Rigidbody прилагается.

Или если вы используете CharacterController. Если у вас есть ЛЮБОЙ код, который устанавливает entered в значение false, вы должны указать его для дальнейшей помощи.

+0

Все еще не работает. Скрипт прикрепляется к каждому из 4 пустых игровых объектов с компонентом коллайдера коробки, добавленным в каждый игровой объект. Таким образом, скрипт находится в 4 местах, прикрепленных к каждому игровому объекту. И ThirdPersonController (1) у меня есть два ThirdPersonControllers. У меня есть на нем эти компоненты: Animator, Rigidbody, Capsule Collider, Контроль пользователя третьего лица (скрипт), персонаж третьего лица (скрипт) Вот и все. В Rigidbody проверяется значение силы тяжести (включено). –

+0

Каждая стена вращает игрока, когда они сталкиваются с игроком ... Вы уверены, что нет кода, который устанавливает 'введенный' в false? – Maakep

+0

Не работает. Но я сделал несколько тестов. Я вижу, что когда он добирается до функции обновления после столкновения с первой стеной в Инспекторе на стене, сопел с символом, я вижу, что флажок введен, так что это правда. И затем после поворота он переместится ко второй стене, и я вижу, что эта стена, установленная рядом с флажком, снята флажком, но в первой стене она по-прежнему проверяется. Затем он касается второй стены, и флажок рядом с ним также проверяется. Итак, теперь обе стены вошли, это проверено, это правда.Но все же он не вращается назад на второй стене. –