لرنینگ تی وی

طعم شیرین یادگیری

آموزش تصویری ساخت بازی اتومبیل رانی توسط یونیتی – قسمت هجدهم


تاریخ انتشار

تعداد نظرات

تعداد بازدید

زمان تقریبی مطالعه
27/مه/2013
۲۴۵۸ روز پیش
۲ دیدگاه ۲۲۳۲ ۲ دقیقه

ساخت بازی های ماشین سواریبا سلام خدمت دوستداران LearningTV.ir

امروز براتون قسمت هجدهم آموزش ساخت بازی های ماشین سواری رو قرار دادم.

اگه دقت کرده باشید موقعی که لاستیک ها به زمین برخورد می کنند درمحل برخورد مقدار گردوخاک بر خواهد خواست. در یونیتی سیستمی با نام Particle System داریم که توسط این امکان می توانیم گردوخاک و سایر سیستم های ذرات رو شبیه سازی کنیم…

توی این آموزش ما ابتدا به صورت خیلی ساده این سیستم ذرات را برای هر چهار چرخ خودرو طراحی خواهیم نمود.

در مرحله بعد می گیم این سیستم های ذرات در محل برخورد لاستیک با زمین قرار بگیرند. سپس با توجه به این که اصطکاک از یه مقداری بیشتر می شود می گیم که اگه اصطکاک از این مقدار بیشتر شد اون سیستم ذرات فعال بشه و در غیر این صورت اون سیستم ذرات غیر فعال بشه.

عمل فعال و غیر فعال شدن رو هم با گزینه ی Emit کنترل می کنیم.

ما بقی توضیحات رو بهتره که خودتون توی کلیپ ببینید.

کدهای #C استفاده شده دراسکریپت SkiddingScript:

using UnityEngine;
using System.Collections;

public class SkiddingScript : MonoBehaviour {
	private float CurrentFrictionValue;
	private float SkidAt=1.5f;
	public GameObject SkidSound;
	private float SoundEmition=10;
	private float SoundWait;
    public float MarkWidth = 0.2f;
    private int Skidding;
    private Vector3[] LastPosition = new Vector3[2];
    private int n;
    public Material SkidMaterial;
	public GameObject SkidSmoke;
	private float SkidDepth=0.4f;
	public bool RearWheel;
	// Use this for initialization
	void Start () {
		SkidSmoke.transform.position=transform.position;
		SkidSmoke.transform.position-=new Vector3(0,SkidDepth,0);
	}

	// Update is called once per frame
	void Update () {
		WheelHit hit;
		transform.GetComponent<WheelCollider>().GetGroundHit(out hit);
		CurrentFrictionValue=Mathf.Abs(hit.sidewaysSlip);
		float RPM=transform.GetComponent<WheelCollider>().rpm;
		if(SkidAt<=CurrentFrictionValue && SoundWait<=0 || RPM<300 && Input.GetAxis("Vertical")>0 && RearWheel==true)
		{
			Instantiate(SkidSound,hit.point,Quaternion.identity);
			SoundWait=1;
		}
		SoundWait-=Time.deltaTime*SoundEmition;
        if (SkidAt <= CurrentFrictionValue || RPM<50 && Input.GetAxis("Vertical")>0 && RearWheel==true && hit.collider)
        {
			SkidSmoke.particleEmitter.emit=true;
            SkidMesh();
        }
        else
        {
			SkidSmoke.particleEmitter.emit=false;
            Skidding = 0;
        }
	}

    void SkidMesh()
    {
        WheelHit hit;
        transform.GetComponent<WheelCollider>().GetGroundHit(out hit);
        GameObject mark = new GameObject("Mark");
        MeshFilter filter = mark.AddComponent<MeshFilter>();
        mark.AddComponent("MeshRenderer");
        Mesh MarkMesh = new Mesh();
        Vector3[] Vertices = new Vector3[4];
        int[] Triangles = new int[6];
        if (Skidding == 0)
        {
            Vertices[0] = hit.point + Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) * new Vector3(MarkWidth, 0.01f, 0);
            Vertices[1] = hit.point + Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) * new Vector3(-MarkWidth, 0.01f, 0);
            Vertices[2] = hit.point + Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) * new Vector3(-MarkWidth, 0.01f, 0);
            Vertices[3] = hit.point + Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) * new Vector3(MarkWidth, 0.01f, 0);
            LastPosition[0] = Vertices[2];
            LastPosition[1] = Vertices[3];
            Skidding = 1;
        }
        else
        {
            Vertices[0] = LastPosition[1];
            Vertices[1] = LastPosition[0];
            Vertices[2] = hit.point + Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) * new Vector3(-MarkWidth, 0.01f, 0);
            Vertices[3] = hit.point + Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) * new Vector3(MarkWidth, 0.01f, 0);
            LastPosition[0] = Vertices[2];
            LastPosition[1] = Vertices[3];
        }
        Triangles[0] = 0;
        Triangles[1] = 1;
        Triangles[2] = 2;
        Triangles[3] = 2;
        Triangles[4] = 3;
        Triangles[5] =0;
        MarkMesh.vertices = Vertices;
        MarkMesh.triangles = Triangles;
        MarkMesh.RecalculateNormals();
        Vector2[] UVM=new Vector2[4];
        UVM[0] = new Vector2(1, 0);
        UVM[1] = new Vector2(0, 0);
        UVM[2] = new Vector2(0, 1);
        UVM[3] = new Vector2(1, 1);

        MarkMesh.uv = UVM;
        filter.mesh = MarkMesh;
        mark.renderer.material = SkidMaterial;
        mark.AddComponent<DestroySkidMaterial>();
    }

}

[stextbox id=”Account_Sale”]جهت خرید این آموزش به مبلغ ۵۰۰ تومان می توانید از فرم زیر استفاده کنید.[/stextbox]

[parspalpaiddownloads id=”42″]

 

در ضمن دوستان سعی کنید نظر بدید. نظرات هستند که انگیزه ایجاد می کنند.

۲ نظر برای "آموزش تصویری ساخت بازی اتومبیل رانی توسط یونیتی – قسمت هجدهم"


  1. نوشته شده توسط  

    سلام من اول “قسمت پنج” رو خریدم که لینکش نیومد بعد که مشکل رو گفتم شما لطف کرید دوباره ایمیل کردید ولی حالا که من از قسمت “شش تا هیجده” (:no:) رو خریدم دوباره لینکش نیومد لطف می کنید همه لینکار رو برام ایمیل کنید
    با تشکر فراوان

    پاسخ

    پاسخ
    • نوشته شده توسط  

      باشه الان براتون ارسال می کنم

      با تشکر
      سید

      پاسخ پاسخ

ارسال دیدگاه

نام (*)
پست الکترونیکی (*)
وبسایت

مطالب مرتبط