Creator Guide
English
English
  • 🚩Introduction to OVERDARE
  • 🐤Get Started
    • OVERDARE App
    • OVERDARE Studio
  • 📌Policy
    • Community Guidelines
    • UGC Creation Guidelines
    • Guidelines on the External Use of UGC
    • Logo Usage Guidelines
    • Intellectual Property Rights Policy
    • Reporting Guidelines
    • Guidelines on Disputing Suspensions and Bans
    • Creator Payout Policy
    • Monetization Guidelines
  • 🏰Studio Manual
    • Studio Interface
    • Asset Import
    • Coordinate System
    • Game Settings
    • Studio Test Play
    • World Publish
    • Collaboration
    • Script Editor
    • Align Tool
    • Animation Editor
    • Material Manager
    • Collision Groups
    • Tag Editor
    • Payout Guideline
    • Object
      • Part
      • Model
      • Character
        • Humanoid Description
      • Camera
      • Physics
      • Lighting
      • Tool
      • VFX
      • Sound
      • GUI
  • 📝Script Manual
    • Script Overview
    • Basic Guide to Lua
    • Coding Style
    • Object Reference
    • Event
    • Server-Client Communication
    • BindableEvent
    • Value Objects
    • Mobile Input Handling
    • Tween
    • Breakpoint
    • Module Script
    • TPS Strafing System
    • Saving & Loading Data
    • Unity Developer Guide
  • 📚API Reference
    • Enums
      • ActuatorRelativeTo
      • AnimationPriority
      • AspectType
      • AssetTypeVerification
      • BorderMode
      • CameraMode
      • CameraType
      • ContextActionResult
      • CoreGuiType
      • DominantAxis
      • EasingDirection
      • EasingStyle
      • ForceLimitMode
      • HttpCompression
      • HttpContentType
      • HumanoidDisplayDistanceType
      • HumanoidStateType
      • KeyCode
      • Material
      • MaterialPattern
      • NormalId
      • ParticleEmitterShape
      • ParticleEmitterShapeInOut
      • ParticleEmitterShapeStyle
      • ParticleFlipbookLayout
      • ParticleFlipbookMode
      • ParticleOrientation
      • PartType
      • PlaybackState
      • RaycastFilterType
      • RollOffMode
      • RotationType
      • UserInputState
      • UserInputType
      • VelocityConstraintMode
    • DataTypes
      • BlendSpaceSampleSata
      • BrickColor
      • CFrame
      • Color3
      • ColorSequence
      • ColorSequenceKeypoint
      • Content
      • Enum
      • EnumItem
      • NumberRange
      • NumberSequence
      • NumberSequenceKeypoint
      • OverlapParams
      • PhysicalProperties
      • Ray
      • RaycastParams
      • RaycastResult
      • ScriptConnection
      • ScriptSignal
      • TweenInfo
      • Udim
      • Udim2
      • Vector2
      • Vector3
    • Classes
      • Animation
      • AngularVelocity
      • AnimationTrack
      • Animator
      • Atmosphere
      • Attachment
      • Backpack
      • BackpackItem
      • BasePart
      • BaseScript
      • Beam
      • BindableEvent
      • BlendSpace
      • BoolValue
      • Bone
      • Camera
      • CharacterMesh
      • CollectionService
      • Constraint
      • ContextActionService
      • CoreGui
      • DataStore
      • DataModel
      • DataStoreGetOptions
      • DataStoreIncrementOptions
      • DataStoreInfo
      • DataStoreKeyPages
      • DataStoreKeyInfo
      • DataStoreService
      • DataStoreListingPages
      • DataStoreSetOptions
      • FormFactorPart
      • Frame
      • Folder
      • GlobalDataStore
      • GuiBase2d
      • GuiButton
      • GuiObject
      • HttpService
      • Humanoid
      • HumanoidDescription
      • ImageButton
      • ImageLabel
      • InputObject
      • IntValue
      • LayerCollector
      • Instance
      • Light
      • Lighting
      • LinearVelocity
      • LocalScript
      • LuaSourceContainer
      • MaterialService
      • MaterialVariant
      • MeshPart
      • Model
      • ModuleScript
      • Mouse
      • OrderedDataStore
      • Pages
      • Part
      • ParticleEmitter
      • PhysicsService
      • Player
      • PlayerGui
      • Players
      • PlayerScripts
      • PointLight
      • PVInstance
      • ReplicatedStorage
      • RemoteEvent
      • ScreenGui
      • RunService
      • Script
      • ServerStorage
      • ServiceProvider
      • Skeleton
      • ServerScriptService
      • Sound
      • SoundService
      • SoundGroup
      • SpotLight
      • SpawnLocation
      • StarterCharacterScripts
      • StarterPack
      • StarterGui
      • StarterPlayer
      • StarterPlayerScripts
      • StringValue
      • SurfaceGui
      • SurfaceGuiBase
      • Team
      • Teams
      • TextLabel
      • TextButton
      • Tool
      • Trail
      • Tween
      • TweenService
      • TweenBase
      • UIAspectRatioConstraint
      • UserGameSettings
      • UserInputService
      • UserSettings
      • VectorForce
      • Workspace
      • WrapLayer
      • WorldRoot
      • WrapTarget
  • 🅰️OVERDARE Glossary
  • 📰Release Note
