Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
This question was closed Jan 18, 2018 at 12:37 AM by getyour411 for the following reason:

OP posted same thing twice; closing

avatar image
0
Question by Teh_Bucket · Jan 17, 2018 at 11:07 PM · c#triggerstart

OnTriggerEnter is called too late (after Start)

I am creating a simple room-based level generator. On adding a room to the level, I check if the new room is touching any colliders (new room has trigger collider and kinematic-rigidbody, old rooms just have normal colliders).

The problem is that immediately after adding a room, when I check whether the room is overlapping another room, the new room's OnTriggerEnter has not yet been called so it always returns as not triggered. How do I set up my code so that OnTriggerEnter has a chance to test the new room before I check whether OnTriggerEnter has been called?

Trigger code (on the new Room)

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class Room : MonoBehaviour {
 
     [HideInInspector] public bool isColliding = false;
 
     private void OnCollisionEnter(Collision collision) {
         //Debug.Log("Colliding");
         isColliding = true;
     }
     private void OnCollisionExit(Collision collision) {
         //Debug.Log("Not Colliding");
         isColliding = false;
     }
 
 
     private void OnTriggerEnter(Collider collision) {
         Debug.Log("Triggered");
         isColliding = true;
     }
     private void OnTriggerExit(Collider collision) {
         Debug.Log("Not triggered");
         isColliding = false;
     }
 
     // Use this for initialization
     void Start () {
         Debug.Log("ontrigger is: " + isColliding);
     }
     
     // Update is called once per frame
     void Update () {
         
     }
 }
 

Check code (see line 39, it always logs "False", even when it should be true. After it logs false, OnTriggerEnter is called and logs "Triggered") using System.Collections; using System.Collections.Generic; using UnityEngine;

 public class levelGen : MonoBehaviour {
 
     public Room[] rooms;
     public int roomCount = 10;
     int currentRoomCount = 0;
 
     // Add a Room
     void AddRoom() {
         bool success = false;
 
         Room newRoom;
         GameObject newRoomObject;
         Door[] endDoors;
         Door endDoor;
         Door[] newDoors;
         Door newDoor;
 
         endDoors = ShuffleDoors(GetComponentsInChildren<Door>());
 
         while (!success) {
             newRoomObject = Instantiate(rooms[Random.Range(0, rooms.Length)].gameObject,new Vector3(100,100,100),transform.rotation) as GameObject;
             newRoom = newRoomObject.GetComponent<Room>();
             newDoors = ShuffleDoors(newRoom.GetComponentsInChildren<Door>());
             
             for (int i = 0; i < endDoors.Length && !success; i++) {
                 endDoor = endDoors[i];
                 if (!endDoor.isConnected) {
                     for (int ii = 0; ii < newDoors.Length && !success; ii++) {
                         newDoor = newDoors[ii];
                         // place room at endDoor
                         newRoom.transform.SetPositionAndRotation(endDoor.transform.position - newDoor.transform.localPosition,  endDoor.transform.rotation);
                         // rotate room to fit on endDoor
                         newRoom.transform.RotateAround(endDoor.transform.position, Vector3.up, 180 -Quaternion.Angle(Quaternion.Euler(Vector3.zero), newDoor.transform.localRotation));
                         // try to rotate in case the door is backkwards
                         Debug.Log(newRoom.isColliding);
                         if (newRoom.isColliding) {
                             Debug.Log("Tried it the other way around (rotate 180d)");
                             newRoom.transform.RotateAround(endDoor.transform.position, Vector3.up, 180);
                         }
 
                         if (!newRoom.isColliding) {
                             success = true;
                             currentRoomCount += 1;
 
                             //newRoomObject.transform.parent = gameObject.transform;
                             //newRoomObject.GetComponent<Collider>().isTrigger = false;
                             //Destroy(newRoom.gameObject.GetComponent<Rigidbody>());
                             // ?
                             //endDoor.deadEnd = false;
                             //endDoor.isConnected = true;
                             //newDoor.deadEnd = false;
                         }
 
                     }
                 }
             }
         }
     }
 
     // Use this for initialization
     void Start () {
         for (int i = 0; i < roomCount; i++) {
             AddRoom();
         }
     }
     
     // Update is called once per frame
     void Update () {
         
     }
 
     //stuff
     Door[] ShuffleDoors(Door[] arr) {
         for (int i = 0; i < arr.Length; i++) {
             int rnd = Random.Range(0, arr.Length);
             Door tempGO = arr[rnd];
             arr[rnd] = arr[i];
             arr[i] = tempGO;
         }
         return arr;
     }
     Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles) {
         return Quaternion.Euler(angles) * (point - pivot) + pivot;
     }
 }
 
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

  • Sort: 

Follow this Question

Answers Answers and Comments

436 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Initialising List array for use in a custom Editor 1 Answer

Multiple Cars not working 1 Answer

OnTriggerEnter is called too late (after Start) 2 Answers

Distribute terrain in zones 3 Answers

What is the difference between these two scripts? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges