Implemented a custom physics engine #316
|
@ -5,7 +5,7 @@
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 0, y: 1.77475965, z: 0}
|
Translate: {x: 0, y: 1.77475965, z: 0}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: 0, y: 0, z: -0}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
RigidBody Component:
|
RigidBody Component:
|
||||||
|
@ -13,8 +13,8 @@
|
||||||
Auto Mass: false
|
Auto Mass: false
|
||||||
Mass: 1
|
Mass: 1
|
||||||
Drag: 1
|
Drag: 1
|
||||||
Angular Drag: 0
|
Angular Drag: 1
|
||||||
Use Gravity: true
|
Use Gravity: false
|
||||||
Gravity Scale: 1
|
Gravity Scale: 1
|
||||||
Interpolate: true
|
Interpolate: true
|
||||||
Sleeping Enabled: true
|
Sleeping Enabled: true
|
||||||
|
@ -37,7 +37,11 @@
|
||||||
Position Offset: {x: 0, y: 0, z: 0}
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts:
|
||||||
|
- Type: PhysicsTestObj
|
||||||
|
Enabled: true
|
||||||
|
forceAmount: 50
|
||||||
|
torqueAmount: 500
|
||||||
- EID: 1
|
- EID: 1
|
||||||
Name: Default
|
Name: Default
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
using SHADE;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using static Item;
|
||||||
|
|
||||||
|
|
||||||
|
public class PhysicsTestObj : Script
|
||||||
|
{
|
||||||
|
public RigidBody rb { get; set; }
|
||||||
|
|
||||||
|
// Movement input booleans
|
||||||
|
public enum Direction
|
||||||
|
{
|
||||||
|
UP,
|
||||||
|
DOWN,
|
||||||
|
FORWARD,
|
||||||
|
BACK,
|
||||||
|
LEFT,
|
||||||
|
RIGHT
|
||||||
|
};
|
||||||
|
|
||||||
|
internal bool[] move = new bool[6];
|
||||||
|
internal bool[] rotate = new bool[6];
|
||||||
|
|
||||||
|
internal Vector3[] moveVec = new Vector3[6]
|
||||||
|
{
|
||||||
|
Vector3.Up,
|
||||||
|
Vector3.Down,
|
||||||
|
Vector3.Back,
|
||||||
|
Vector3.Forward,
|
||||||
|
Vector3.Left,
|
||||||
|
Vector3.Right
|
||||||
|
};
|
||||||
|
|
||||||
|
internal Vector3[] rotateVec = new Vector3[6]
|
||||||
|
{
|
||||||
|
Vector3.Right,
|
||||||
|
Vector3.Left,
|
||||||
|
Vector3.Forward,
|
||||||
|
Vector3.Down,
|
||||||
|
Vector3.Up,
|
||||||
|
Vector3.Down
|
||||||
|
};
|
||||||
|
|
||||||
|
internal Input.KeyCode[] moveInputKeys = new Input.KeyCode[6]
|
||||||
|
{
|
||||||
|
Input.KeyCode.Space,
|
||||||
|
Input.KeyCode.LeftControl,
|
||||||
|
Input.KeyCode.W,
|
||||||
|
Input.KeyCode.S,
|
||||||
|
Input.KeyCode.A,
|
||||||
|
Input.KeyCode.D
|
||||||
|
};
|
||||||
|
|
||||||
|
internal Input.KeyCode[] rotateInputKeys = new Input.KeyCode[6]
|
||||||
|
{
|
||||||
|
Input.KeyCode.I,
|
||||||
|
Input.KeyCode.K,
|
||||||
|
Input.KeyCode.U,
|
||||||
|
Input.KeyCode.O,
|
||||||
|
Input.KeyCode.J,
|
||||||
|
Input.KeyCode.L
|
||||||
|
};
|
||||||
|
|
||||||
|
public float forceAmount = 50.0f;
|
||||||
|
public float torqueAmount = 500.0f;
|
||||||
|
|
||||||
|
protected override void awake()
|
||||||
|
{
|
||||||
|
rb = GetComponent<RigidBody>();
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; ++i)
|
||||||
|
{
|
||||||
|
move[i] = false;
|
||||||
|
rotate[i] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void update()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 6; ++i)
|
||||||
|
{
|
||||||
|
if (Input.GetKeyDown(moveInputKeys[i]))
|
||||||
|
move[i] = true;
|
||||||
|
|
||||||
|
//if (Input.GetKeyDown(rotateInputKeys[i]))
|
||||||
|
// rotate[i] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void fixedUpdate()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 6; ++i)
|
||||||
|
{
|
||||||
|
bool shouldMove = move[i];
|
||||||
|
bool shouldRotate = rotate[i];
|
||||||
|
|
||||||
|
if (shouldMove)
|
||||||
|
{
|
||||||
|
Vector3 offset = new Vector3(0.25f, 0.0f, 0.0f);
|
||||||
|
rb.AddForceAtLocalPos(moveVec[i] * forceAmount, offset);
|
||||||
|
move[i] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shouldRotate)
|
||||||
|
{
|
||||||
|
rb.AddTorque(rotateVec[i] * torqueAmount);
|
||||||
|
rotate[i] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
Name: PhysicsTestObj
|
||||||
|
ID: 159293012
|
||||||
|
Type: 9
|
Loading…
Reference in New Issue