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
//-----------------------------------------------------------------------------
}
Wednesday, 6 November 2013
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)
Wednesday, 30 October 2013
Graybox
| Early graybox test from start of the project |
![]() |
| Changed the room layout and added placeholder objects, obstacles and lighting |
![]() |
| Added in teddy bears as placeholder AI and added waypoints for them to patrol to |
Added a sphere with a point light inside it. Initially we had the issue of the sphere not illuminating despite being transparent and adding the halo effect to the point light though importing the image effects package and applying bloom to the main camera fixed this issue.
We had an issue with the bear running very slowly, this appears to be due to scaling issues because everything is scaled up. To fix this we will need to rescale the entire level, because this can't be done in one go this may take a while as objects will need to be reorganised.
Labels:
Toop Posts,
Unity
Tuesday, 29 October 2013
Recent designs
This is a simple logo design that I created for my group "Barnpunk". It is going to also be used as a form of watermark for any concept or art work produced on this project and also for the loading screen with the gear moving behind it to give it the form of moving.
This is a front and side view of our alien creature (still haven't got a name for it) I drew this in the style of its most naked form so as to refer to when creating a 3D model. This will be easier to look at as it'll help me design the bone structure and to see what parts will move. We had a discussion about it being the final design but we had agreed that it should have a bit more clothing such as a space suit. Throughout the week I shall design up some ideas for a space suit idea using these images as the base structure of the anatomy.
Tuesday, 22 October 2013
This week (till monday 28th morning)
Toop: Continue concepting till end of October unless all is done. (complete 2-4)
Joe: Enemy development for presentation and test arm in graybox
Alice: Player coding (player health and player movement)
Once all concepts are done these can be made into assets starting 5th November at the latest.
For now we will use a small test environment and placeholder objects for assets in Unity
Joe: Enemy development for presentation and test arm in graybox
Alice: Player coding (player health and player movement)
Once all concepts are done these can be made into assets starting 5th November at the latest.
For now we will use a small test environment and placeholder objects for assets in Unity
Front View and Side View of the alien
This is a front and side view of our alien concept; the top image shows more of the fleshy/muscular parts to the alien. The bottom image shows more to do with the skeleton structureand how it may stand in idle position. Note how the alien and chicken simularities include the big thighs, skull shape, and the posture of the ribcage.
Subscribe to:
Posts (Atom)









