We need to have a proper discussion before we can move forward (Monday 11.30). Untill then tasks for the weekend are:
Toop: I will be sketching environment concepts for the cage area and processing plant.
Joe: Research factory farming, look through the research already posted on the blog and do some independent research and make a post on the blog. Its extremely vital that you do this, will make things a lot easier on yourself once you get this done.
Alice: Concepts for objects in the environment
Saturday, 16 November 2013
Tuesday, 12 November 2013
Possible Idea
We looked at a interactive virtual scene of a battery hen farm and came up with an alternative idea. Instead of having the cages arranged in a maze like pattern we could have them arranged in a way more typical of factory farms which would draw more parallels to factory farms.
Link to interative scene:
http://www.animalvisuals.org/projects/empathy/virtualbatterycage/#reference
Sunday, 10 November 2013
What I have done this weekend.....
I think this design would suit us if it was focused on showing how the aliens are more advanced and high-tech. This can be used if we decided to base the aliens around the futuristic style. The design shows how they use very simple methods but are very effective i.e. the braces being used to hold humans against walls whilst only being a piece of metal.
I quite like this design I think it suits the style of our game a lot better than the Sci-Fi one because it could look a lot creepier due to it looking old styled and that its made with very simple materials. This would work well especially when it comes to the re-creation of the doors locking and how it can help you to escape.
This design is the most simplistic for a cage and would be used to store humans in large quantities in tight and cramped conditions. The cage will be made from simple materials put together and used over and over throughout the whole facility. The style is very medieval to symbolise old and simple methods to in-prison people.
I managed to create a quick design of the alien in a possible suit he might wear considering the style in which it might head towards. Underneath are development sheets of how the enemy is designed through the development of the start to up to date.
Wednesday, 6 November 2013
What I have produced this week...
This week I attempted to make a loading screen in unity using a white silhouette of our logo using a texture sprite sheet technique. I found this to be very difficult because you have to line up each of the parts exactly the same as before. I have to look more into this process as I've had a few problems with the animation lagg.
I also worked partly on our start up screen where it introduces the character and the story into the game I managed to complete these three sceens.
A character concept/pose I designed today, it is using more of an action styled pose where it has just jumped down.
AI_Patrol script
using UnityEngine;
using System.Collections;
public class AI_Patrol : MonoBehaviour
{
//-----------------------------------------------------------------------------
#region public_vars
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
public enum AIState { none, idle, walking, run }
public float patrolSpeed = 2F; // The nav mesh agent's speed when patrolling.
public float patrolWaitTime = 1F; // The amount of time to wait when the patrol way point is reached.
public float patrolSpeedDamper = 5F; // Patrol at 1/5th of animation speed
public AIState currentAIState = AIState.none;
public float speed = 0.5f;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#endregion
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#region private_vars
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// constants
private const float MIN_NAVAGENT_SPEED = 0.1F;
private const float MAX_NAVAGENT_SPEED = 1.25F;
private const float m_SpeedDampTime = .25f;
private const float m_DirectionDampTime = .25f;
private int m_WayPointIndex = 0;
private int maxWaypointIndex = 0;
private NavMeshAgent nmaAI = null;
private Animator animatorAI = null;
private const float MIN_IDLE_TIME = 2;
private const float MAX_IDLE_TIME = 8;
private int currentWaypointIndex = 0;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#endregion
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#region public_methods
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#endregion
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#region private_methods
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void Awake()
{
nmaAI = GetComponent<NavMeshAgent>();
}
//-----------------------------------------------------------------------------
// Use this for initialization
void Start ()
{
animatorAI = GetComponent<Animator>();
StartCoroutine( Idle() );
}
void OnTriggerEnter( Collider hit)
{
Debug.Log("AI_Patrol: OnTriggerStay hit: "+hit.gameObject.tag);
if( hit.gameObject.tag == "Enemy" )
{
Throw ( hit.gameObject );
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
IEnumerator Idle()
{
currentAIState = AIState.idle;
float randomIdleTime = Random.Range( MIN_IDLE_TIME, MAX_IDLE_TIME ) + Time.time;
while( randomIdleTime > Time.time )
{
animatorAI.SetFloat("Speed",0 );
nmaAI.speed = 0 ;
yield return null;
}
StartCoroutine( Patrolling() );
}
//-----------------------------------------------------------------------------
IEnumerator Patrolling ()
{
currentAIState = AIState.walking;
// Set an appropriate speed for the NavMeshAgent.
nmaAI.speed = Mathf.Clamp( animatorAI.GetFloat( "Speed" ) / patrolSpeedDamper, MIN_NAVAGENT_SPEED, MAX_NAVAGENT_SPEED );
// Set the destination to a random patrolWayPoint.
//nmaAI.destination = Waypoints.GetRandomWaypoint();
nmaAI.destination = Waypoints.GetWaypoint(currentWaypointIndex);
currentWaypointIndex++;
bool endPatrol = false;
// While not near the next waypoint or while there is a destination...
while( !endPatrol )
{
if( Vector3.Distance( nmaAI.destination, animatorAI.rootPosition ) > nmaAI.stoppingDistance )
{
animatorAI.SetFloat( "Speed", MAX_NAVAGENT_SPEED,m_SpeedDampTime, Time.deltaTime );
Vector3 curentDir = animatorAI.rootRotation * Vector3.forward;
Vector3 wantedDir = ( nmaAI.destination - animatorAI.rootPosition ).normalized;
if( Vector3.Dot( curentDir, wantedDir ) > 0 )
{
animatorAI.SetFloat( "Direction", Vector3.Cross(curentDir, wantedDir ).y, m_DirectionDampTime, Time.deltaTime );
}
else
{
animatorAI.SetFloat( "Direction", Vector3.Cross(curentDir, wantedDir ).y > 0 ? 1 : -1, m_DirectionDampTime, Time.deltaTime);
}
nmaAI.speed = Mathf.Clamp( animatorAI.GetFloat( "Speed" ) / patrolSpeedDamper, MIN_NAVAGENT_SPEED, MAX_NAVAGENT_SPEED );
}
else
{
endPatrol = true;
}
yield return null;
}
StartCoroutine( Idle() );
}
//-----------------------------------------------------------------------------
private bool throwing = false;
public void Throw( GameObject hitObject )
{
if( !throwing )
{
StartCoroutine( AnimateThrow( hitObject ) );
}
}
public float rotationDelta;
IEnumerator AnimateThrow( GameObject hitObject )
{
if( !throwing )
{
throwing = true;
animatorAI.SetBool( "Throw", true);
yield return new WaitForEndOfFrame();
AnimatorStateInfo stateInfo = animatorAI.GetCurrentAnimatorStateInfo( 0 );
animatorAI.SetBool( "Throw", false);
// transform.LookAt( hitObject.transform.position );
bool rotating = true;
float endOfThrowTime = stateInfo.length + Time.time;
float step = speed * Time.deltaTime;
while( rotating)
{
Vector3 targetDir = hitObject.transform.position - transform.position;
Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0F);
Debug.DrawRay(transform.position, newDir, Color.red);
transform.rotation = Quaternion.LookRotation(newDir);
// if(Mathf.Abs( (int) rotationDelta ) > 179 )
if( endOfThrowTime < Time.time )
{
rotating = false;
}
yield return null;
}
transform.LookAt( hitObject.transform.position );
// yield return new WaitForSeconds( stateInfo.length );
throwing = false;
}
}
//-----------------------------------------------------------------------------
#endregion
//-----------------------------------------------------------------------------
}
using System.Collections;
public class AI_Patrol : MonoBehaviour
{
//-----------------------------------------------------------------------------
#region public_vars
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
public enum AIState { none, idle, walking, run }
public float patrolSpeed = 2F; // The nav mesh agent's speed when patrolling.
public float patrolWaitTime = 1F; // The amount of time to wait when the patrol way point is reached.
public float patrolSpeedDamper = 5F; // Patrol at 1/5th of animation speed
public AIState currentAIState = AIState.none;
public float speed = 0.5f;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#endregion
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#region private_vars
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// constants
private const float MIN_NAVAGENT_SPEED = 0.1F;
private const float MAX_NAVAGENT_SPEED = 1.25F;
private const float m_SpeedDampTime = .25f;
private const float m_DirectionDampTime = .25f;
private int m_WayPointIndex = 0;
private int maxWaypointIndex = 0;
private NavMeshAgent nmaAI = null;
private Animator animatorAI = null;
private const float MIN_IDLE_TIME = 2;
private const float MAX_IDLE_TIME = 8;
private int currentWaypointIndex = 0;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#endregion
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#region public_methods
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#endregion
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#region private_methods
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void Awake()
{
nmaAI = GetComponent<NavMeshAgent>();
}
//-----------------------------------------------------------------------------
// Use this for initialization
void Start ()
{
animatorAI = GetComponent<Animator>();
StartCoroutine( Idle() );
}
void OnTriggerEnter( Collider hit)
{
Debug.Log("AI_Patrol: OnTriggerStay hit: "+hit.gameObject.tag);
if( hit.gameObject.tag == "Enemy" )
{
Throw ( hit.gameObject );
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
IEnumerator Idle()
{
currentAIState = AIState.idle;
float randomIdleTime = Random.Range( MIN_IDLE_TIME, MAX_IDLE_TIME ) + Time.time;
while( randomIdleTime > Time.time )
{
animatorAI.SetFloat("Speed",0 );
nmaAI.speed = 0 ;
yield return null;
}
StartCoroutine( Patrolling() );
}
//-----------------------------------------------------------------------------
IEnumerator Patrolling ()
{
currentAIState = AIState.walking;
// Set an appropriate speed for the NavMeshAgent.
nmaAI.speed = Mathf.Clamp( animatorAI.GetFloat( "Speed" ) / patrolSpeedDamper, MIN_NAVAGENT_SPEED, MAX_NAVAGENT_SPEED );
// Set the destination to a random patrolWayPoint.
//nmaAI.destination = Waypoints.GetRandomWaypoint();
nmaAI.destination = Waypoints.GetWaypoint(currentWaypointIndex);
currentWaypointIndex++;
bool endPatrol = false;
// While not near the next waypoint or while there is a destination...
while( !endPatrol )
{
if( Vector3.Distance( nmaAI.destination, animatorAI.rootPosition ) > nmaAI.stoppingDistance )
{
animatorAI.SetFloat( "Speed", MAX_NAVAGENT_SPEED,m_SpeedDampTime, Time.deltaTime );
Vector3 curentDir = animatorAI.rootRotation * Vector3.forward;
Vector3 wantedDir = ( nmaAI.destination - animatorAI.rootPosition ).normalized;
if( Vector3.Dot( curentDir, wantedDir ) > 0 )
{
animatorAI.SetFloat( "Direction", Vector3.Cross(curentDir, wantedDir ).y, m_DirectionDampTime, Time.deltaTime );
}
else
{
animatorAI.SetFloat( "Direction", Vector3.Cross(curentDir, wantedDir ).y > 0 ? 1 : -1, m_DirectionDampTime, Time.deltaTime);
}
nmaAI.speed = Mathf.Clamp( animatorAI.GetFloat( "Speed" ) / patrolSpeedDamper, MIN_NAVAGENT_SPEED, MAX_NAVAGENT_SPEED );
}
else
{
endPatrol = true;
}
yield return null;
}
StartCoroutine( Idle() );
}
//-----------------------------------------------------------------------------
private bool throwing = false;
public void Throw( GameObject hitObject )
{
if( !throwing )
{
StartCoroutine( AnimateThrow( hitObject ) );
}
}
public float rotationDelta;
IEnumerator AnimateThrow( GameObject hitObject )
{
if( !throwing )
{
throwing = true;
animatorAI.SetBool( "Throw", true);
yield return new WaitForEndOfFrame();
AnimatorStateInfo stateInfo = animatorAI.GetCurrentAnimatorStateInfo( 0 );
animatorAI.SetBool( "Throw", false);
// transform.LookAt( hitObject.transform.position );
bool rotating = true;
float endOfThrowTime = stateInfo.length + Time.time;
float step = speed * Time.deltaTime;
while( rotating)
{
Vector3 targetDir = hitObject.transform.position - transform.position;
Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0F);
Debug.DrawRay(transform.position, newDir, Color.red);
transform.rotation = Quaternion.LookRotation(newDir);
// if(Mathf.Abs( (int) rotationDelta ) > 179 )
if( endOfThrowTime < Time.time )
{
rotating = false;
}
yield return null;
}
transform.LookAt( hitObject.transform.position );
// yield return new WaitForSeconds( stateInfo.length );
throwing = false;
}
}
//-----------------------------------------------------------------------------
#endregion
//-----------------------------------------------------------------------------
}
Update
Rescaled the unity file fixing the issue where the AI was moving extremely slowly.
Painted over a Maya render to get the basic concept of the slaughterhouse done. The poster is meant to be an advertisement showing the humans having better quality of life than what they are living in which is often done with advertisements for animal products. This didn't turn out well as a concept piece, I should of painted more into it and I'm not happy with the the shadows.
![]() |
| Map |
Drew a map of the building showing where the different rooms will be. At the present moment we haven't decided the path the player will go down.![]() |
| Slaughterhouse concept |
Tuesday, 5 November 2013
Tasks for the week
Check the trello board !!! (should be checking and updating your progress on tasks everyday) and ticking off tasks once they've been done
Joe: Finish the concept art for the alien. The versions wearing suits and the versions with stomachs can be paintovers of previous concept pieces or sketches.
Toop: Complete weekly schedule and update presentation
Alice: Getting placeholder sounds to use in the graybox and finishing processing sketch
All three of us also need to write a personal statement (300 words)
Joe: Finish the concept art for the alien. The versions wearing suits and the versions with stomachs can be paintovers of previous concept pieces or sketches.
Toop: Complete weekly schedule and update presentation
Alice: Getting placeholder sounds to use in the graybox and finishing processing sketch
All three of us also need to write a personal statement (300 words)
Subscribe to:
Posts (Atom)