Powered by GitBook
On this page
  • Overview
  • Interface
  • Keyboard Shortcuts
  • Importing Assets
  • Object Structure Differences
  • Scripting
  • Features
  • Code Execution Flow
  • Accessing Variables/Functions from Other Scripts
  • Execution Location and Order
  • Server-Client Communication
  • Script Feature Comparison
  • print
  • Start Event
  • Update Event
  • Reference Object
  • Transform
  • Collision Event
  • Create & Destroy
  • Reference Materials
  1. Script Manual

Unity Developer Guide

PreviousSaving & Loading DataNextAPI Reference

Last updated 29 days ago

Overview

OVERDARE is a powerful game creation platform that handles everything from multiplayer game development to deployment. Unlike Unity which is client-based, OVERDARE is designed for multiplayer environments, resulting in a different structure than Unity.

This document is designed to help Unity developers quickly adapt to OVERDARE Studio. Explore new possibilities for creating multiplayer games with OVERDARE!

Interface

Unity
OVERDARE

Game

X

Scene

Viewport

Hierarchy

Level Browser

Inspector

Properties

Project

X

Console

Output Log

Unlike Unity, OVERDARE Studio does not provide a Game View or Project panel. Instead, when you run the game, the Viewport panel switches to the play screen.

In Unity, all assets such as scripts, materials, and meshes are managed in the Project panel. In OVERDARE Studio, scripts are managed in the Level Browser, while externally imported assets like meshes, images, and audio are managed separately through the Asset Manager.

Keyboard Shortcuts

Unity
Overdare
기능

Q

Ctrl + 1

Select Tool

W

Ctrl + 2

Move Tool

E

Ctrl + 3

Rotate Tool

R

Ctrl + 4

Scale Tool

Ctrl + P

F5

Play

Ctrl + P

Shift + F5

Stop

Importing Assets

In client-based Unity, external assets can be easily imported via drag-and-drop. On the other hand, OVERDARE Studio is designed as a platform for creators, requiring a server upload process when using external assets. This allows creators to easily share assets and use them in game development.

To import external assets, click the Import button in the top menu of OVERDARE Studio. When an asset is imported, it is uploaded to the server, and once processing is complete, it appears in the Asset Drawer.

Object Structure Differences

In Unity, core functionalities are component-based, allowing you to freely combine components like cameras, colliders, and audio to define an object’s behavior. In contrast, OVERDARE Studio has fixed object types for specific functionalities.

For example, in Unity, you need to add a Rigidbody component to enable physics for an object. In OVERDARE Studio, you need to disable the Anchored property in a Part object that has built-in physics functionality.

Scripting

OVERDARE Studio uses Lua script as its scripting language for game development. Lua is a lightweight scripting language known for its easy-to-learn syntax, fast execution speed, and high flexibility. These characteristics make Lua more accessible and productive than C# scripting, allowing both beginners and experienced developers to use it effectively.

Features

