Projects Overview

Project Abandoned

An early Prototype of a Gameconcept we came up with in a two men Team. Most Assets and enemy animations are not of our making.
Leveldesign, Gamemechanics, AI, Animation-Controll and Gamelogic were all done by us.

Untity5 Game Prototype Video

A run-through of the Level in fast foreward.

Watch

Low Poly Character Modeling

The Theme for this Project was "Twisted Worlds". It was about creating an inverted Version of a know Character in Gaming and had to have a handpainted look and no SSS.
Max Polycount was 10.000 Tris.

Low Poly Modeling/Texturing

Turntable of the finished Character in a simple Environment.

Watch

Run Cycle Animation

Animation Excersie: Run Cycle

This excersie shows a looping Runcycle of a character as used in Videogameanimation.
The Model was provided and is not my own work.

Watch

C# Code Example

					    
  public class EnemyController : MonoBehaviour {
  public PlayerController playerController;
  public float moveSpeed;
  public int totalHealth;
  private Animator anim;

    // Use this for initialization
    void Start () {
		iTween.Init (gameObject);

		anim = GetComponent ();
		anim.SetBool("isAttacking", false);
		anim.ResetTrigger ("isDead");
		anim.SetBool("attackRange", false);
		anim.SetFloat("speed", 0f);
		anim.SetFloat ("idleRandom", Random.value); //Range 0 ... 1!
   }

    public void moveToPosition(Vector3 pos) {
		
		if (moveSpeed <= 1.2f) {
			moveSpeed += Time.deltaTime / 2;
		}

		anim.SetFloat ("speed", moveSpeed);

		iTween.LookUpdate (gameObject, pos, 4);
		iTween.MoveUpdate (gameObject, pos, (8 - moveSpeed * 2f));
    }
    
    //Returns a bool in case we need it for further checking.
    public bool dealDamage(int dmg){

		totalHealth -= dmg;

		if (totalHealth <= 0 && !anim.GetCurrentAnimatorStateInfo(0).IsName("mutant_dying")) {
			//Deactivate Vision & Attack Collider in Children.
			gameObject.GetComponentInChildren ().enabled = false;
			SphereCollider[] sc = gameObject.GetComponentsInChildren ();

			//Go through all Colliders of children and deactivate them.
			for (int i = 0; i < sc.Length; i++) {
				sc [i].enabled = false;
			}

			stopMoving ();
			anim.SetTrigger ("isDead");	//Animation destroys gameobject at the end.
		}
		return true;
    }

    public void stopMoving(){
		iTween.MoveUpdate (gameObject, transform.position, 0.5f);

		moveSpeed = 0f;
		anim.SetFloat ("speed", moveSpeed);
    }

    //Called by dying Animation Event.
    public void killEnemy(){
		Destroy(this.gameObject);
    }
		
    void OnTriggerEnter(Collider other){
		if (other.gameObject.tag.Equals ("Spear")) {
			SpearController spear = other.gameObject.GetComponent ();

			if (!spear.getHittingEnemy ()) {
        //Value is reset to false, at the End of the Spears Attack Animation.
				spear.setHittingEnemy (true);	

				int dmg = spear.getDamage ();

				//deal Damage and check for success if needed.
				if (!dealDamage (dmg)) {
					//add code if needed.
				}
			}
		}
    }

    public void SetAttackRange(bool value){
		anim.SetFloat("attackRandom", Mathf.Round(Random.value));
		anim.SetBool ("attackRange", value);
    }

    public bool GetAttackRange(){
		return anim.GetBool ("attackRange");
    }

    public bool GetIsAttacking(){
		return anim.GetBool ("isAttacking");
    }

    /*
    * SetIsAttacking() is called as an Event at the Start and End of each Attackanimation in Unity!
    * Unity Events can not send Parameters of Type Bool, therefore we have to convert an int Value.
    * ... #stupid! :-P
    */
    public void SetIsAttacking(int v){
		bool value;

		if (v == 0) {
			value = false;
		} else {
			value = true;
		}

        //Change AttackRandom for/after every Attack.
		anim.SetFloat("attackRandom", Mathf.Round(Random.value));	
		anim.SetBool ("isAttacking", value);
    }

    public void damagePlayer(int dmg){
		if (anim.GetBool ("attackRange")) {
			Debug.Log ("Player takes dmg!");
			playerController.dealDamage (dmg);
		}
    }

    public void SetPlayer(PlayerController c){
		playerController = c;
    }

}