This page has been translated automatically.
Unigine Basics
1. Introduction
2. Managing Virtual Worlds
3. Preparing 3D Models
4. Materials
5. Cameras and Lighting
6. Implementing Application Logic
7. Making Cutscenes and Recording Videos
8. Preparing Your Project for Release
9. Physics
10. Optimization Basics
11. PROJECT2: First-Person Shooter
12. PROJECT3: Third-Person Cross-Country Arcade Racing Game
Warning! This version of documentation is OUTDATED, as it describes an older SDK version! Please switch to the documentation for the latest SDK version.
Warning! This version of documentation describes an old SDK version which is no longer supported! Please upgrade to the latest SDK version.

Adding Interactive Area

In games and VR applications, some actions are performed when you enter a specific area in the scene (for example, music starts, sound or visual effects appear). Let's implement this in our project: when you enter or teleport to a certain area, it rains inside it.

In UNIGINE, the World Trigger node is used to track when any node (collider or not) gets inside or outside of it (for objects with physical bodies, the Physical Trigger node is used).

  1. First of all, create a trigger to define the rain area. On the Menu bar, choose Create -> Logic -> World Trigger and place the trigger near the Material Ball, for example. Set the trigger size to (2, 2, 2).

  2. Create a new TriggerZone component that will turn the rain node on and off (in our case, it is a particle system simulating rain), depending on the trigger state. Add the following code to the component and then assign it to the World Trigger node:

    Source code (C#)
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using Unigine;
    
    [Component(PropertyGuid = "AUTOGEN_GUID")] // <-- an identifier is generated automatically for the component
    public class TriggerZone : Component
    {
    	private WorldTrigger trigger = null;
    	public Node ControlledNode = null;
    	private void Init()
    	{
       	 // check if the component is assigned to WorldTrigger
       	 if (node.Type != Node.TYPE.WORLD_TRIGGER)
       	 {
       		 Log.Error($"{nameof(TriggerZone)} error: this component can only be assigned to a WorldTrigger.\n");
       		 Enabled = false;
       		 return;
       	 }
       	 // check if ControlledNode is specified
       	 if (ControlledNode == null)
       	 {
       		 Log.Error($"{nameof(TriggerZone)} error: 'ControlledNode' is not set.\n");
       		 Enabled = false;
       		 return;
       	 }
       	 // add callbacks to be fired when a node gets inside and outside the trigger
       	 trigger = node as WorldTrigger;
       	 trigger.AddEnterCallback(trigger_enter);
       	 trigger.AddLeaveCallback(trigger_leave);
    	}
    	
    	private void Update()
    	{
       	 // write here code to be called before updating each render frame
       	 
    	}
    
    	// callback function that enables ControlledNode when vr_player enters the trigger
    	private void trigger_enter(Node node)
    	{
       	 ControlledNode.Enabled = true;
    	}
    	// callback function that disables ControlledNode when vr_player leaves the trigger
    	private void trigger_leave(Node node)
    	{
       	 if (node.Name != "vr_player")
       		 return;
       	 ControlledNode.Enabled = false;
    	}
    }
  3. Now, let's add the rain effect. Drag the rain_effect.node asset from the vr/particles folder of the UNIGINE Starter Course Project add-on to the scene, add it as the child to the trigger node and turn it off (the component will turn it on later).

  4. Drag the rain_effect node from the World Hierarchy window to the Controlled Node field of the TriggerZone (in the Parameters window).

  5. Save changes (Ctrl+S), click Play to run the application, and try to enter the area defined by the trigger — it is raining inside.

Last update: 2024-04-08
Build: ()