5a59d8e14f
14 newly-imported Synty Polygon packs (~2.46 GB; FBX/PNG/textures stored in Git LFS per .gitattributes). Enemy-grade characters: Werewolf, Kaiju, FantasyHeroCharacters, Vikings, Western, HorrorCarnival, Dog. Environment: Nature, NatureBiomes, PNB_Core, FantasyKingdom. UI/icons: Icons, InterfaceCore, InterfaceSciFiSoldierHUD. Werewolf + Kaiju back the DR-023 animated enemies; the rest are cataloged for future work in Docs/Vault/06_Roadmap/Synty_Asset_Inventory.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
473 lines
16 KiB
C#
473 lines
16 KiB
C#
/*
|
|
* POLYGON DOG ANIMATION SCRIPT
|
|
* DESCRIPTION: This script demonstrates the range of animations and Prefabs included in
|
|
* Polygon Dog which can be customized for the users preference. Please attach this to the
|
|
* Dog.Prefab asset then customize the keys for the particular animations.
|
|
*
|
|
* PLEASE NOTE: This script is intended for demonstration purposes and user customization or
|
|
* third party animation plugins will be required for further animation options.
|
|
*
|
|
*/
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
public class POLYGON_DogAnimationController : MonoBehaviour
|
|
{
|
|
public enum DogTypeList
|
|
{
|
|
Coyote,
|
|
Dalmatian,
|
|
DalmatianCollar,
|
|
Doberman,
|
|
DobermanCollar,
|
|
Fox,
|
|
GermanShepherd,
|
|
GermanShepherdCollar,
|
|
GoldenRetriever,
|
|
GoldenRetrieverCollar,
|
|
DogGreyhound,
|
|
GreyhoundCollar,
|
|
HellHound,
|
|
Husky,
|
|
HuskyCollar,
|
|
Labrador,
|
|
LabradorCollar,
|
|
Pointer,
|
|
PointerCollar,
|
|
Ridgeback,
|
|
RidgebackCollar,
|
|
Robot,
|
|
Scifi,
|
|
Shiba,
|
|
Shiba_Collar,
|
|
Wolf,
|
|
ZombieDoberman,
|
|
ZombieGermanShepherd
|
|
};
|
|
public bool DisplayUI = true; // Toggle displaying UI
|
|
private GameObject DogObject;
|
|
Transform[] children;
|
|
[Header("Action Keys")]
|
|
public KeyCode Attack = KeyCode.Mouse0; // Mouse Left-Click Attack
|
|
public KeyCode secondAttack = KeyCode.Mouse1; // Mouse Right-Click Attack
|
|
public KeyCode forward = KeyCode.W; // Move forward
|
|
public KeyCode backward = KeyCode.S; // Move backward
|
|
public KeyCode left = KeyCode.A; // Move left
|
|
public KeyCode right = KeyCode.D; // Move left
|
|
public KeyCode action = KeyCode.F; // action
|
|
public KeyCode jump = KeyCode.Space; // Jump
|
|
public KeyCode run = KeyCode.LeftShift; // Run
|
|
public KeyCode sit = KeyCode.LeftControl; // Sit
|
|
public KeyCode sleep = KeyCode.Q; // Sleep
|
|
public KeyCode ExitPlaymode = KeyCode.Escape; // Escape playmode
|
|
public KeyCode Death = KeyCode.X; // Death
|
|
public KeyCode Reset = KeyCode.R; // Reset dog
|
|
[Header("Custom Actions")]
|
|
public KeyCode action1 = KeyCode.Alpha1;
|
|
public KeyCode action2 = KeyCode.Alpha2;
|
|
public KeyCode action3 = KeyCode.Alpha3;
|
|
public KeyCode action4 = KeyCode.Alpha4;
|
|
public KeyCode action5 = KeyCode.Alpha5;
|
|
public KeyCode action6 = KeyCode.Alpha6;
|
|
public KeyCode action7 = KeyCode.Alpha7;
|
|
public KeyCode action8 = KeyCode.Alpha8;
|
|
public KeyCode action9 = KeyCode.Alpha9;
|
|
public KeyCode action10 = KeyCode.Alpha0;
|
|
public KeyCode action11 = KeyCode.F1;
|
|
public KeyCode action12 = KeyCode.F2;
|
|
public KeyCode action13 = KeyCode.F3;
|
|
static private KeyCode[] dogKeyCodes; // Keycode array for assigned keys
|
|
static private string[] dogLabels;
|
|
static private string[] DogNewTypes; // Dog Types
|
|
Animator dogAnim;// Animator for the assigned dog
|
|
bool dogActionEnabled;
|
|
public float timeRemaining = 1.0f;
|
|
private int countDown = 1;
|
|
bool Movement_f;
|
|
bool death_b = false;
|
|
bool Sleep_b = false;
|
|
bool Sit_b = false;
|
|
private float w_movement = 0.0f; // Run value
|
|
public float acceleration = 1.0f;
|
|
public float decelleration = 1.0f;
|
|
private float maxWalk = 0.5f;
|
|
private float maxRun = 1.0f;
|
|
private float currentSpeed;
|
|
private Transform getDogName;
|
|
private GUIStyle guiStyle = new GUIStyle();
|
|
[Header("Particle FX")]
|
|
public ParticleSystem poopFX;
|
|
public ParticleSystem dirtFX;
|
|
public ParticleSystem peeFX;
|
|
public ParticleSystem waterFX;
|
|
private Vector3 newSpawn = new Vector3();
|
|
public Transform fxTransform;
|
|
public Transform fxTail;
|
|
void Start() // On start store dogKeyCodes
|
|
{
|
|
dogAnim = GetComponent<Animator>(); // Get the animation component
|
|
currentSpeed = 0.0f;
|
|
DogNewTypes = new string[]
|
|
{
|
|
"Coyote",
|
|
"Dalmatian",
|
|
"DalmatianCollar",
|
|
"Doberman",
|
|
"DobermanCollar",
|
|
"Fox",
|
|
"GermanShepherd",
|
|
"GermanShepherdCollar",
|
|
"GoldenRetriever",
|
|
"GoldenRetrieverCollar",
|
|
"DogGreyhound",
|
|
"GreyhoundCollar",
|
|
"HellHound",
|
|
"Husky",
|
|
"HuskyCollar",
|
|
"Labrador",
|
|
"LabradorCollar",
|
|
"Pointer",
|
|
"PointerCollar",
|
|
"Ridgeback",
|
|
"RidgebackCollar",
|
|
"Robot",
|
|
"Scifi",
|
|
"Shiba",
|
|
"Shiba_Collar",
|
|
"Wolf",
|
|
"ZombieDoberman",
|
|
"ZombieGermanShepherd"
|
|
};
|
|
dogKeyCodes = new KeyCode[]
|
|
{
|
|
Attack,
|
|
secondAttack,
|
|
forward,
|
|
backward,
|
|
left,
|
|
right,
|
|
action,
|
|
jump,
|
|
run,
|
|
sit,
|
|
sleep,
|
|
ExitPlaymode,
|
|
Death,
|
|
Reset,
|
|
action1,
|
|
action2,
|
|
action3,
|
|
action4,
|
|
action5,
|
|
action6,
|
|
action7,
|
|
action8,
|
|
action9,
|
|
action10,
|
|
action11,
|
|
action12,
|
|
action13
|
|
};
|
|
dogLabels = new string[] // Labels for UI
|
|
{
|
|
"Attack: ",
|
|
"Second Attack: ",
|
|
"Forward: ",
|
|
"Backward: ",
|
|
"Left: ",
|
|
"Right: ",
|
|
"Action: ",
|
|
"Jump: ",
|
|
"Run: ",
|
|
"Sit: ",
|
|
"Sleep: ",
|
|
"Exit Playmode: ",
|
|
"Death: ",
|
|
"Reset: ",
|
|
"Action 1: ",
|
|
"Action 2: ",
|
|
"Action 3: ",
|
|
"Action 4: ",
|
|
"Action 5: ",
|
|
"Action 6: ",
|
|
"Action 7: ",
|
|
"Action 8: ",
|
|
"Action 9: ",
|
|
"Action 10: ",
|
|
"Action 11: ",
|
|
"Action 12: ",
|
|
"Action 13: "
|
|
};
|
|
guiStyle.fontSize = 18;
|
|
guiStyle.normal.textColor = Color.black;
|
|
children = GetComponentsInChildren<Transform>();
|
|
for (int x = 0; x < children.Length; x++) // Search for dog names
|
|
{
|
|
if (children[x].name.Contains("Dogs"))
|
|
{
|
|
getDogName = children[x];
|
|
}
|
|
}
|
|
newSpawn = new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z);
|
|
}
|
|
IEnumerator DogActions(int actionType) // Dog action coroutine
|
|
{
|
|
dogActionEnabled = true; // Enable the dog animation flag
|
|
dogAnim.SetInteger("ActionType_int", actionType); // Enable Animation
|
|
yield return new WaitForSeconds(countDown); // Countdown
|
|
dogAnim.SetInteger("ActionType_int", 0); // Disable animation
|
|
dogActionEnabled = false; // Disable the dog animation flag
|
|
}
|
|
void OnGUI()
|
|
{
|
|
if(DisplayUI) // Display Dog keycodes on UI
|
|
{
|
|
GUI.backgroundColor = Color.yellow;
|
|
for (int i = 0; i < dogKeyCodes.Length; i++)
|
|
{
|
|
GUI.Label(new Rect(10, 10 + (i * 30), 400, 30), dogLabels[i] + " " + dogKeyCodes[i].ToString(), guiStyle);
|
|
}
|
|
}
|
|
}
|
|
void Update()
|
|
{
|
|
bool attackMode = Input.GetKey(dogKeyCodes[0]); // Get the current keycodes assigned by user
|
|
bool secondAttack = Input.GetKey(dogKeyCodes[1]);
|
|
bool walkPressed = Input.GetKey(dogKeyCodes[2]);
|
|
bool turnBack = Input.GetKey(dogKeyCodes[3]);
|
|
bool leftTurn = Input.GetKey(dogKeyCodes[4]);
|
|
bool rightTurn = Input.GetKey(dogKeyCodes[5]);
|
|
bool randActionPressed = Input.GetKeyDown(dogKeyCodes[6]);
|
|
bool jumpPressed = Input.GetKeyDown(dogKeyCodes[7]);
|
|
bool runPressed = Input.GetKey(dogKeyCodes[8]);
|
|
bool sitPressed = Input.GetKeyDown(dogKeyCodes[9]);
|
|
bool sleepPressed = Input.GetKeyDown(dogKeyCodes[10]);
|
|
bool exitPressed = Input.GetKeyDown(dogKeyCodes[11]);
|
|
bool deathPressed = Input.GetKeyDown(dogKeyCodes[12]);
|
|
bool resetPressed = Input.GetKeyDown(dogKeyCodes[13]);
|
|
bool a1Pressed = Input.GetKey(dogKeyCodes[14]);
|
|
bool a2Pressed = Input.GetKey(dogKeyCodes[15]);
|
|
bool a3Pressed = Input.GetKey(dogKeyCodes[16]);
|
|
bool a4Pressed = Input.GetKey(dogKeyCodes[17]);
|
|
bool a5Pressed = Input.GetKey(dogKeyCodes[18]);
|
|
bool a6Pressed = Input.GetKey(dogKeyCodes[19]);
|
|
bool a7Pressed = Input.GetKey(dogKeyCodes[20]);
|
|
bool a8Pressed = Input.GetKey(dogKeyCodes[21]);
|
|
bool a9Pressed = Input.GetKey(dogKeyCodes[22]);
|
|
bool a10Pressed = Input.GetKey(dogKeyCodes[23]);
|
|
bool a11Pressed = Input.GetKey(dogKeyCodes[24]);
|
|
bool a12Pressed = Input.GetKey(dogKeyCodes[25]);
|
|
bool a13Pressed = Input.GetKey(dogKeyCodes[26]);
|
|
if (attackMode)
|
|
{
|
|
dogAnim.SetBool("AttackReady_b", true);
|
|
}
|
|
else
|
|
{
|
|
dogAnim.SetBool("AttackReady_b", false);
|
|
}
|
|
if (secondAttack)
|
|
{
|
|
dogAnim.SetInteger("AttackType_int", 2);
|
|
}
|
|
else
|
|
{
|
|
dogAnim.SetInteger("AttackType_int", 0);
|
|
}
|
|
if (randActionPressed)
|
|
{
|
|
float currentSpeed = a1Pressed ? 1 : maxWalk;
|
|
dogAnim.SetInteger("ActionType_int", Random.Range(0, 13));
|
|
}
|
|
if (runPressed)
|
|
{
|
|
currentSpeed = maxRun;
|
|
}
|
|
if (!runPressed)
|
|
{
|
|
currentSpeed = maxWalk;
|
|
}
|
|
if (walkPressed && (w_movement < currentSpeed)) // If walking
|
|
{
|
|
w_movement += Time.deltaTime * acceleration;
|
|
}
|
|
if (walkPressed && !runPressed && w_movement > currentSpeed) // Slow down
|
|
{
|
|
w_movement -= Time.deltaTime * decelleration;
|
|
|
|
}
|
|
if (!walkPressed && w_movement > 0.0f) // If no longer walking
|
|
{
|
|
w_movement -= Time.deltaTime * decelleration;
|
|
}
|
|
if (leftTurn)
|
|
{
|
|
if (w_movement > 0.25 && w_movement < 0.75)
|
|
{
|
|
transform.Rotate(Vector3.up * Time.deltaTime * -45, Space.Self);
|
|
}
|
|
if (w_movement > 0.75)
|
|
{
|
|
transform.Rotate(Vector3.up * Time.deltaTime * -65, Space.Self);
|
|
}
|
|
if (w_movement < 0.25)
|
|
{
|
|
dogAnim.SetInteger("TurnAngle_int", -90);
|
|
}
|
|
}
|
|
else if (rightTurn)
|
|
{
|
|
if (w_movement > 0.25 && w_movement < 0.75)
|
|
{
|
|
transform.Rotate(-Vector3.down * Time.deltaTime * 45, Space.Self);
|
|
}
|
|
if (w_movement > 0.75)
|
|
{
|
|
transform.Rotate(-Vector3.down * Time.deltaTime * 65, Space.Self);
|
|
}
|
|
if (w_movement < 0.25)
|
|
{
|
|
dogAnim.SetInteger("TurnAngle_int", 90);
|
|
}
|
|
}
|
|
else if (turnBack)
|
|
{
|
|
dogAnim.SetInteger("TurnAngle_int", 180);
|
|
}
|
|
else
|
|
{
|
|
dogAnim.SetInteger("TurnAngle_int", 0);
|
|
}
|
|
if (randActionPressed)
|
|
{
|
|
StartCoroutine(DogActions(Random.Range(1, 13)));
|
|
}
|
|
if (jumpPressed)
|
|
{
|
|
dogAnim.SetTrigger("Jump_tr");
|
|
}
|
|
if (sitPressed) // Sit
|
|
{
|
|
if (Sit_b == false)
|
|
{
|
|
Sit_b = true;
|
|
}
|
|
else if (Sit_b == true)
|
|
{
|
|
Sit_b = false;
|
|
}
|
|
dogAnim.SetBool("Sit_b", Sit_b); // Set sit animation
|
|
}
|
|
if (sleepPressed) // Sleep
|
|
{
|
|
if (Sleep_b == false)
|
|
{
|
|
Sleep_b = true;
|
|
}
|
|
else if (Sleep_b == true)
|
|
{
|
|
Sleep_b = false;
|
|
}
|
|
dogAnim.SetBool("Sleep_b", Sleep_b); // Set sleep animation
|
|
}
|
|
if (exitPressed)
|
|
{
|
|
|
|
#if UNITY_EDITOR
|
|
UnityEditor.EditorApplication.isPlaying = false;
|
|
#elif UNITY_WEBPLAYER
|
|
Application.OpenURL(webplayerQuitURL);
|
|
#else
|
|
Application.Quit();
|
|
#endif
|
|
}
|
|
if (deathPressed)
|
|
{
|
|
dogAnim.SetBool("Death_b", true); // Kill the dog
|
|
}
|
|
if (resetPressed)
|
|
{
|
|
dogAnim.Rebind();
|
|
dogAnim.Update(0f);
|
|
}
|
|
if (a1Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(1));
|
|
}
|
|
if (a2Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(2));
|
|
}
|
|
if (a3Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(3));
|
|
}
|
|
if (a4Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(4));
|
|
if(!Sit_b)
|
|
{
|
|
ParticleSystem go = Instantiate(dirtFX, new Vector3(this.transform.position.x, fxTransform.transform.position.y, fxTransform.transform.position.z), this.transform.rotation);
|
|
go.transform.SetParent(fxTransform);
|
|
go.transform.localPosition = new Vector3(go.transform.localPosition.x, go.transform.localPosition.y, go.transform.localPosition.z + 0.3f);
|
|
}
|
|
}
|
|
if (a5Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(5));
|
|
}
|
|
if (a6Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(6));
|
|
}
|
|
if (a7Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(7));
|
|
}
|
|
if (a8Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(8));
|
|
if(!Sit_b)
|
|
{
|
|
ParticleSystem go = Instantiate(peeFX, new Vector3(this.transform.position.x, fxTransform.transform.position.y + 0.5f, fxTransform.transform.position.z - 0f), this.transform.rotation);
|
|
go.transform.SetParent(fxTransform);
|
|
go.transform.localPosition = new Vector3(go.transform.localPosition.x, go.transform.localPosition.y, go.transform.localPosition.z - 0.2f);
|
|
go.transform.localRotation = Quaternion.Euler(0, -45, 0);
|
|
}
|
|
}
|
|
if (a9Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(9));
|
|
if(!Sit_b)
|
|
{
|
|
ParticleSystem go = Instantiate(poopFX, new Vector3(this.transform.position.x, fxTransform.transform.position.y + 0.5f, fxTransform.transform.position.z - 0f), this.transform.rotation);
|
|
go.transform.SetParent(fxTransform);
|
|
go.transform.localPosition = new Vector3(go.transform.localPosition.x, go.transform.localPosition.y, go.transform.localPosition.z - 0.35f);
|
|
}
|
|
}
|
|
if (a10Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(10));
|
|
if(!Sit_b)
|
|
{
|
|
ParticleSystem go = Instantiate(waterFX, new Vector3(this.transform.position.x, fxTransform.transform.position.y + 0.5f, fxTransform.transform.position.z - 0f), this.transform.rotation);
|
|
go.transform.SetParent(fxTransform);
|
|
go.transform.localPosition = new Vector3(go.transform.localPosition.x, go.transform.localPosition.y - 0.0f, go.transform.localPosition.z);
|
|
go.gameObject.transform.GetChild(0).transform.position = new Vector3(fxTail.transform.position.x, fxTail.transform.position.y, fxTail.transform.position.z);
|
|
}
|
|
}
|
|
if (a11Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(11));
|
|
}
|
|
if (a12Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(12));
|
|
}
|
|
if (a13Pressed && !dogActionEnabled)
|
|
{
|
|
StartCoroutine(DogActions(13));
|
|
}
|
|
dogAnim.SetTrigger("Blink_tr"); // Blink will continue unless asleep or dead
|
|
dogAnim.SetFloat("Movement_f", w_movement); // Set movement speed for all required parameters
|
|
}
|
|
} |