var bloodFootprintL : GameObject; //prefab of left footprint
var bloodFootprintR : GameObject; //prefab of right footprint
var waterFootprintL : GameObject; //prefab of left footprint
var waterFootprintR : GameObject; //prefab of right footprint
var numberOfFootprints : int = 6;
var footprintLOffset = Vector3.zero;
var footprintROffset = Vector3.zero;
var layerMask : LayerMask = 0; // select layers for your footprints here
private var leftFoot : Transform; //left foot bone of your character
private var rightFoot : Transform; //right foot bone of your character
private var controller : CharacterController;
private var distance : float = 0.5;
private var footprintLTimer = -1.0;
private var footprintRTimer = -1.0;
private var numberL : int;
private var numberR : int;
private var stepNrL : int = 0;
private var stepNrR : int = 0;
private var start : boolean = false;
private var blood : boolean;
private var water : boolean;
private var rotationL : Quaternion;
private var rotationR : Quaternion;
function Start () {
controller = GetComponent(CharacterController);
legAnimator = GetComponent("LegAnimator");
for (var leg=0; leg<legAnimator.legs.Length; leg++) {
if (leg == 0)
leftFoot = legAnimator.legs[leg].ankle;
if (leg == 1)
rightFoot = legAnimator.legs[leg].ankle;
}
numberL = numberOfFootprints;
numberR = numberL;
}
function Update () {
legAnimator = GetComponent("LegAnimator");
if (numberL == 0 && numberR == 0) {
start = false;
}
if (start && controller.velocity.magnitude > 0.3) {
for (var leg=0; leg<legAnimator.legs.Length; leg++) {
if (leg == 0 && stepNrL == legAnimator.legStates[leg].stepNr-1 && numberL > 0 && Time.time > footprintLTimer) {
rotationL = leftFoot.rotation;
FootPrint (leftFoot);
stepNrL++;
numberL--;
footprintLTimer = Time.time + 0.3;
}
if (leg == 1 && stepNrR == legAnimator.legStates[leg].stepNr-1 && numberR > 0 && Time.time > footprintRTimer) {
rotationR = rightFoot.rotation;
FootPrint (rightFoot);
stepNrR++;
numberR--;
footprintRTimer = Time.time + 0.3;
}
}
}
}
function FootPrint (from : Transform) {
if (from == leftFoot) {
var positionL = leftFoot.position + footprintLOffset;
var hitL : RaycastHit;
if (Physics.Raycast(positionL, -Vector3.up, hitL, distance, layerMask.value)) {
var rotL = Quaternion.FromToRotation(Vector3.up, hitL.normal);
var angleL= Quaternion.Angle(rotationL, rotL);
var insL : GameObject;
if (blood)
insL = Instantiate(bloodFootprintL, hitL.point, rotL);
if (water)
insL = Instantiate(waterFootprintL, hitL.point, rotL);
insL.transform.Rotate(Vector3.up, angleL);
}
} else {
var positionR = rightFoot.position + footprintROffset;
var hitR : RaycastHit;
if (Physics.Raycast(positionR, -Vector3.up, hitR, distance, layerMask.value)) {
var rotR = Quaternion.FromToRotation(Vector3.up, hitR.normal);
var angleR= Quaternion.Angle(rotationR, rotR);
var insR : GameObject;
if (blood)
insR = Instantiate(bloodFootprintR, hitR.point, rotR);
if (water)
insR = Instantiate(waterFootprintR, hitR.point, rotR);
insR.transform.Rotate(Vector3.up, angleR);
}
}
}
function PrintsTrigger (com : String) {
legAnimator = GetComponent("LegAnimator");
for (var leg=0; leg<legAnimator.legs.Length; leg++) {
if (leg == 0)
stepNrL = legAnimator.legStates[leg].stepNr;
if (leg == 1)
stepNrR = legAnimator.legStates[leg].stepNr;
}
numberL = numberOfFootprints;
numberR = numberL;
if (com == "blood") {
blood = true;
water = false;
}
if (com == "water") {
blood = false;
water = true;
}
start = true;
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4