9 Звуки шагов в зависимости от поверхности по которой мы движемся

using UnityEngine;
using System.Collections;
[System.Serializable]
public class Surface
{
	public PhysicMaterial material;
	public AudioClip[] sound;
	public int SoundNumber;
}
public class Steps : MonoBehaviour 
{
	public bool grounded;
	public float disttoground;
	public Surface[] materials;
	private PhysicMaterial curentmaterial;
	private float _forwardTimeout;
	public float ForwardTimeout;
	private float _horizantalTimeout;
	public float HorizantalTimeout;
	
	void Update () 
	{
		if(Input.GetAxis("Vertical")>0.1f&grounded==true||Input.GetAxis("Vertical")<-0.1f&grounded==true)
		{
			
			_forwardTimeout += Time.deltaTime;
			if(_forwardTimeout > ForwardTimeout)
			{
				PlayAudio();
				_forwardTimeout = 0;
			}
		}
		else
		{
			_forwardTimeout = 0;
		}
		if(Input.GetAxis("Horizontal")>0.1f&Input.GetAxis("Vertical")==0&grounded==true||Input.GetAxis("Horizontal")<-0.1f&Input.GetAxis("Vertical")==0&grounded==true)
		{
			_horizantalTimeout += Time.deltaTime;
			if(_horizantalTimeout > HorizantalTimeout)
			{
				PlayAudio();
				_horizantalTimeout = 0;
			}
		}
		else
		{
			_horizantalTimeout = 0;
		}
		
		RaycastHit Hit;
		if(Physics.Raycast(transform.position,-Vector3.up,out Hit,disttoground+0.5f))
		{
			curentmaterial = Hit.collider.material;
			grounded = true;
		}
		else
		{
			grounded = false;
		}
	}
	void PlayAudio()
	{
		for(int i = 0; i < materials.Length; i++)
		{
			if(materials[i].material.staticFriction == curentmaterial.staticFriction)
			{
				audio.clip = materials[i].sound[materials[i].SoundNumber];
				materials[i].SoundNumber += 1;
				if(materials[i].SoundNumber>=materials[i].sound.Length)
				{
					materials[i].SoundNumber = 0;
				}
			}
		}
		audio.Play();
	}
}

Комментарии к этому посту

  • WoYsFuL
    15.07.2014 at 16:14

    СУПЕР !!!!!


  • Valentine
    04.01.2015 at 22:46

    Супер у меня все получилось! Вот только есть проблема((( Почему оно не хочет работать на терейне?((
    Выбывает ошибку :
    Setting the Material property is not supported for Colliders of type TerrainCollider.
    UnityEngine.Collider:get_material()
    Steps:Update() (at Assets/Scripts dla shagov/Steps.cs:54)
    Что с ней сделать??? Помогите пожалуйста


  • 24.02.2016 at 18:36

    Скрипт не работает, при запуске билда игры, в чем проблема? Если в редакторе Unity3D всё работает идеально?



Оставить комментарий