Gerben Veenhof

Carmae

De game Carmae was als oefening voor het gebruiken van wheel colliders in Unity 3D, ook het nadenken en gebruiken van auto physics was hierbij nodig. Verder mocht de art van het internet gehaald worden maar daar koos ik niet voor. De book is gegenereerd door de Unity boom Besturing en Gameplay: De speler kan met WASD de auto besturen en door het menu heen scrollen, spatie is Selecteren. De speler heeft keuzen uit een time Trail totdat de tijd op is of tegen een erg simpele AI.

In het level zitten zoal:

  • Bochten
  • Mind texturing (Disoriënteerende textures)
  • Draaiende fans
  • Pipes

Alle modellen en textures heb ik zelf gemaakt in 3D max en het spel zelf is gemaakt in Unity 3D. Verder heb ik nog Gimp gebruikt om de textures te bewerken. Rocket Command is ook te spelen en te downloaden via GameJolt, een gratis platform waar je je games op kan hosten voor het grotere publiek.

Download

Hieronder zie je de code van het opvangen van de speler en het bewegen van de raket.

Expand Code:
using UnityEngine;
using System.Collections;

public class Car : MonoBehaviour 
{
public bool CamFollow;
GameObject WH1;
GameObject WH2;
GameObject ArtWH1;
GameObject ArtWH2;
GameObject ArtWH3;
GameObject ArtWH4;
WheelCollider LeftFront;
WheelCollider RightFront;
WheelCollider LeftRear;
WheelCollider RightRear;
GameObject Cam;
GameObject CameraLook;
int Speed;
float TurnSpeed;
float CurrentSpeed;

void Start()
{
Speed = 10000;
RightRear = GameObject.Find("RB").GetComponentInChildren<WheelCollider>();
LeftRear = GameObject.Find("LB").GetComponentInChildren<WheelCollider>();
RightFront = GameObject.Find("RF").GetComponentInChildren<WheelCollider>();
LeftFront = GameObject.Find("LF").GetComponentInChildren<WheelCollider>();
WH1 = GameObject.Find("Wheel 1");
WH2 = GameObject.Find("Wheel 4");
ArtWH1 = GameObject.Find("CWheel 1");
ArtWH2 = GameObject.Find("CWheel 2");
ArtWH3 = GameObject.Find("CWheel 3");
ArtWH4 = GameObject.Find("CWheel 4");

Cam = GameObject.Find("Main Camera");
CameraLook = GameObject.Find("CameraLook");
rigidbody.centerOfMass = new Vector3(0, -0.6f, 0);
;
}

void Update () 
{
CameraFollow();
Animation();
}

void FixedUpdate()
{
Movement();

}

void CameraFollow()
{
//Cam follow to car
Cam.transform.position = Vector3.Lerp(Cam.transform.position, CameraLook.transform.position, 0.1f);
Cam.transform.LookAt(gameObject.transform.position);
}

void Animation()
{
//Rotation for front wheels when steering
WH1.transform.localEulerAngles = new Vector3(WH1.transform.localEulerAngles.x, WH1.transform.localEulerAngles.y, -15 * Input.GetAxis("Horizon") * TurnSpeed);
WH2.transform.localEulerAngles = new Vector3(WH2.transform.localEulerAngles.x, WH2.transform.localEulerAngles.y, -15 * Input.GetAxis("Horizon") * TurnSpeed);

//Wheel rotation when going forward
float WheelRPM = RightRear.rpm / 60 * 360 * Time.deltaTime;
ArtWH1.transform.Rotate(0, 0, -WheelRPM);
ArtWH2.transform.Rotate(0, 0, -WheelRPM);
ArtWH3.transform.Rotate(0, 0, WheelRPM);
ArtWH4.transform.Rotate(0, 0, WheelRPM);
}

void Movement()
{
//Accerelation and max speed.
if (Input.GetAxis("Vertic") > 0 || Input.GetAxis("Vertic") < 0)
{
    RightRear.brakeTorque = 0;
    LeftRear.brakeTorque = 0;
    RightFront.brakeTorque = 0;
    LeftRear.brakeTorque = 0;
    if (CurrentSpeed <= 180)
    {
        float LocalSpeed = Mathf.Clamp(-Input.GetAxis("Vertic") * Speed * Time.deltaTime, -50f, 50f);
        RightRear.motorTorque = LocalSpeed;
        LeftRear.motorTorque = LocalSpeed;
        if (GameObject.Find("GUI").GetComponent<GUIScript>().GamePlay == false)
        {
            GameObject.Find("GUI").GetComponent<GUIScript>().GamePlay = true;
        }
    }
}
else if(CurrentSpeed != 0)
{
    RightRear.brakeTorque = 20;
    LeftRear.brakeTorque = 20;
    RightFront.brakeTorque = 20;
    LeftRear.brakeTorque = 20;
    RightRear.motorTorque = 0;
    LeftRear.motorTorque = 0;
}

if(CurrentSpeed > 83)
{
    RightRear.motorTorque = 0;
    LeftRear.motorTorque = 0;
}
CurrentSpeed = (int)(rigidbody.velocity.magnitude * 3.6f);

//DeAccerelation in air
RaycastHit Down;
if(Physics.Raycast(gameObject.transform.position,Vector3.down,out Down))
{
    if (Down.collider.gameObject == null)
    {
        RightRear.motorTorque = 0;
        LeftRear.motorTorque = 0;
    }
}


//Turn
TurnSpeed = Mathf.Clamp((1.5f - CurrentSpeed / 50), 0.8f, 2f);
if (Input.GetAxis("Horizon") != 0)
{
    float Turn = 18 * Input.GetAxis("Horizon") * TurnSpeed;
    RightFront.steerAngle = Turn;
    LeftFront.steerAngle = Turn;
}
else
{
    RightFront.steerAngle = 0;
    LeftFront.steerAngle = 0;
}


//Brake
if (Input.GetKey(KeyCode.Space))
{
    RightRear.brakeTorque = 150;
    LeftRear.brakeTorque = 150;
    RightFront.brakeTorque = 150;
    LeftRear.brakeTorque = 150;
}
if (Input.GetKeyUp(KeyCode.Space))
{
    RightRear.brakeTorque = 0;
    LeftRear.brakeTorque = 0;
    RightFront.brakeTorque = 0;
    LeftRear.brakeTorque = 0;
}
}

//Debug GUI
void OnGUI()
{
GUI.Label(new Rect(10, 10, 200, 200), " " + (int)(CurrentSpeed * 1.4f) + "Km u",GameObject.Find("GUI").GetComponent<GUIScript>().RaceFont);
}
}