Feature
Unity (C#)
Overdare (Lua)

Explicit data types

O

X

Access modifiers

private, public, static 등

local, global

Object-Oriented programming (OOP)

Supports OOP through classes, interfaces, inheritance, polymorphism, etc.

Does not natively support OOP but allows similar implementations using Metatables

Code Structure

Class-based; all code is written inside classes, utilizing methods and properties

Simple function-based structure; no classes, uses Tables to organize data and functions

Functions

Functions are class members

Functions can be used as variables (First-class functions)

Collection

List, Dictionary, etc.

Table

Switch Statement

O

X

Single-line Comment

//

--

Multi-line Comment

/* and */

--[[ and ]]--

Semicolons

Required

Optional

Learn More

Code Execution Flow

Lua scripts are dynamically typed, and the script is executed sequentially from top to bottom. Forward referencing is not supported, meaning any functions or variables must be defined before they are referenced. This design characteristic stems from Lua’s focus on simplicity and runtime performance.

PrintText("Hello, Lua Script!") -- Error (forward referencing not allowed)  

function PrintText(message)
    print(message)
end  

PrintText("Hello, Lua Script!") -- Works

Accessing Variables/Functions from Other Scripts

If variables or functions are declared as global, they can be accessed from anywhere. However, since global variables can be modified from anywhere, this can reduce code stability.

GlobalText = "Hello, World!" -- Declaring a global variable  

-- Declaring a global function
function GlobalFunction()
    print("This is a global function!")
end
print(GlobalText) -- Accessing a global variable
GlobalFunction()  -- Calling a global function

To avoid the risks of global variables, you can use module scripts to encapsulate variables and functions within a table and return them. This approach is safer than using global variables and helps structure your code.

local SomeModule = {} -- Creating a table  

-- Module variable
SomeModule.Text = "Hello from module!"  

-- Module function
function SomeModule:Function()
    print("This is a function inside a module!")
end  

return SomeModule -- Returning the table
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SomeModule = require(ReplicatedStorage.SomeModule) -- Loading the module  

print(SomeModule.Text) -- Accessing a module variable
SomeModule.Function()  -- Calling a module function

Alternatively, you can use BindableEvent to handle communication between scripts in the same environment, such as server-to-server or client-to-client.

Learn More

Execution Location and Order

Since OVERDARE is designed for multiplayer environments, the purpose and execution of scripts depend on their location. For example, client-only features like cameras or GUIs run only on the client, whereas game logic or object movements requiring synchronization must be handled on the server. This structure clearly separates the roles of the client and server, ensuring efficient and stable multiplayer behavior.

In Unity, script execution order can be explicitly set using the Script Execution Order settings. In OVERDARE Studio, the execution order is automatically determined based on the type of script (e.g., Script or LocalScript) and its execution location (e.g., Workspace, ServerScriptService).

Learn More

Server-Client Communication

OVERDARE is designed for multiplayer games, where the game is implemented using a combination of Script (executed on the server) and LocalScript (executed on the client). Communication between the server and client is handled using RemoteEvent.

Learn More

Script Feature Comparison

print

using UnityEngine;

public class Example : MonoBehaviour
{
    void Start()
    {
        print("Hello, World!");
    }
}
print("Hello, World!")

Start Event

using UnityEngine;

public class Example : MonoBehaviour
{
    void Start()
    {
        print("Start!")
    }
}
print("Start!")

Update Event

using UnityEngine;

public class Example : MonoBehaviour
{
    private float Timer = 0f;

    void Update()
    {
        Timer += Time.deltaTime;
    }
}
local RunService = game:GetService("RunService")
local Timer = 0

local function UpdateEvent(deltaTime)
    Timer = Timer + deltaTime
end
RunService.Heartbeat:Connect(UpdateEvent)

Reference Object

using UnityEngine;

public class Example : MonoBehaviour
{
    void Start()
    {
        GameObject object = GameObject.Find("Monster/Orc");
    }
}
local Workspace = game:GetService("Workspace")
local Orc = Workspace.Monster.Orc

Transform

using UnityEngine;

public class Example : MonoBehaviour
{
    void Start()
    {
        transform.position = new Vector3(500, 0, 0);
        transform.rotation = new Vector3(0, 90, 0);
        transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
    }
}
local Part = script.Parent

Part.Position = Vector3.new(500, 0, 0)
Part.Orientation = Vector3.new(0, 90, 0)
Part.Size = Vector3.new(50, 50, 50)

Collision Event

using UnityEngine;

public class Example : MonoBehaviour
{
    private void OnCollisionEnter(Collision collision)
    {
        print("Collision started with : " + collision.gameObject.name);
    }

    private void OnCollisionStay(Collision collision)
    {
        print("Collision ongoing with : " + collision.gameObject.name);
    }

    private void OnCollisionExit(Collision collision)
    {
        Drint("Collision ended with : " + collision.gameObject.name);
    }
}
local Part = script.Parent

local function onTouched(otherPart)
    print(Part.Name, "Touched :", otherPart.Name)
end
Part.Touched:Connect(onTouched)

local function onTouchEnded(otherPart)
    print(Part.Name, "Touch Ended :", otherPart.Name)
end
Part.TouchEnded:Connect(onTouchEnded)

Create & Destroy

using UnityEngine;

public class Example : MonoBehaviour
{
    public GameObject Prefab;

    void Start()
    {
        GameObject newObject = Instantiate(Prefab, new Vector3(300, 0, 0));
        newObject.name = "NewObject";
        newObject.transform.parent = transform;

        Destroy(newObject);
    }
}
local Workspace = game:GetService("Workspace")
local Part = Workspace.Part

local ClonedPart = Part:Clone()
ClonedPart.name = "NewPart"
ClonedPart.Parent = Part
ClonedPart.Position = Vector3.new(300, 0, 0)

Part:Destroy()

Reference Materials

To learn more about the scripting features provided by OVERDARE Studio, refer to the documentation below.

📝
Basic Guide to Lua
Module Script
BindableEvent
Script Overview
Server-Client Communication
📚API Reference
Unity / OVERDARE Studio
Unity / OVERDARE Studio
Unity / OVERDARE Studio
Unity / OVERDARE Studio