Adding Scripts
Learn how to program object behavior using scripts in OasisW.
Creating Scripts
Step 1: Create Script Asset
- Right-click in the Asset view.
- Click New Asset → Script.

Step 2: Enter Script Name

Step 3: Edit Script
Double-click the created script in the Asset view to open the editor.

Step 4: Implement Movement Logic
Use prompts to implement movement logic, then click Apply to apply, Save, and close.


- Player entity movement with arrow keys based on x, y axes
- Example:
"Add code so Player entity can move up, down, left, right based on x, y axes with wasd arrow keys"
var PlayerController = pc.createScript('playerController');
PlayerController.prototype.initialize = function() {
this.force = 5;
};
PlayerController.prototype.update = function(dt) {
var inputForce = new pc.Vec3();
if (this.app.keyboard.isPressed(pc.KEY_A)) {
inputForce.x = -this.force;
}
if (this.app.keyboard.isPressed(pc.KEY_D)) {
inputForce.x = this.force;
}
if (this.app.keyboard.isPressed(pc.KEY_W)) {
inputForce.y = this.force;
}
if (this.app.keyboard.isPressed(pc.KEY_S)) {
inputForce.y = -this.force;
}
this.entity.translate(inputForce.x * dt, inputForce.y * dt, 0);
};
- Fire missiles in y-axis direction
var GameManager = pc.createScript('gameManager');
GameManager.prototype.initialize = function() {
this.missile = null;
this.missileSpeed = 10;
this.fireInterval = 1;
this.fireTimer = 0;
this.activeMissiles = [];
};
GameManager.prototype.update = function(dt) {
this.fireTimer += dt;
if (this.fireTimer >= this.fireInterval) {
this.fireMissile();
this.fireTimer = 0;
}
for (var i = 0; i < this.activeMissiles.length; i++) {
var missile = this.activeMissiles[i];
var pos = missile.getPosition();
missile.setPosition(pos.x, pos.y + this.missileSpeed * dt, pos.z);
}
};
GameManager.prototype.fireMissile = function() {
this.missile = this.app.root.findByName('Missile');
if (this.missile) {
var player = this.app.root.findByName('Player');
if (player) {
var missileClone = this.missile.clone();
missileClone.setPosition(player.getPosition());
missileClone.setEulerAngles(0, 0, 0);
this.app.root.addChild(missileClone);
missileClone.collision.enabled = true;
this.activeMissiles.push(missileClone);
}
}
};
GameManager.prototype.swap = function(old) { };
- Enemy entity drop
var EnemyController = pc.createScript('enemyController');
EnemyController.prototype.initialize = function () {
this.enemyTemplate = this.app.root.findByName('Enemy');
this.timer = 0;
this.spawnInterval = 2.0;
this.enemySpeed = 3.0;
this.enemyCount = 5;
this.spawnY = 10.0;
this.enemies = [];
};
EnemyController.prototype.update = function (dt) {
this.timer += dt;
if (this.timer >= this.spawnInterval) {
this.timer = 0;
this.spawnEnemies();
}
this.moveEnemies(dt);
};
EnemyController.prototype.spawnEnemies = function () {
for (let i = 0; i < this.enemyCount; i++) {
const xPos = -4 + (i * 2);
const enemy = this.enemyTemplate.clone();
enemy.setPosition(xPos, this.spawnY, 0);
enemy.enabled = true;
this.entity.addChild(enemy);
this.enemies.push(enemy);
}
};
EnemyController.prototype.moveEnemies = function (dt) {
for (let i = 0; i < this.enemies.length; i++) {
const enemy = this.enemies[i];
const pos = enemy.getPosition();
enemy.setPosition(pos.x, pos.y - this.enemySpeed * dt, pos.z);
}
};
Applying Scripts
Step 1: Add Script Component
- Select the Box object in the Hierarchy view.
- In the Inspector view, click Add Component → Script.

Step 2: Add Script
When a script component is created at the bottom of the Inspector view, click Add Script.

Step 3: Select Script
Click the created script to apply it.

Step 4: Check Results
Click Launch in the Viewport to check the Box object's movement.
