«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
یونیتی+unity3d+uity2d+پکیج :: گیم اور _ بازیسازی با unity + مطالب متفرقه

گیم اور _ بازیسازی با unity + مطالب متفرقه

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

به نام خدا
--
گروه قدیم ما promakers.ir یا پرومیکرز بود که بالای هزار اموزش توش ساخته بودم به اسم sajjad3011 ولی حیف ادمین سایتش عوض کرد
حالا سوالی بود کاری بود این شمارمه

قدیمیا دلم براتون تنگ شده... فقط معرفی کنید توی پیامک یا تماس یاد بیارید.
اگه جواب ندادم شاید موقعیت نداشته باشم.
بگید توی پیام از بچه های پرومیکرز هستید.

---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته
دوست داشتید شماره بذارید تو واتساپ یا ایتا یا .... گروه بزنیم.
09358077198

بایگانی
پیوندها

۷۲۶ مطلب با موضوع «یونیتی+unity3d+uity2d+پکیج» ثبت شده است

۲ نظر موافقین ۱ مخالفین ۰ ۲۱ ارديبهشت ۹۵ ، ۰۲:۵۱
مدیرکل

gameover.blog.ir

۰ نظر موافقین ۰ مخالفین ۰ ۱۶ ارديبهشت ۹۵ ، ۰۱:۴۰
مدیرکل

gameover.blog.ir

برای اینکه تکستچر کش نیاد:

http://s6.picofile.com/file/8249483392/legacyShaders_bumped_Diffuse_tiling_offset.jpg

شما باید رو تکسچری که ایمپورت کردید کلیک کنید و از روی 2d sprite به texture تغییر بدین و از وارپ مود گزینه repeat رو بزنیین و apply کنید.

تکستچر رو هم باید بندازید روی یک متریال فکر کنم. بعدش متریال رو drag کن روی ابجکت دلخواه.

۱ نظر موافقین ۰ مخالفین ۰ ۱۲ ارديبهشت ۹۵ ، ۰۳:۰۳
مدیرکل
gameover.blog.ir

@gameoverblog

سوال)یونیتی با چه زبانی ساخته شده است ؟

پاسخ) سیشارپ و سی پلاس پلاس c++ & csharp

منبع :
https://en.wikipedia.org/wiki/Unity_%28game_engine%29
۲ نظر موافقین ۰ مخالفین ۰ ۰۴ ارديبهشت ۹۵ ، ۱۹:۳۴
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۲۱ فروردين ۹۵ ، ۱۳:۴۴
مدیرکل

gameover.blog.ir

به لینک زیر برید و چند ثانیه صبر کنید سپس رد تبلیغ رو بزنید.

اسکریپت سیشارپ هست.

http://opizo.com/TQDxtX

برای لرزش دوربین پس از انفجار x و y و یکم حرکت بدید تا دوربین تکون بخوره .
روش دیگه اینه که می تونید یک انیمیشن ساده هم بدید به دوربین یه لحظه سریع تکون بخوره..

۱ نظر موافقین ۰ مخالفین ۰ ۱۴ فروردين ۹۵ ، ۱۲:۱۴
مدیرکل

GAMEOVER.BLOG.IR

به لینک برید و چند ثانیه منتظر بمونید سپ رد تبلیغ رو بزنید.


اسکریپت اول:

http://opizo.com/VhOzxE

اسکریپت دوم:

در این اسکریپ مهم نیست دوربین orthographic باشه یا perpective.

http://s6.picofile.com/file/8245501926/pinch_zoom_and_panning_in_unity_2d_and_unity3d.jpg

http://opizo.com/SKCz8J

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ فروردين ۹۵ ، ۰۸:۴۰
مدیرکل

gameover.blog.ir

حرکت پلیر سه بعدی با استفاده از کاراکتر کنترلر و دستور Input.GetAxis("Horizontal") بدون افت فریم ریت:

دستور Input.GetAxis  چیست و چگونه کار می کند؟

این دستور کلیدهای افقی و عمودی WASD رو چک می کنه.

اگه هیچکدوم فشرده نبود صفر 0 برگشت میده ویلا یا منفی یک -1 یا  مثبت یک +1 برگشت میده.


WS بالا پایین یا عمودی
AD چپ و راست یا افقی
خودمون تعیین می کنیم کدوم رو چک کنه.


 اگه افقی فلش چپ و راست AD باید ورودی بدیم horizontal .


مثال:

Input.GetAxis("Horizontal")


 اگه عمودی  فلش بالا پایین WS باید ورودی بدیم vertical .

مثال:

Input.GetAxis("Vertical")

حالا کجا ازش استفاده میشه؟

برای حرکت کاراکتر میایم xz رو تنظیم می کنیم. x یعنی چپ راست و z یعنی جلو عقب بر حسب مثبت یا منفی بودن مقداری که بهشون میدیم.

پس برای مثال داریم:

moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0,Input.GetAxis("Vertical"));

چون محاسبات محلی هست بایستی به جهانی تبدیل کنیم. پس داریم:

moveDirection = transform.TransformDirection(moveDirection);



دستور Transform Direction، مقادیر XYZ محلی را به مقادیر جهانی تبدیل میکنه.

بعدش یه فاکتور یا متغیر سرعت هم که قبلا باید تعریف کنیم در اون ضرب می کنیم تا مقدار زیاد بشه :

moveDirection *= speed;

در نهایت ازش استفاده میکنیم.


مثلا برای پرش میایم y رو تنظیم می کنیم:


if (Input.GetButton ("Jump")) {
moveDirection.y = jumpSpeed;
}


jumpSpeed هم متغیری هست قبلا فرض کردیم تعریف شده و سرعت پرش رو مشخص می کنه.

نکته: در حالت پیش فرض، کلید پرش، کلید space است.

ولی شخصیت ما چطوری بعد از پرش به زمین فرود بیاد؟

فرض می کنیم  player ما کامپوننت    rigidBody نداره .پس شرط بذارید تا زمانیکه y از صفر بیشتر بود این خط اجرا بشه:


moveDirection.y -= gravity * Time.deltaTime;


gravity هم جاذبه هست و از قبل تعریف می کنیم.

Time.deltaTime باعث میشه y طبق زمان کم بشه نه در فریم.(پس یه حرکت فرود نرم تر خواهد داشت)

در نهایت بای یک متغیر از نوع CharacterController  بسازید و کامپوننت کاراکتر کنترلر بدید به player و drag کنید روی این متغیر:

public CharacterController controller;


برای حرکت نهایی هم این کد رو بنویسید:

controller.Move (moveDirection * Time.deltaTime) ;




این هم یک اسکریپت ساده برای پرش و حرکت کاراکتر با استفاده از space و فلش های جهت نما(نکته:یک کامپوننت Character Controller بدید به Player و بعدش این اسکریپت زیر رو):

using UnityEngine;
using System.Collections;
public class RotateCamera : MonoBehaviour {
		private Vector3 moveDirection = Vector3.zero;
		void  Update (){
			float speed=5;
			float jumpSpeed=5;
			float gravity=5;
			float x,y,z;
			CharacterController controller = GetComponent<CharacterController>();
			if (controller.isGrounded) {
				// We are grounded, so recalculate
				// move direction directly from axes
				moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
				moveDirection = transform.TransformDirection(moveDirection);
				moveDirection *= speed;
				
				if (Input.GetButton ("Jump")) {
					moveDirection.y = jumpSpeed;
				}
			}
			// Apply gravity
			moveDirection.y -= gravity * Time.deltaTime;        
			// Move the controller
			controller.Move(moveDirection * Time.deltaTime);  
		} 
	}



۰ نظر موافقین ۰ مخالفین ۰ ۱۴ فروردين ۹۵ ، ۰۷:۳۴
مدیرکل
gameover.blog.ir
به لینک زیر برید و چند ثانیه صبر کنید سپس رد تبلیغ بزنید:
http://opizo.com/rmdTsK

۰ نظر موافقین ۰ مخالفین ۰ ۱۲ فروردين ۹۵ ، ۲۲:۲۳
مدیرکل
gameover.blog.ir
http://soumidelrio.com/wp-content/uploads/2014/07/big21.png
http://opizo.com/MvHcRF




۰ نظر موافقین ۰ مخالفین ۰ ۱۲ فروردين ۹۵ ، ۲۲:۰۴
مدیرکل

gameover.blog.ir

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(AudioSource))]
public class ExampleClass : MonoBehaviour {
    public AudioClip clip;
    void Start() {
        AudioSource.PlayClipAtPoint(clip, new Vector3(5, 1, 2));
    }
}

دستور [RequireComponent(typeof(AudioSource))] بدون نقطه ویرگول در انتها باعث میشه کامپوننت اودیوسورس خودکار اضافه بشه یا اگه اضافه بشه دیگه نشه حذفش کرد از inspector .
۰ نظر موافقین ۰ مخالفین ۰ ۱۱ فروردين ۹۵ ، ۰۲:۲۱
مدیرکل

gameover.blog.ir

void Start () {
    StartCoroutine ("Countdown", 10);
}

private IEnumerator Countdown(int time){
    while(time>0){
        Debug.Log(time--);
        yield return new WaitForSeconds(1);
    }
    Debug.Log("Countdown Complete!");
}
۴ نظر موافقین ۰ مخالفین ۰ ۱۱ فروردين ۹۵ ، ۰۰:۳۲
مدیرکل

gameover.blog.ir

برای اینکار باید متغیر Z از پوزیشن دوربین رو زیاد و کم کنید تا دوربین نزدیک یا دور بشه.

مثال:

اسکریپتی بسازید و بدید به دوربین اصلی و این کد رو در تابع آپدیت بذارید(با کلید A و S تست کنید بعد از اجرا):

 void Update(){
        if (Input.GetKey (KeyCode.A)) {
            this.transform.position+=new Vector3(0,0,1);
        }
        if (Input.GetKey (KeyCode.S)) {
            this.transform.position-=new Vector3(0,0,1);
        }
    }
۰ نظر موافقین ۰ مخالفین ۰ ۰۷ فروردين ۹۵ ، ۰۲:۵۶
مدیرکل

gameover.blog.ir

نکته: اگه دانلود نشد با شیلتر فکن باز کنید

http://s6.picofile.com/file/8254508726/aslahe_ba_tofang_with_12Animation.jpg

به لینک زیر رفته 14 ثانیه صبر کرده سپس رد تبلیغ بزنید:


http://opizo.com/ToWitk

۱ نظر موافقین ۰ مخالفین ۰ ۰۵ فروردين ۹۵ ، ۰۲:۲۱
مدیرکل

gameover.blog.ir

http://s7.picofile.com/file/8244216300/rotateCubes_and_Animation.jpg

به لینک زیر برید چند ثانیه صبر کنید سپس رد تبلیغ رو بزنید:

http://opizo.com/OTm4zd

۰ نظر موافقین ۰ مخالفین ۰ ۰۲ فروردين ۹۵ ، ۰۲:۰۰
مدیرکل

gameover.blog.ir

آنتی آلیاس اگه 1 و 2 و 4 باشه به ترتیب مضاعف میشه و پیکسلی بودن گوشه های مدل رو حذف می کنه و کیفیت میره بالا اما پردزش سنگین میشه و بازی تیک و لگ بر می داره و ممکنه بعضی وقتا کرش کنه.

بدون آنتی آلیاس گوشه ها دندانه دار یا در اصطلاح jagged میشه(اما پردزش بهتره):
[تصویر: without_antiAliasing_jagged.jpg]
بدون آنتی آلیاس:
[تصویر: with_anti_aliasing.jpg]

برای رفع این مشکل آنتی آلیاسینگ رو صفر می کنیم:

QualitySettings.antiAliasing = 0;
۰ نظر موافقین ۰ مخالفین ۰ ۰۱ فروردين ۹۵ ، ۱۳:۲۴
مدیرکل

gameover.blog.ir

سورس انگری بردز ساده در یونیتی 5.1.0f3


دوستانی که فحش میدن می گن سورس رایگانه.عیبی نداره اینم واسه شمایی که از وضعیت مالی بنده خبر ندارید. تا اینجای کار بگم یه کاربر بیکار هستم که وضع مالیم به شدت بد هست و گاهی که می بیند سورسی می ذارم به خاطر اینه که منبع درآمد ثابتی ندارم و خودم هم بیکارم. عیبی نداره متشکرم از فحش های خوبتان. بفرمایید:

http://opizo.com/QVTico


۰ نظر موافقین ۰ مخالفین ۰ ۰۱ فروردين ۹۵ ، ۱۲:۳۵
مدیرکل

gameover.blog.ir


GetComponent رو توی آپدیت ننویسید سعی کنید کش کنید
cache یعنی ادرس محسابه شده ی حافظه رو بریزید تو متغیر دیگه و از اون رفرنس استفاده کنیدبعد از _transform استفاده کنید. برای ریجید بادی هم همین تکنیک رو بکار بگیرید
تو استارت که می ذاری یک بار می ره آدرس حافظه رو پیدا می کنه.

void Start(){      
  _transform = this.transform;//cache for optimization
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۹ اسفند ۹۴ ، ۱۷:۰۴
مدیرکل

gameover.blog.ir

یعنی محدود کردن. مثلا متغیری رو با تابع Clamp بین 1 و 10 محدود می کنیم تا اگه مقداری کمتر یا بیشتر بود در inspector به طور خودکار به میزان حداکثر یا حداقل تنظیم بشه.

۰ نظر موافقین ۰ مخالفین ۰ ۲۸ اسفند ۹۴ ، ۱۸:۴۳
مدیرکل

gameover.blog.ir

دقت کنید برای اینکار یک اشعه یا ray باید به سمت جلو یا forward تا فاصله(distace) دلخواه پرتاب کنیم. در صورتی که برخورد صورت گرفت باید تشخیص بدیم با چی برخورد انجام شده. برای اینکار ابتدا به درب یک برچسب یا تگ(tag) دلخواه مثلا door می دیم. سپس از طریق کد بررسی می کنیم اگر با درب برخورد داشتیم یا درب روبروی دید دوربین بود انیمیشن باز شدن درب اجرا بشه.

نکته ی مهم: شما باید گزینه ی loopTime از انیمیشن خودتون رو در inspector غیرفعال کنید تا انیمیشن تکرار نشه.

bool isOpen=false;
float distance=3f;
 void myRaycast(){ RaycastHit hit; Ray myRay = new Ray(transform.position, Vector3.forward); if(Physics.Raycast (myRay, out hit, distance)){ if(hit.collider.tag == "door" && isOpen==false){ Animation.Play("openDoor"); isOpen=true; }//if internal }//if external }//myRaycast()




۰ نظر موافقین ۰ مخالفین ۰ ۲۶ اسفند ۹۴ ، ۲۳:۴۷
مدیرکل

gameover.blog.ir

http://s6.picofile.com/file/8243648726/Tactical_Shooter_AI_v1_11.jpg

نکته: برای اجرای این پکیج باید یونیتی 5.3.2 نصب داشته باشید.



۴ نظر موافقین ۰ مخالفین ۰ ۲۶ اسفند ۹۴ ، ۲۲:۲۲
مدیرکل

gameover.blog.ir

این تنظیمات در منوی Edit | Graphics Emulation هست. برای انتخاب شبیه ساز کارت های گرافیکی ایکس باکس و کنسول و اینتل و ان ویدیا و موبایل و غیره.

البته شبیه ساز ها کمی سیستم رو کند می کنن(مثل برنامه blue Stacj وسه شبیه سازی اندروید روی سیستم که سخت افزار رو شبیه سازی می کنن)


Shader Model 2

  • NVIDIA cards since 2003 (GeForce FX)
  • AMD cards since 2004 (Radeon 9500)
  • Intel cards since 2005 (GMA 900)
  • Mobile: OpenGL ES 2.0–3.0
  • Consoles: Xbox 360, Xbox One, PS3, PS4, Wii U.

Shader Model 3

  • NVIDIA cards since 2004 (GeForce 6)
  • AMD cards since 2005 (Radeon X1300)
  • Intel cards since 2006 (GMA X3000)
  • Mobile: OpenGL ES 3.0
  • Consoles: Xbox 360, Xbox One, PS3, PS4, Wii U.

Shader Model 2

  • NVIDIA cards since 2004 (GeForce 6)
  • AMD cards since 2004 (Radeon 9500)
  • Intel cards since 2006 (GMA X3000)
  • Mobile: OpenGL ES 2.0–3.0 with depth texture support
  • Consoles: Xbox 360, Xbox One, PS3, PS4, Wii U.

Shader Model 3

  • NVIDIA cards since 2004 (GeForce 6)
  • AMD cards since 2005 (Radeon X1300)
  • Intel cards since 2006 (GMA X3000)
  • Mobile: OpenGL ES 2.0–3.0 with depth texture support
  • Consoles: Xbox 360, Xbox One, PS3, PS4, Wii U.


۰ نظر موافقین ۰ مخالفین ۰ ۲۶ اسفند ۹۴ ، ۱۷:۴۹
مدیرکل

gameover.blog.ir

مثال:

public Animator myAnimator;
void Start(){
int randomValue=Random.Range(0,3);
myAnimator.SetInteger("AttakType",randomValue);
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۴ اسفند ۹۴ ، ۱۳:۱۵
مدیرکل

gameover.blog.ir

using UnityEngine;

public class MyScript : MonoBehaviour {

    void OnGUI() {
#if DEMO
        GUILayout.Label("This is a demo version");
#endif
    }

}
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ اسفند ۹۴ ، ۰۷:۵۱
مدیرکل

gameover.blog.ir


با استفاده از این پکیج می تونید یک اجرا کننده ی فایل mp3 ایجاد کنید و فایل های صوتی رو اجرا کرده،پاز یا استاپ کنید. و همینطور با لمس یا کلیک دکمه ی next و prev به فایل صوتی بعدی یا قبلی سوئیچ کنید. البته باید لیست فایل ها رو از قبل درون برنامه جاسازی کنید. به هر حال به درد زمانی می خوره که می خواید حین بازی بین اهنگ های موجود سوئیچ کنید و با اون اهنگ دلخواه ، بازیتون رو ادامه بدید یا ایده های دیگه ای از این قبیل که می تونید خودتون اون رو ویرایش کنید.

http://s6.picofile.com/file/8242934250/mp3Player.jpg



http://opizo.com/qGCWCY

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ اسفند ۹۴ ، ۰۶:۵۲
مدیرکل
gameover.blog.ir
یکم رو ترجمه کردم باقی تا بعد اگه نظر بذارید یادم بیارید

http://s7.picofile.com/file/8242931792/smb_tute_01.jpg
http://s6.picofile.com/file/8242931800/smb_tute_02.jpg

state machine behaviour ها توسط C# سیشارپ ایجاد شدند.

همه ی state machine behaviour ها از کلاس پایه ی یکسانی ارث می برند:StateMachineBehaviour

از آنجا که آنها از ارث بری(inheritance) پشتیبانی می کنند،اگر تابعی وجود داشته باشد می توانید آن را به کلاسهای چندگانه بیافزایید.

سپس به آسانی می توان به آن دست یافت.

برای اطلاعات بیشتر در مورد inheritance (ارث بری) اطلاعات پیوست شده در زیر را بخوانید.

StateMachineBehaviour functions



override public void OnStateEnter (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
}




  • The Animator parameter is a reference to the specific animator that this state machine behaviour is on.

  • For example, this could be used to set the values of animator parameters that were only necessary in this state, such as those for a blend tree.


  • The AnimatorStateInfo is the current info for the state that the state machine behaviour is on. It is the equivalent of writing animator.GetCurrentStateInfo(layerIndex); This can be useful in operations that involve the normalised time of the clip.

  • The layerIndex is the layer the state machine behaviour’s state is on. For example, zero for the base layer, one for the first, and so on.

As with MonoBehaviours, the functions of a StateMachineBehaviour are called under specific circumstances.

  • OnStateEnter is called on the first frame of the state being played.

  • OnStateUpdate is called after MonoBehaviour Updates on every frame whilst the animator is playing the state this behaviour belongs to.

  • OnStateExit is called on the last frame of a transition to another state.در آخرین فریم یک انتقال به وضعیت دیگر فراخوانی می شود

  • OnStateMove is called before OnAnimatorMove would be called in MonoBehaviours for every frame the state is playing. When OnStateMove is called, it will stop OnAnimatorMove from being called in MonoBehaviours.

  • OnStateIK is called after OnAnimatorIK on MonoBehaviours for every frame the while the state is being played. It is important to note that OnStateIK will only be called if the state is on a layer that has an IK pass. By default, layers do not have an IK pass and so this function will not be called. For more information on IK see the information linked below.

  • OnStateMachineEnter is called on the first frame that the animator plays the contents of a Sub-State Machine.

  • OnStateMachineExit is called on the last frame of a transition from a Sub-State Machine.

مثال:

using UnityEngine;

public class SpecialAttackParticlesSmb : StateMachineBehaviour
{
    public GameObject particles;            // Prefab of the particle system to play in the state.
    public AvatarIKGoal attackLimb;         // The limb that the particles should follow.


    private Transform particlesTransform;       // Reference to the instantiated prefab's transform.
    private ParticleSystem particleSystem;      // Reference to the instantiated prefab's particle system.


    // This will be called when the animator first transitions to this state.
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // If the particle system already exists then exit the function.
        if(particlesTransform != null)
            return;

        // Otherwise instantiate the particles and set up references to their components.
        GameObject particlesInstance = Instantiate(particles);
        particlesTransform = particlesInstance.transform;
        particleSystem = particlesInstance.GetComponent <ParticleSystem> ();
    }


    // This will be called once the animator has transitioned out of the state.
    override public void OnStateExit (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // When leaving the special move state, stop the particles.
        particleSystem.Stop();
    }


    // This will be called every frame whilst in the state.
    override public void OnStateIK (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // OnStateExit may be called before the last OnStateIK so we need to check the particles haven't been destroyed.
        if (particleSystem == null || particlesTransform == null)
            return;
        
        // Find the position and rotation of the limb the particles should follow.
        Vector3 limbPosition = animator.GetIKPosition(attackLimb);
        Quaternion limbRotation = animator.GetIKRotation (attackLimb);
        
        // Set the particle's position and rotation based on that limb.
        particlesTransform.position = limbPosition;
        particlesTransform.rotation = limbRotation;

        // If the particle system isn't playing, play it.
        if(!particleSystem.isPlaying)
            particleSystem.Play();
    }
}

تابع OnStateEnter :

override public void OnStateEnter (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
    player = GameObject.Find(“Player”);
}

مثال دریافت behaviour:
using UnityEngine;

public class ExampleMonoBehaviour : MonoBehaviour
{
    private Animator animator;                          // Reference to the Animator component on this gameobject.
    private ExampleStateMachineBehaviour exampleSmb;    // Reference to a single StateMachineBehaviour.


    void Awake ()
    {
        // Find a reference to the Animator component in Awake since it exists in the scene.
        animator = GetComponent <Animator> ();
    }


    void Start ()
    {
        // Find a reference to the ExampleStateMachineBehaviour in Start since it might not exist yet in Awake.
        exampleSmb = animator.GetBehaviour <ExampleStateMachineBehaviour> ();

        // Set the StateMachineBehaviour's reference to an ExampleMonoBehaviour to this.
        exampleSmb.exampleMb = this;
    }
}


مثال بعد:
using UnityEngine;

public class ExampleStateMachineBehaviour : StateMachineBehaviour
{
    public ExampleMonoBehaviour exampleMb;
}

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ اسفند ۹۴ ، ۰۴:۲۵
مدیرکل

gameover.blog.ir

http://opizo.com/mjirlB

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ اسفند ۹۴ ، ۰۳:۴۷
مدیرکل

gameover.blog.ir

پکیج EhneHeacy 1.3.1 یک پکیج بسیار پر ترفدار برای کاربرانی است که با نرم افزار یونیتی 3D کار میکنند

این پکیج کار شما را ساده تر میکند مثلا برای فعال یا غیر فعال کردن آبجکت ها را آسان میکند

در کل این پکیج پنجره ی Hierarchy را که در نرم افزار یونیتی میباشد را پیشرفته میکند 
و همچینین امکانات این پنجره را بیشتر میکند

از نظر من حتما دانلود کنید زیرا که سریع تر میتوانید پروژه ی خود را تکمیل کنید !!!!!!!

(منبع اش یادم نیست ویلا میذاشتم)

http://opizo.com/ODHrfL

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ اسفند ۹۴ ، ۰۳:۴۴
مدیرکل

gameover.blog.ir

به لینک زیر برید و چند ثانیه صبر کنید و سپس رد تبلیغ رو بزنید

رمز: ams

http://opizo.com/iPMxOE

۲ نظر موافقین ۰ مخالفین ۰ ۲۲ اسفند ۹۴ ، ۰۳:۴۲
مدیرکل

gameover.blog.ir

حجم:106 مگابایت

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTcA-yr01yKVRmfpGy1aPwxGFAtqQhYCXbwpbNQwK3Umll-tdqwTA

http://opizo.com/WrpPzv

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ اسفند ۹۴ ، ۰۳:۱۳
مدیرکل

gameover.blog.ir

 Edit -> Project Settings -> Physics


در این قسمت لایه های تعریف شده نشون داده میشه.

می تونید مثلا چند cube تو لایه دلخواه بذارید بعدش تو ماتریس تصادم لایه هایی که می خواید برخورد صورت نگیره و rigidBody اون لایه ها روی هم عمل نکنه و در هم فرو بره رو در خروجی تست کنید.

مثلا به عکس زیر نگاه کنید:

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRUtIHSOxq6MrhXGdGeeeQ-qQZmwwkJrfr-xLSMtEydO6qSXh8j

لایه 1 با لایه 2 و 3 تصادم نخواهد داشت.و فیزیک اشیایی که در این لایه ها قرار بدیم روی هم تاثیری نداره.

لایه ی 2 با لایه 3 هم تصاد نداره.

می تونید اشیا رو تو لایه ها بذارید و از ارتفا بندازید زمین(بهشون ریجید بادی بدید) و نتیجه اجرا رو ببنید. اسم لایه ها رو دقت کنید طبق عکس تنظیم کنید. یا دلخواه.

۰ نظر موافقین ۰ مخالفین ۰ ۲۰ اسفند ۹۴ ، ۲۱:۱۶
مدیرکل

gameover.blog.ir

مخفی کردن متغیر ها از inspector و hierarchy :
برای اینکار از این کدها کمک می گیریم :

HideFlags.HideInHierarchy;
HideFlags.HideInInspector;
مثال:
using UnityEngine;
 
public class MyHideFlags : MonoBehaviour {
 
    public HideFlags myHideFlags;
 
    void OnEnable() {
        hideFlags = myHideFlags;
    }
}
نکته:
تو بعضی ورژن های یونیتی ممکنه کار نده یا منسوخ شده باشه.
۰ نظر موافقین ۰ مخالفین ۰ ۲۰ اسفند ۹۴ ، ۱۸:۴۴
مدیرکل

gameover.blog.ir

ابتدا به دشمن یک کاراکتر کنترلر بدید(با زدن دکمه add component) یا Component/Physics/Character Controller.

این دو خط رو سعی کنید بالای اسکریپت باشه(اگه تکراری بود باید حذف کنید):

using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour { public float speed = 4f; public float jetPackSpeed = 0.3f; public float jumpSpeed = 8f; public float gravity = 10; private Transform _Player; private CharacterController character; private Transform tr; private float vSpeed = 0f; private bool jump = false; void Start () { _Player = GameObject.FindGameObjectWithTag("Player").transform; character = GetComponent&lt;CharacterController&gt;(); tr = transform; } void Update () { // find the vector enemy -> player Vector3 chaseDir = _Player.position - tr.position; chaseDir.y = 0; // let only the horizontal direction float distance = chaseDir.magnitude; // get the distance if (distance <= 2) Debug.Log("Attacking Player"); else { // find the player direction Quaternion rot = Quaternion.LookRotation(chaseDir); // rotate to his direction tr.rotation = Quaternion.Slerp(tr.rotation, rot, Time.deltaTime * 4); if (character.isGrounded){ // if is grounded... vSpeed = 0; // vertical speed is zero if (jump){ // if should jump... vSpeed = jumpSpeed; // aplly jump speed jump = false; // only jump once! } } else // but if lost ground, check if it's an abyss if (!Physics.Raycast(tr.position, -tr.up, 20f)){ // if no ground below vSpeed = jetPackSpeed; // use jetpack } vSpeed -= gravity * Time.deltaTime; // apply gravity // calculate horizontal velocity vector chaseDir = chaseDir.normalized * speed; chaseDir.y += vSpeed; // include vertical speed // and move the enemy character.Move(chaseDir * Time.deltaTime); } } // if collided with some wall or block, jump void OnControllerColliderHit(ControllerColliderHit hit){ // only check lateral collisions if (Mathf.Abs(hit.normal.y) < 0.5){ jump = true; // jump if collided laterally } } }

۱ نظر موافقین ۰ مخالفین ۰ ۱۹ اسفند ۹۴ ، ۱۵:۳۵
مدیرکل

gameover.blog.ir


سوال:

دوستان من یه مشکلی دارم اون اینکه تو 3d max قسمت هایی رو Detach می کنم ولی وقتی وارد یونیتی می کنم اون قسمت ها به صورت شی تو خالی نمایش داده میشه . کمک کنید بد جور گیر کردم .


عکس :

in 3dmax

[تصویر: ykc3_13.jpg]


in unity:

[تصویر: rgci_12.jpg]



جواب:

بهش shell بدید.

۱ نظر موافقین ۰ مخالفین ۰ ۱۷ اسفند ۹۴ ، ۲۳:۴۰
مدیرکل

gameover.blog.ir

این دو تابع با play بازی به صورت خودکار اجرا میشن..

awake سریعتر call (فراخوانی) میشه...

اگه تیک اسکریپت رو غیر فعال کنیم، تابع Awake فقط اجرا میشه ... ولی اگه اسکریپت فعال باشه اول awake و سپس Start اجرا میشه...

تابع start و awake فقط یکبار اجرا میشن...

دقت کنید که چه اسکریپت فعال باشه چه نباشه، awake همیشه اجرا میشه.... ولی start با فعال بودن اسکریپت، و همینطور بعد از Awake...

ولی update بارها call میشه مثل رویداد step توی game maker....
---

مثال :
اسکریپت سیشارپی به نام script1.cs ایجاد کنید و کد زیر رو بریزید توش:

using UnityEngine;
using UnityEditor;
using System.Collections;

public class script1 : MonoBehaviour
{
    void Awake ()
    {
        Debug.Log("Awake called.");    
    }
        
    void Start ()
    {
        Debug.Log("Start called.");
    }
} 


اسکریپت رو save کنید و بکشید روی یک plane که توی صحنه هست و بازی رو play کنید و نتیجه رو مشاهده کنید...
دوباره خارج بشید و اسکریپت رو غیر فعال کنید و باز اجرا کنید و نتیجه رو مشاهده کنید.
[تصویر: awake_start.jpg]
منبع:
http://unity3d.com/learn/tutorials/modules/beginner/scripting/awake-and-start

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ اسفند ۹۴ ، ۱۹:۵۳
مدیرکل

gameover.blog.ir

هر فایل apk یک امضای الکترونیکی داره که مختص توسعه دهنده اون هست این امضای الکترونیکی رو فقط توسعه دهنده در اختیار داره 

بیسیک هنگام کامپایل به صورت پیش فرض apk رو با debug key امضا میکنه که این امضا یک امضای عمومی هست و همه اون رو در اختیار دارن و مختض برنامه شما فقط نیست 

گوگل پلی از همون ابتدا این قانون رو داشت که برنامه رو نباید با debug key آپلود کنید به نظر میرسه بازار هم به تازگی این قانون رو پیاده کرده که به نفع خود توسعه دهنده هست 

 --------------------

برای basic4android:

شما برای حل این مشکل باید به قسمت Tools < private sign key  برید و اطلاعاتی رو که برای یک امضای جدید لازمه وارد کنید تا فایل امضای شما رو در محل مورد نظر ذخیره کنه بعد شما هر وقت که خواستین کامپایل نهایی خودتون رو از برنامه بگیرید به قسمت Tools < private sign key برید و فایل امضای خودتون رو لود کنین و از برنامه کامپایل بگیرین 

منبع :

http://answercenter.ir/topic/9924-%D9%BE%DB%8C%D8%BA%D8%A7%D9%85-%D8%A8%D8%B3%D8%AA%D9%87-%D9%86%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A8%D8%A7-%DA%A9%D9%84%DB%8C%D8%AF-%D8%AF%DB%8C%D8%A8%D8%A7%DA%AF-%D8%A7%D9%85%D8%B6%D8%A7-sign-%D8%B4%D8%AF%D9%87-%D8%A8%D8%A7%D8%B4%D8%AF-%D8%B2/



برای unity:

کلیدتو از اینجا بسازید:
player settings > publishing settings > create new keystore
فایل کلید و رمزشو مواظب باش گم نکنید.
توی قسمت alias هم یه new بزن و کلیدتو ایجاد کنید.
قبلش از قسمت browse keystore مکان ذخیره ی کلیدو مشخص کنید.



خرید آموزش b4a عالی با قیمت خیلی کم برای مبتدی ها:
http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1

خرید آموزش b4a فارسی با قیمت کم:
http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
۳ نظر موافقین ۰ مخالفین ۰ ۱۲ اسفند ۹۴ ، ۰۰:۲۶
مدیرکل

gameover.blog.ir


اول بازیتون باید توی کافه بازار تایید بشه مثلا یه بازی رایگان که تایید شده.
اسمش هست com.sherkateMan.eseBarname
این com.sherkateMan.eseBarname رو کپی می کنی می برید توی adad.ir
بهتون یک شناسه می ده که اونو باید بذارید توی قسمت token در فایل AndroidManifest.xml
دمانیفست و فایل های jar رو جتما در پوشه ی assets->Plugins->Android میذارید
اگه پوشه نبود ایجادش کن.
بعدش اسکریپت سیشارپ رو نسبت میدین به پریفب و پریفب رو می کشیش تو صحنه
همین تمام

توی فایل مانیفست test mode رو روی false می ذاریم تا در حالت تست نباشه.

اینم فایل های لازم jar و prefab و اسکریپت سیشارپی که بای بدید به پریفب:


برای دانلود ابتدا به لینک زیر برید و چند ثانیه صبر کرده و سپس رد تبلیغ رو بزنید

http://opizo.com/Ej0MAD


نکته مهم: حتما از یونیتی 5.2 به بالا استفاده کنید چون یونیتی 5.1 و قدیمی تر تظیمات اینترنت و غیره رو به مانفست اعمال نمی کنه و باید دستی اعمال کنید اما یونیتی 5.2 به بالا خودکار تنظیمات نیاز به اینترنت و بعضی تنظیمات اصلی رو اعمال می کنه.

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ اسفند ۹۴ ، ۲۳:۱۷
مدیرکل

gameover.blog.ir

Overloading یا سربارگذاری:

متد های که نام یکسان دارند اما پارامتر های ورودی متفاوتی دارند، برای مثال  public bool Retrieve() و public bool Retrieve(int id) در این مثال متد Retrieve دارای دو overload است. OverLoading زمانی است که شما چند متد همنام در یک محدوده (scope) با امضاهای (signatures) متفاوت دارید .
 همچنین Overloading چند ریختی زمان کامپایل (Compile Time Polymorphism) می باشد .
 

//Overloading
public class test
{
    public void getStuff(int id)
    {}
    public void getStuff(string name)
    {}
}

Overriding یک اصل یا قانون است که به شما اجازه می دهد تا قابلیت های متدها را در کلاس های مشتق شده تغییر دهید
همچنین Overriding چند ریختی زمان اجرا (Run Time Polymorphism) می باشد.

 

//Overriding
public class test
{
        public virtual getStuff(int id)
        {
            //Get stuff default location
        }
}
 
public class test2 : test
{
        public override getStuff(int id)
        {
            //base.getStuff(id);
            //or - Get stuff new location
        }
}


منبع:
http://mazizi.blog.ir/1393/12/04/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-Overloading-%D9%88-Overriding-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE
۰ نظر موافقین ۰ مخالفین ۰ ۱۱ اسفند ۹۴ ، ۰۷:۴۲
مدیرکل

gameover.blog.ir
return برای توابعی بکار می ره که نوعشون void نباشه. مثل int یا float یا string یا ....
مثلا وقتی یک تابع جمع می نویسیم دو عدد رو جمع می کنیم باید مقدار حاصل رو توی اسم تابع برگشت بدیم. دقت کن اسم تابع خودش یک متغیر هست.
اگه نوع تابعی void یا غیر برگشتی باشه تهش نباید return بزنیم ویلا خطا میده.

float sum(int a,int b){
return(a+b);
}

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ اسفند ۹۴ ، ۰۷:۱۹
مدیرکل

gameover.blog.ir

پارامتر Trigger در پنجره ی Animator یک متغیر با اسم دلخواه از نوع Boolean هست که بعد از انتقال یا سوئیچ بین دو انیمیشن مقدارش خودکار False میشه.(نکته:صفر یعنی false و هر چیزی غیر از صفر یعنی True)

http://s7.picofile.com/file/8241271634/triggerParaeter_Aimator.jpg


با کد سیشارپ هم میشه پارامتر رو True کرد خودکار:(ضمنا بعد از انتقال خودکار False میشه)

public void SetTrigger(string name);

مثال برای True کردن:
Animator.SetTrigger("esmeParameter");
مثال برای false کردن:
Animator.ResetTrigger("esmeParameter");

۱ نظر موافقین ۰ مخالفین ۰ ۱۱ اسفند ۹۴ ، ۰۷:۰۹
مدیرکل

gameover.blog.ir
یکی از تنظیمات occlusion culling و یکی از تنظیمات دیگه گزینه ی near دوربین هست. near پارامتر نزدیک بودن هست.مثلا اگه بهش عدد 10 بدیم اشیا تا 10 متری رندر میشه و باقی رندر نمیشه مگه اینکه پلیر حرکت کنه و تا مرز ده متر اشیا رندر میشه.
تکنیک دیگه اینه که بیایم خودمون اسکریپت بنویسیم ابتدا آرایه ای بسازیم که کل اشیای صحنه داخلش باشه.(یعنی از نوع GameObject باشه)
سپس Tag هر گیم ابجکت رو چک کنیم اگه غیر از tag زمین و خودمون بود شرط دوم رو اجرا کنیم و اون اینه :
با تابع Vector3.Distance به الگوی

کد:
public static float Distance(Vector3 a, Vector3 b);
فاصله ی دوربین رو تا شی رو چک می کنیم.
اگر فاصله کمتر از میزان دلخواه بود گیم ابجکت رو setActive(true یا فعال وگرنه setActive(false یا غیر فعال کنه.
با استفاده از این تکنیک هر چقدر بازی شما بزرگ باشه به شدت افزایش کارایی و بهینه سازی رو خواهیم داشت.
این یکی از حقه های بسیار مهمی هست که اکثر بازی ساز های بزرگ ازش بهره می برن.
با تشکر از علی
۰ نظر موافقین ۰ مخالفین ۰ ۱۱ اسفند ۹۴ ، ۰۴:۴۳
مدیرکل

دقت کنید اسکریپت test.cs زیر رو بدید به دوربین اصلی و دوربین رو بکشید روی متغیر mainCam رها کنید و یادتون نرده گیم ابجکت سه بعدی اسپرایت(sprite) دو بعدی شما حتما باید Collider سه بعدی(3d) داشته باشه نه box collider 2d یا ... .

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

using UnityEngine;
using System.Collections;
//GameObject touch detection
//Author:sajjad3011
 public class test : MonoBehaviour { public Camera mainCam; RaycastHit hit; void Update () { try{ Ray ray = mainCam.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) if (Input.GetMouseButtonDown(0)) {Debug.Log(hit.collider.tag);} } catch{ } } }
۱ نظر موافقین ۰ مخالفین ۰ ۰۹ اسفند ۹۴ ، ۰۵:۳۴
مدیرکل
gameover.blog.ir


۲ نظر موافقین ۰ مخالفین ۰ ۰۸ اسفند ۹۴ ، ۱۷:۰۴
مدیرکل

منبع:gameover.blog.ir

سازنده:گیم آور

در این آموزش دو صحنه ساده ایجاد می کنیم و دو دکمه می ذاریم که روی همه رزولوشن ها اجرا میشه و بهش رویداد کلیک می دیم و مرحله رو لود می کنیم.(بدون save)

آموزش خیلی ساده هست و فایل متنی PDF  همراه اسکریپت وجود دارد. این آموزش برای افراد خیلی مبتدی هست که می خوان دکمه ای ایجاد کنن و می خوان با کلیک روی او یک عملی انجام بشه.

http://s6.picofile.com/file/8237288676/ui_button_click_go_level.jpg

دانلود فیلم:

http://opizo.com/pXEf56

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ اسفند ۹۴ ، ۲۰:۱۷
مدیرکل

منبع:gameover.blog.ir

سازنده:گیم آور

تشکر و نظر یادتون نره اگه به دردتون خورد.

http://s6.picofile.com/file/8237415400/3dGamePlayWithJoyStick_unity5.jpg

در این فیلم آموزش ساخت یک گیم پلی سه بعدی برای اندروید و حرکت پلیر با جوی استیک مجازی و تنظیم تکستچر زمین در یونیتی 5 رو یاد می گیرید .

به کمک جوی استیک مجازی به سادگی پلیر رو حرکت می دید به چپ و راست و جلو و عقب به همراه دکمه ی jump که با لمس عمل پرش رو برای پلیر انجام میده.

تکستچر زمین رو تنظیم می کنیم که کیفیت بهتر بشه از طریق تکرار و tiling.

خروجی هم با ctrl+shift+B می تونید خودتون روی android بسازید.

باز هم سوالی بود پشتیبانیتون می کنیم توی gameover.blog.ir و کانال تلگرام که توی وبلاگ لینک هست.

علت ساخت این آموزش این بود که برنامه نویسی سیشارپ شما بهتر بشه.

ضمنا سورس پروژه هم هست به همراه فایل متنی آموزش.

یادتون نره حتما باید برنامه 7zip رو برای باز کردن آموزش داشته باشید.

رمز : gameover

کیفیت فیلم عالی هست و کاملا واضح. هر مشکلی توی دانلود براتون پیش اومد توی کانال تلگرام و وبلاگ مطرح کنید ما لینک مستقیم آموزش رو روی mediaFire بهتون میدیم تا مستقیم دانلود کنید.


http://a1star.com/images/site-images/a1star-small.gifرایگان

فیلم:

http://opizo.com/7D4nTd

سورس:

http://opizo.com/6bOKPl


۳ نظر موافقین ۰ مخالفین ۰ ۰۷ اسفند ۹۴ ، ۲۰:۰۸
مدیرکل
منبع:
gameover.blog.ir
Non-convex MeshCollider with non-kinematic Rigidbody is no longer supported in Unity 5.
If you want to use a non-convex mesh either make the Rigidbody kinematic or remove the Rigidbody component. Scene hierarchy path "plane_h1", Mesh asset path "" Mesh name "Plane"
معمولا زمانیکه از این خطا ها می ده گیم ابجکت رو انتخاب می کنیم و تیک convex رو برای کامپوننت meh collider فعال می کنیم:
http://s7.picofile.com/file/8240713768/convex_meshCollider.jpg

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ اسفند ۹۴ ، ۱۱:۲۰
مدیرکل
مثال: از بین رفتن گیم ابجکت تیر پس از 5.1 ثانیه:
این اسکریپت رو بدید به تیر:
void Start(){
public static void Destroy(this, 5.1f);
}

۰ نظر موافقین ۰ مخالفین ۰ ۰۶ اسفند ۹۴ ، ۲۲:۱۹
مدیرکل

gameover.blog.ir
 اموزش ساخت منو توقف بازی در یونیتی

کد توقف pause بازی در یونیتی:

 
Time.timeScale=0; 
کد resume در یونیتی 5:
 
Time.timeScale=1; 
توقف موقت بازی:
 
private IEnumerator Pause(int p)
    {
        Time.timeScale = 0.1f;
        yield return new WaitForSeconds(p);
        Time.timeScale = 1;
    }
روش دیگه سیشارپ:
 
private IEnumerator Pause(int p)
    {
        Time.timeScale = 0.1f;
        float pauseEndTime = Time.realtimeSinceStartup + 1;
        while (Time.realtimeSinceStartup < pauseEndTime)
        {
            yield return 0;
        }
        Time.timeScale = 1;
    }

 

 

روش js:منسوخ

 

 

function PauseWaitResume (pauseDelay : float) {
        Time.timeScale = .0000001;
        yield WaitForSeconds(pauseDelay * Time.timeScale);
        Time.timeScale = 1.0;
    }

 

کد توقف بازی در یونیتی 5:
آرام کردن زمان در لحظه ی تیر زدن و حرکت slow motion:

 

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        if (Input.GetButtonDown("Fire1")) {
            if (Time.timeScale == 1.0F)
                Time.timeScale = 0.7F;
            else
                Time.timeScale = 1.0F;
            Time.fixedDeltaTime = 0.02F * Time.timeScale;
        }
    }
}

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

۳ نظر موافقین ۰ مخالفین ۰ ۰۶ اسفند ۹۴ ، ۱۷:۵۵
مدیرکل
gameover.blog.ir
بردار دو بعدی دو مقدار می گیره،سه بعدی سه مقدار،چهار بعدی چهار مقدار.
چرا از متغیر ها استفاده نمیکنیم؟! برای اینکه ساختار این بعضی جاها کاربردی تره.
بردار چهار بعدی مثل رنگ که شامل red green blue و شفافیت نور alpha هست.
آیا زاویه بردار هست؟ خیر زاویه بردار نیست.
مثلا چرخش. حول محور y می خوایم با زاویه ی 90 انجام بشه می گیم:
کد:
GameObject.Rotation=new Vector(0,90,0);
x یعنی میله ی راست و چپ.
y یعنی میله بال پایین.
z یعنی میله جلو عقب.

اگه x مثب باشه یعی راست
اگه x منفی باشه یعنی چپ

اگه y مثبت باشه یعنی بالا
اگه y منفی باشه یعنی پایین

اگه z مثبت باشه یعنی جلو
اگه z منفی باشه یعنی عقب
۰ نظر موافقین ۰ مخالفین ۰ ۰۶ اسفند ۹۴ ، ۱۷:۵۲
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۰۳ اسفند ۹۴ ، ۰۷:۵۰
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۰۳ اسفند ۹۴ ، ۰۶:۱۸
مدیرکل
رمز: FRG

دانلود شیدر shader  candela ssrr  برای ایجاد بازتاب نور یا reflection بدنه ی ماشین.... و ایجاد جنس ماده شبیه anisotropic
https://i.ytimg.com/vi/Yrq6tetFLDs/maxresdefault.jpg
دانلود شیدر shader  candela ssrr  برای ایجاد بازتاب نور یا reflection بدنه ی ماشین.... و ایجاد جنس ماده شبیه anisotropic

http://opizo.com/tgk7ha


۱ نظر موافقین ۰ مخالفین ۰ ۰۱ اسفند ۹۴ ، ۰۰:۵۰
مدیرکل
سورس بازی دوز در یونیتی:
http://opizo.com/2m8TEW
۰ نظر موافقین ۰ مخالفین ۰ ۲۶ بهمن ۹۴ ، ۰۲:۳۵
مدیرکل

دانلود کتاب LEvel up شامل نکات ابتدایی ساخت بازی ها

http://s6.picofile.com/file/8238758676/level_up.jpg

http://opizo.com/OUJdvH

۰ نظر موافقین ۰ مخالفین ۰ ۲۵ بهمن ۹۴ ، ۰۸:۴۷
مدیرکل

gameover.blog.ir

سازنده:مهدی+سجاد

http://s6.picofile.com/file/8238635342/way.jpg

این جلسه اسکریپت به شما برنامه نویسی way point آموزش داده میشه به طوری که می تونید به سرعت یاد بگیرید خودتون برنامه ای بنویسید تا در محیط ویرایش قبل از runTime یعنی محیط Scene Editor با استفاده از توابع Draw بین اشیای مختلف خط ارتباط ترسیم کنید تا بهتر از طراحی های خودتون مخصوصا در بازی های مهندسی شده استفاده کنید. کیفیت آموزش عالی هست و هر مشکلی بود توی وبلاگ ما و گروه تلگرام پاسخگو خواهیم بود انشاءا... .

خرید


۱ نظر موافقین ۰ مخالفین ۰ ۲۴ بهمن ۹۴ ، ۱۴:۳۴
مدیرکل

gameover.blog.ir



کد روشن و خاموش کردن چراغ/روشن و خاموش کردن لامپ/خاموش و روشن کردن چراغ/خاموش و روشن کردن لامپ:


public GameObject lamp;


برای کلیک دکمه ی دلخواه این کد رو بذارید که هر بار not می کنه (علامت تعجب ! به معنی نات یا معکوس کردن از true به false یا بلعکس می باشد):

target.SetActive(!target.activeSelf);

۲ نظر موافقین ۰ مخالفین ۰ ۲۴ بهمن ۹۴ ، ۰۰:۳۷
مدیرکل

gameover.blog.ir

تگ یا Tag عنی برچسب یا اسم مستعار.
توی html ما قبلا به چند تا ابجکت id می دادیم که ثابت بود و هر ابجکت یه اسم ثابت داشت نمی تونستیم تغییرش بدیم ولی می تونستیم یه کلاس یا class تعریف کنیم و همه ی ابجکت های لخواه رو از نوع اون کلاس تعریف کنیم یا برچسب بزنیم. بعدش که میخواستیم تغییراتی روی اون ابجکت ها ایجاد کنیم دیگه دستی اینکار سخت بود. کافی بود اسم اون کلاس رو داشته باشیم و خصوصیاتشو دستکاری کنیم یا بهشون دستیابی داشته باشیم.
توی html چیزی بود تو مایه های tagByName یا tagByID که بهش ایدی میدادیم و خودش همه رو لیست می کرد بعدش میریختیم توی ارایه و با یه حلقه ی تکرار به کل ابجکت های ریخته شده توی ارایه دسترسی داشتیم و یه سری عملیات کلی روی اونا انجام میدادیم.

توی unity یه چیز توی همون مایه ها هست یبه اسم tag.
مثلا من سه تا دوربین دارم:
cam1
cam2
cam3
--
به هر سه تاشون برچسب cam می زنم
بعدش با کدی مثل این همشون رو غیر فعال می کنم:

//Disable all cameras with tag 'cam'
     var cameras = GameObject.FindGameObjectsWithTag("cam");    
     for (var cams : GameObject in cameras)
     {
      cams.GetComponent(Camera).enabled = false;      
     }
بعدش با کد دوربین رو فعال می کنم:
gameObject.Find("cam1").GetComponent(Camera).enabled = true;
(البته برای غیر فعال کردن یا فعال کردن یک گیم ابجکت از دستور setActive هم استفاده میشه.)
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ بهمن ۹۴ ، ۱۶:۴۲
مدیرکل

منبع:gameover.blog.ir


http://tf3dm.com/imgd/l24584-army-pilot-fully-rigged-animated-20-animations-57044.png

http://www.mediafire.com/download/ur2egvx855irm9e/soldier_ArmyPilot-20Animation.7z

نکته :

باید حتما برنامه 7zip رو داشته باشید برای اینکه فایل فشرده شده با پسوند 7z هست.

۰ نظر موافقین ۰ مخالفین ۰ ۲۱ بهمن ۹۴ ، ۰۱:۴۴
مدیرکل

gameover.blog.ir

بعد از چند ثانیه رد تبلیغ رو بزنید(حجم 14 کیلو بایت )

Bouncy.physicmaterial فیزیک ماده فنر
Collision_Material.physicMaterial فیزیک ماده ی تصادم یا برخورد
Ice.physicmaterial فیزیک ماده یخ
Metal.physicmaterial فیزیک آهن
Rubber.physicmaterial فیزیک لاستیک
Vehicle.physicMaterial فیزیک وسیله نقطه
Wood.physicmaterial فیزیک چوب

http://opizo.com/gj0Yxa

۰ نظر موافقین ۰ مخالفین ۰ ۱۹ بهمن ۹۴ ، ۰۳:۴۴
مدیرکل

منبع:gameover.blog.ir


وکتور 4 پارامتر چهارم هست.
ما بردار 5 بعدی و .... هم داریم.
مثل آرایه ای که چند مقدار می گیره.
حالا اگه سه باشه بهش می گیم بردار سه بعدی.
اگه چهار باشه برای موارد خاص بکار می ره.
مثلا رنگ
Red
Green
Blue
اون آخری هم آلفا یا شفافیت نور.

بقیه رو بدو دوست من.

۰ نظر موافقین ۰ مخالفین ۰ ۱۸ بهمن ۹۴ ، ۰۶:۱۷
مدیرکل

gameover.blog.ir

توی وبلاگ سعی می کنم مطالب رو از هیچ جایی نگیرم جز خود سایت یونیتی.

شکل زیر رو ببینید تکمیله نیاز به دیدن فیلم و ... هم نیست که این همه سایت سرگردون می کنه آدمو.

قسمت هایی که مکعب مستطیلی هست.اون نواحی فقط رندر میشه.(رندر به معنی اینه که پرداش بیشتری برای سایه زنی و .... انجام میشه نه اینکه اون بیرونی ها دیده نشن. اونا یه جوری مثل عکس یا حالت از پیش رندر شده دارن و پردازش اضافه نمیشن و مصرف بهینه میشه)

http://s6.picofile.com/file/8209938868/OcclusionCullingOcclusionArea.gif

وب پیج رو zip کردم بعد از آنزیپ با فایرفاکس باز کنید. موفق باشید

http://opizo.com/flbClD

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۷ بهمن ۹۴ ، ۱۶:۵۲
مدیرکل
۲ نظر موافقین ۰ مخالفین ۰ ۱۶ بهمن ۹۴ ، ۰۳:۲۸
مدیرکل

منبع:gameover.blog.ir


Sprite spr1=Resources.Load<Sprite>("sprites/newSprite");//load Assets/Resources/sprites/newSprite.png GetComponent<SpriteRenderer> ().sprite = spr1;

نکته بسیار مهم:

پسوند فایل رو نباید توی کد قرار بدید.

همچنین مسیر باید اسلش داشته باشه. بک اسلش کار نمی کنه.طبق هلپ یونیتی.

نکته مهم بعدی:

مسیر فایل sprites/newSprite.png باید حتما در زیر شاخه ی زیر باشه حتما:

Assets/Resources


۰ نظر موافقین ۰ مخالفین ۰ ۱۴ بهمن ۹۴ ، ۰۳:۵۳
مدیرکل
منبع:gameover.blog.ir
condition = شرط دلخواه
(مثلا بحثی وقتا میخواید شتاب یا velocity رو تو بازی های دو بعدی پس از تشخیص موانع صفر کنید شتاب محور x رو صفر می کنید کار نمیده . اینجا حرکت در محور x رو قفل یا freeze میکنیم. فریز به معنی یخ زدن یا از کار انداختن هست)
Rigidbody2D body2d;    
        body2d = GetComponent<Rigidbody2D> ();
        
        if (condition) {
            
            body2d.constraints = RigidbodyConstraints2D.FreezePositionX;
            
        } else {
            
            body2d.constraints = RigidbodyConstraints2D.None;
            
        }

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ بهمن ۹۴ ، ۰۲:۳۸
مدیرکل

gameover.blog.ir
۱ نظر موافقین ۰ مخالفین ۰ ۱۴ بهمن ۹۴ ، ۰۱:۰۷
مدیرکل

شلیک سینوسی در فضای سه بعدی به سمت هدفی که در روبروی ما قرار دارد

http://s3.picofile.com/file/8225755176/Learn.jpg


اگه می خوای دقیق و به صورت دایره ای و هوشمند بزنی به هدف:
اولا باید فاصله خودتو تا هدف محاسبه کنی
 این با تابع Distance بدست میاد.
بعدش با معادله ی دایره،فیثاغوریث یا توابع مثلثات میزنی به هدف.
فرمولشم اینه:

X2=R*Cos(teta)+x1
y2=R*Sin(teta)+y1


در سه بعدی  اگه بخوای به جلو بره این میشه:
به جای X1,Y1 مختصات دو بعد از گیم ابجکت گلوله رو باید بدی به طوری که رو به جلو باشه یعنی Z به جای X1 و Y هم به جای Y1 .
X2,Y2 رو بعدش بده تیر .
تتا رو از صفر تا 180 مقدار میدی
به R هم فاصله نقطه ایجاد تیر تانک تا هدف رو میدی.
مثلا یک حلقه while یا تایمر بنویس که تتا teta رو از منفی 90 تا مثبت 90 درجه دونه دونه زیاد کنه.
بعدش می گی:

//sajjad3011
teta=-90;
float distance = Vector3.Distance(transform.position,hadaf.position);
midz = distance / 2;

while(teta<+90)
{
 teta++;
    deltaZ=radius*cos((teta*3.14)/180);
    deltaY=radius*sin((teta*3.14)/180);

z=z+midz+deltaZ;
y=y+deltaY;

position=new Vector3(this.position.x,y,z)//be x dast nemizanim chon Left/Right ro kari nadarim faghat z/jelo+y/bala
}



بخوام  توضیح بدم باید این برنامه رو درک کنی و فقط توی سه بعدی تجسم کن که حرکت ما به سمت جلو هست پس خودت توی فضا میری سمت راست فکر کن توی محیط حاضر هستی و پس می فهمی x همون z(یعنی حرکت به جلو در واقیت و حرکت به راست ما در تجسم ) هست و y همون y .
(رسم دایره با استفاده از مثلثات و حلقه تکرار):
http://gameover.blog.ir/1394/03/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%88-%D8%B3%D9%88%D8%B1%D8%B3-%DA%86%D8%B1%D8%AE%D8%B4-%D8%AF%D8%A7%DB%8C%D8%B1%D9%87-%D8%AD%D9%88%D9%84-%D9%85%D8%B3%D8%AA%D8%B7%DB%8C%D9%84-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%81%D8%B1%D9%85%D9%88%D9%84%D9%87%D8%A7%DB%8C-%D9%85%D8%AB%D9%84%D8%AB%D8%A7%D8%AA%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%DB%8C

تئوری کار همینا بود و اگه خطایی داشت با فکر کردن حلش کنید.

نکته آخر:

به جای حلقه ی تکرار بهتره حتما از تایمر کمک بگیرید و خودتون یک تایمر بنویسید چون حلقه های تکرار وقت پردازنده رو می گیرن و بهینه نیست.

۱ نظر موافقین ۰ مخالفین ۰ ۱۳ بهمن ۹۴ ، ۰۰:۵۶
مدیرکل
gameover.blog.ir
مسیر دقیق پوشه های نصب android sdk manager برای خروجی گرفتن اندروید در unity و game maker studio و basic4android :



محتوای پوشه ی android-SDK:
۱ نظر موافقین ۰ مخالفین ۰ ۱۱ بهمن ۹۴ ، ۱۴:۲۵
مدیرکل
http://crook100.esy.es/PostApo.png

حجمش حدود سیصد مگ هست.
روی لینک زیر بزنید و چند ثانیه صبر کنی و رد تبلیغ رو بزنید:
http://opizo.com/svwaq7

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ بهمن ۹۴ ، ۰۷:۱۹
مدیرکل
منبع:gamever.blog.ir
زبان js هست (اما بهتره خودتون تبدیل کنید به سیشارپ چون استاندارد تر هست)
var target : Transform; //the enemy's target
var moveSpeed = 3; //move speed
var rotationSpeed = 3; //speed of turning
var range : float=10f;
var range2 : float=10f;
var stop : float=0;
var myTransform : Transform; //current transform data of this enemy
function Awake()
{
    myTransform = transform; //cache transform data for easy access/preformance
}
 
function Start()
{
     target = GameObject.FindWithTag("Player").transform; //target the player
 
}
 
function Update () {
    //rotate to look at the player
    var distance = Vector3.Distance(myTransform.position, target.position);
    if (distance<=range2 &&  distance>=range){
    myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
    Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
    }
 
 
    else if(distance<=range && distance>stop){
 
    //move towards the player
    myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
    Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
    myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
    }
    else if (distance<=stop) {
    myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
    Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
    }
 
 
}

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ بهمن ۹۴ ، ۰۶:۱۹
مدیرکل
منبع:gameover.blog.ir
کد شلیک گلوله سه بعدی و نابود شدن دشمن پس از برخورد تیر با هدف که تگ enemy دارد.
کد تیر اندازی در صورتی که خشاب،تیر داشته باشه برای یونیتی.
کد شلیک گلوله سه بعدی و نابود شدن دشمن پس از برخورد تیر با هدف که تگ enemy دارد.
کد تیر اندازی در صورتی که خشاب،تیر داشته باشه برای یونیتی.کد تیر زدن در یونیتی_کد تیر اندازی در یونیتی_کد شلیک تیر در یونیتی_کد شلیک گلوله در یونیتی_اسکریپت شلیک در یونیتی_اسکریپت تیر اندازی در یونیتی_اسکریپت تیر زدن در یونیتی.
//tirZadan.cs
//Author:sajjad
//gameover.blog.ir
//@gameoverblog
using UnityEngine; using System.Collections; public class tirZadan: MonoBehaviour { // Use this for initialization public Transform emptyGameObject; public float distance; public GameObject enemy,prefBullet,bullet; public AudioClip shootAudio; public Transform shootPoint; float volumeSeda=1.0F;
int tedadTir=10;
void Update () { if (Input.GetButtonDown ("Fire1")) //age left_click shod { if(tedadTir > 0) { tedadTir--; bullet= Instantiate(prefBullet, emptyGameObject.position, Quaternion.identity)as GameObject; AudioSource.PlayClipAtPoint(shootAudio, shootPoint.transform.position, volumeSeda); } } }//update }
کد زیر هم به پریفب گلوله میدیم:
//bullet.cs
using
UnityEngine; using System.Collections; public class bullet: MonoBehaviour { public RigidBoy rb; float distance=0.0f;//fasele sefr yani faghat vaghti tir barkhord kard be hadaf void Start(){ rb.AddRelativeForce(Vector3.forward );//partabe tir be samte jelo Destroy(gameObject, 3.0f);//hazfe tir pas az 3 sanie } void OnGUI(){ myRaycast(); } void myRaycast(){ RaycastHit hit; Ray myRay = new Ray(transform.position, Vector3.forward); if(Physics.Raycast (myRay, out hit, distance)){ if(hit.collider.tag == "enemy"){ Destroy(enemy); Destroy(this.gameobject); }//if }//if }//myRaycast }


نکته:
 تیر و دشمن هر دو پس از برخورد از بین میرن.
تیر در صورت عدم برخورد هم پس از سه ثانیه از بین میره.
شما باید پریفب تیر رو درگ کنید روی متغیر prefBullet.
(برای ساخت پریفب،کافیه یک مدل از تیر رو از داخل hierarchy درگ کنید به کادر project. سپس تیر رو از داخل صحنه حذف کنید)
۱ نظر موافقین ۰ مخالفین ۰ ۱۱ بهمن ۹۴ ، ۰۵:۲۶
مدیرکل
منبع:gameover.blog.ir

حجم:
3.5 Mb
به این لینک برید:
چند ثانیه صبر کرده و رد تبلیغ ر بزنید. لینک مستقیم دانلود میاد.
http://opizo.com/nItGRI

چند ثانیه صبر کرده و رد تبلیغ ر بزنید. لینک مستقیم دانلود میاد.
اینم دو تا آموزش:
http://opizo.com/2NqRgN

http://opizo.com/ZM7EBM

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ بهمن ۹۴ ، ۰۱:۴۰
مدیرکل
منبع:gameover.blog.ir
دقت کردید بعضی برنامه های اندرویدی یا بازی ها با چرخش گوشی اشیاشون حرکت می کنه یا توپ و ... ؟
این با ژیروسکوپ یا سنسور اکسیلریشن acceleration هست. شکل رو ببینید:
http://www.i-phone.ir/forums/uploadedpictures/8cc1d230c10801cfb2144d6bac42639f.jpg

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public float speed = 10.0F;
    void Update() {
        Vector3 dir = Vector3.zero;
        dir.x = -Input.acceleration.y;
        dir.z = Input.acceleration.x;
        if (dir.sqrMagnitude > 1)
            dir.Normalize();
        
        dir *= Time.deltaTime;
        transform.Translate(dir * speed);
    }
}

این تصویر کوچک شده است.انداره واقعی : (888x716).برای دیدن در اندازه واقعی روی تصویر کلیک کنید.
[تصویر: accelerometer.jpg]

اینم کد برای چرخش دوربین :



using UnityEngine;
 using System.Collections;
 
 public class TiltAround : MonoBehaviour 
 {
     private Quaternion localRotation; // 
     public float speed = 1.0f; // ajustable speed from Inspector in Unity editor
 
     // Use this for initialization
     void Start () 
     {
         // copy the rotation of the object itself into a buffer
         localRotation = transform.rotation;
     }
     
     
     void Update() // runs 60 fps or so
     {
         // find speed based on delta
         float curSpeed = Time.deltaTime * speed;
         // first update the current rotation angles with input from acceleration axis
         localRotation.y += Input.acceleration.x * curSpeed;
         localRotation.x += Input.acceleration.y * curSpeed;
         
         // then rotate this object accordingly to the new angle
         transform.rotation = localRotation;
     
     }
     
 }
منبع:
http://answers.unity3d.com/questions/167756/rotation-script-with-accelerometer-android.html
۰ نظر موافقین ۰ مخالفین ۰ ۱۰ بهمن ۹۴ ، ۲۳:۰۸
مدیرکل
منبع:gameover.blog.ir
http://gameover.sellfile.ir/prod-images/356249.jpg

در این آموزش با کیفیت عالی یاد می گیرید که در یونیتی انیمیشن دو بعدی بسازید و کاراکتر رو برای پرش و دویدن به چپ و راست انیمیت کنید و بعدش کدی با سیشارپ بنویسید که کاراکتر به همراه انیمیشن به حرکت در بیاد.

حجم آموزش: 128 مگ. بعد از آنزیپ دو برابر میشه حجمش.

نکته : باید برنامه  7 zip رو نصب کنید تا بتونید این اموزش رو آنزیپ کنید.

فرمت فایل بعد از انزیپ: mp4

اسکریپت گیم پلی دو بعدی و اسکریپت تعقیب پلیر توسط دوربین  هم هدیه ما به شما.

قیمت این آموزش بسیار کم و ارزون هست ولی کیفیت اموزش عالیه و تضمین یادگیری.

اگه مشکلی توی دانلود یا ... پیش اومد تو نظرات بگید ایمیل بدید لینک mediaFire رو بهتون ارسال می کنیم.

لینک خرید

http://gameover.sellfile.ir/prod-356249-%D9%81%DB%8C%D9%84%D9%85+%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C+%D8%B3%D8%A7%D8%AE%D8%AA+%D8%A7%D9%86%DB%8C%D9%85%DB%8C%D8%B4%D9%86+%D8%AF%D9%88+%D8%A8%D8%B9%D8%AF%DB%8C++%D9%88+%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87+%D9%86%D9%88%DB%8C%D8%B3%DB%8C+%D8%AD%D8%B1%DA%A9%D8%AA+%D8%A8%D9%87+%DA%86%D9%BE+%D9%88+%D8%B1%D8%A7%D8%B3%D8%AA+%D9%88+%D9%BE%D8%B1%D8%B4+%D8%AF%D8%B1+%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C+5.html


۰ نظر موافقین ۰ مخالفین ۰ ۱۰ بهمن ۹۴ ، ۰۹:۰۸
مدیرکل

منبع:gameover.blog.ir

ساخت یه بازی با دو تا دوربین سخت نیست.
دو تا Camre رو Add کنید .
مقدار خصوصیت H هر دو تا دوربین رو بذارید 0.5
Y بازیکن اول رو بدید 0.5
Y بازیکن دوم رو بدید 0
--
با اینکار بازیکن اول دوربینش بالای صحنه قرار می گیره و اون یکی پایین.

http://sajjad3011.persiangig.com/unity_tut_sajjad3011/Cameras-2.jpg


۰ نظر موافقین ۰ مخالفین ۰ ۱۰ بهمن ۹۴ ، ۰۷:۲۵
مدیرکل

فیلم آموزش آماده سازی کاراکتر دو بعدی در فتوشاپ برای انتقال به یونیتی و همچنین نحوه ی تنظیم آن در یونیتی 5

کیفیت : عالی

حجم:26 مگ (بعد از آنزیپ کردن میشه 60 مگ)

فیلم آموزش آماده سازی کاراکتر دو بعدی در فتوشاپ برای انتقال به یونیتی و همچنین نحوه ی تنظیم آن در یونیتی 5
























http://gameover.sellfile.ir/prod-356118-%D9%81%DB%8C%D9%84%D9%85+%D8%A2%D9%85%D9%88%D8%B2%D8%B4+%D8%A2%D9%85%D8%A7%D8%AF%D9%87+%D8%B3%D8%A7%D8%B2%DB%8C+%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1+%D8%AF%D9%88+%D8%A8%D8%B9%D8%AF%DB%8C+%D8%AF%D8%B1+%D9%81%D8%AA%D9%88%D8%B4%D8%A7%D9%BE+%D8%A8%D8%B1%D8%A7%DB%8C+%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84+%D8%A8%D9%87+%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C+%D9%88+%D9%87%D9%85%DA%86%D9%86%DB%8C%D9%86+%D9%86%D8%AD%D9%88%D9%87+%DB%8C+%D8%AA%D9%86%D8%B8%DB%8C%D9%85+%D8%A2%D9%86+%D8%AF%D8%B1+%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C+5.html


نکته:
در آموزش بعدی کدنویسی کاراکتر دو بعدی و گیم پلی و تاچ در یونیتی رو خواهیم گذاشت.ممنون از حمایت شما.
۱ نظر موافقین ۰ مخالفین ۰ ۱۰ بهمن ۹۴ ، ۰۰:۱۴
مدیرکل
منبع:gameover.blog.ir

نکته اول:
ابتدا از پنجره ی  build به مسیر Player Settings -> Other Settings -> Device Filter برید.
اگه تنظیم devcie f_il_t_er روی هر دو حالت باشه یعنی both ARM and x86 پس حجم بالاتر می ره ولی در عوض روی هر دو پردازنده ی گوشی های هم x86 و هم ARM بازی نصب خواهد شد و بنابراین صرفا بالابودن حجم دلیل بر بد بودن نیست چون بعضی اوقات حتی لازمه برای اینکه مطمئن بشیم بازیمون روی اکثر گوشی ها اجرا میشه.
http://s7.picofile.com/file/8265980368/hajm_bala_bad_nist.jpg

نکته بعدی:

بعد از build به apk ،در قسمت بالا و سمت راست پنجره ی console لاگ یا نوشته ها روی فلش کوچک پایین بزنید یک گزینه Editor Log رو می بینید.روش بزنید می گه چند درصد مربوط به کدوم بخش هست.

  1. ***Player size statistics***
  2. Level 0 'Assets/Loader.unity' uses 459.0 KB compressed / 1.6 MB uncompressed.
  3. Level 1 'Assets/Game.unity' uses 2.3 MB compressed / 7.8 MB uncompressed.
  4. Total compressed size 2.8 MB. Total uncompressed size 9.4 MB.
  5. Textures 3.9 mb 41.2%
  6. Meshes 2.3 mb 23.9%
  7. Animations 679.1 kb 7.0%
  8. Sounds 0.0 kb 0.0%
  9. Shaders 538.1 kb 5.6%
  10. Other Assets 653.8 kb 6.8%
  11. Levels 147.8 kb 1.5%
  12. Scripts 453.3 kb 4.7%
  13. Included DLLs 136.0 kb 1.4%
  14. File headers 747.4 kb 7.8%
  15. Complete size 9.4 mb 100.0%
  16. Used Assets, sorted by uncompressed size:
  17. 277.1 kb 2.9% Assets/Player/Human.blend
  18. 264.1 kb 2.7% Assets/Player/Orc.blend
  19. 216.1 kb 2.2% Assets/Monsters/Foo.blend
  20. 213.0 kb 2.2% Assets/Dungeon/Dungeon.blend
  21. 170.8 kb 1.8% Assets/Monsters/FooSkin.png
  22. ...

Yes, Unity should make this critical information way more obvious!

Sometimes it's as simple as a texture you have forgotten to downscale, or a model that needs to have Compression turned on (model and/or animation). Sometimes you've inadvertently depended upon an expensive DLL (like XML). Sometimes a package you're using (like Detonator) has a lot of big unused Resources (unused mere assets don't matter).

Note on the above sizes: these are for a WebPlayer; unlike Android and iOS, web builds don't have to include the Player, since the user installs that separately (I suspect that's actually the entirety of your "problem").

http://answers.unity3d.com/questions/153065/file-size-is-far-too-big.html


۱ نظر موافقین ۰ مخالفین ۰ ۰۷ بهمن ۹۴ ، ۰۴:۳۹
مدیرکل
چند ثانیه صبر کنید بعدش دکمه سبز رد تبلیغ رو بزنید:

http://opizo.com/Ivbs1j



۰ نظر موافقین ۰ مخالفین ۰ ۰۷ بهمن ۹۴ ، ۰۰:۴۵
مدیرکل

منبع:gameover.blog.ir

روش قدیمی(منسوخ):

یک روش سنتی اینه که یک گیم ابجکت تهی یا empty game object بسازیم و دشمن و یک cube با رنگ قرمز رو بندازیم توی زیرشاخش(به عنوان فرزندش).

بعدش این مکعب رو scale کنیم و در مثلا راستای محور x جهانی(تحت زاویه ای که خود دشمن قرار گرفته یا نسبت به مرکز خودش) اونو کم کنیم مثال:

using UnityEngine;
using System.Collections;
//Author:sajjad3011
public class NewBehaviourScript : MonoBehaviour {
     public GameObject navarKhun;
 
 /*     void Start () {
       navarKhun = GameObject.Find("Cube");
       }
*/
    public void btnChangeHeight() {
      navarKhun.gameObject.transform.localScale -= new Vector3(1,0,0);
    }
}
توضیح:
یک بردار ساخت سه بعدی که y و z اش صفر هست و x یک هست و این بردار رو از اسکیل فعلی کم می کنه.
 یعنی فقط ایکس اش به اندازه یکی کم میشه .
بعدش می تونیم چک کنیم اگه localScale.x از صفر کمتر شد دشمن مرده.


روش جدید و بهتر با استفاده از ui:
اما روش جدید در یونیتی 5 استفاده از کانواس هست.
به هر گیم ابجکت دشمن یک کانواس می دیم و توی تنظیمات render mode رو روی  world space می ذاریم. خوبیش اینه که می تونیم کانواس رو اسکیل کنیم و حتی خودش نسبت به زاویه چرخش دشمن چرخش می کنه و تنظیم میشه.
بعدش توی کد می تونیم width و height ایمیج رو تنظیم کنیم.

مثال:
Image im;
im.rectTransform.rect.width=100
همچنین باید اسپرایت یا image خون رو lookat کنیم به دوربین که روش به سمت دوربین باشه.
مثال:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Transform target;
    
    void Update() {
    	// Rotate the camera every frame so it keeps looking at the target 
        transform.LookAt(target);
    }
}
دوربین رو باید بدیم به target در inspector تا نوار خون نگاهش به سمت دوربین باشه.
۰ نظر موافقین ۰ مخالفین ۰ ۰۶ بهمن ۹۴ ، ۱۴:۵۹
مدیرکل

منبع:gameover.blog.ir

در قسمت سراسری
public Animator anim;
در قسمت دلخواه کد:
غیر فعال کردن:
anim.enabled=false;
فعال کردن:
anim.enabled=true;
۰ نظر موافقین ۰ مخالفین ۰ ۰۶ بهمن ۹۴ ، ۰۲:۵۹
مدیرکل

منبع:gameover.blog.ir

مسیر Window->Profiler رو طی کنید.

در شکل زیر می بینیم هشتاد درصد پردازش مربوط به animator هست:


http://s6.picofile.com/file/8235348992/profiler.jpg

پس برای بهینه سازی بازی باید سعی کنید فقط در صورت نیاز کامپوننت انیمار رو setActive(true و در غیر اینصورت setActive(false کنید.

۱ نظر موافقین ۰ مخالفین ۰ ۰۶ بهمن ۹۴ ، ۰۲:۳۴
مدیرکل

منبع:gameover.blog.ir

کاربرد:

تایپ خودکار متن در بازی ها:

http://s6.picofile.com/file/8235961600/typeAuto.jpg

اینم مثال:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

// attach to UI Text component (with the full text already there)

public class UITextTypeWriter.cs : MonoBehaviour 
{

	Text txt;
	string story;

	void Awake () 
	{
		txt = GetComponent<Text> ();
		story = txt.text;
		txt.text = "";

		// TODO: add optional delay when to start
		StartCoroutine ("PlayText");
	}

	IEnumerator PlayText()
	{
		foreach (char c in story) 
		{
			txt.text += c;
			yield return new WaitForSeconds (0.125f);
		}
	}

}
۲ نظر موافقین ۰ مخالفین ۰ ۰۶ بهمن ۹۴ ، ۰۲:۱۰
مدیرکل

منبع:gameover.blog.ir

using System.Xml;
...
            XmlDocument mydoc = new XmlDocument();
            mydoc.Load("www.example.com/file.xml");
            string mypoint = mydoc.GetElementById("mytext").InnerText;
۰ نظر موافقین ۰ مخالفین ۰ ۰۶ بهمن ۹۴ ، ۰۱:۵۱
مدیرکل
منبع:gameover.blog.ir
public static void ClearLog()
         {
             var assembly = Assembly.GetAssembly(typeof(UnityEditor.ActiveEditorTracker));
             var type = assembly.GetType("UnityEditorInternal.LogEntries");
             var method = type.GetMethod("Clear");
             method.Invoke(new object(), null);
         }
نکته:کلمه var در js داریم اما توی سیشارپ هم var  داریم برای مواردی که متغیری رو می خوایم در زمان اجرا پس از مقدار دادن نوعش رو تعیین کنیم.همچنین برای شناخت توابعی که نوشتیم اینا رو یادتون نره باید ضمیمه کنیم:

using System.Reflection;
using UnityEditor;

منبع:
http://answers.unity3d.com/questions/578393/clear-console-through-code-in-development-build.html

۰ نظر موافقین ۱ مخالفین ۰ ۰۶ بهمن ۹۴ ، ۰۰:۳۹
مدیرکل

منبع:gameover.blog.ir

رفتن به مرحله ی بعد پس از برخورد با درب در یونیتی_دقت کنید درب باید تگ door1 داشته باشه و گزینه ی isTrigger فعال باشه و پلیر باید isTrigger حتما غیرفعال باشه.. کد رو بدید به پلیر

برای کلایدرهای سه بعدی:

void OnTirggerEnter ( Collision Other ) {
if ( Other.gameObject.name == "door1"){
 Application.LoadLevel(Application.loadedLevel + 1);
}
}

برای کلایدر های دو بعدی

void OnTriggerEnter2D( Collider2D Other ) {
if (Other.gameObject.name == "door1"){
 Application.LoadLevel(Application.loadedLevel + 1);
}
}

OnTirggerEnter2d هم واسه دو بعدی هست.
Other.gameObject.tag همیشه داد به شرطی که به درب یک تگ(برچسب) بدیم (door1 یا door یا ...)

نکته:دقت کنید در حالت دو بعدی و سه بعدی اگه توابع اشتباه بدید کار نخواهد کرد کدها.

۵ نظر موافقین ۰ مخالفین ۰ ۰۵ بهمن ۹۴ ، ۱۹:۲۷
مدیرکل

منبع:gameover.blog.ir

Occlusion Culling باعث میشه اجسام پشت دوربین رندر نشه و سرعت بازی رو خیلی بالا میبره و باعث کارایی بی نظیری در رندر میشه و حتی برای بازی های اپن ورد  open world هم پاسخگو هست.

--

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

آموزش فارسی رو می تونید در دو تا فیلم آپارات ببینید :


لینک مستقیم فیلم اول :
http://opizo.com/UyaQH0

لینک مستقیم فیلم دوم :
http://opizo.com/OgVS8z


توضیحات اضافی:

یکی از تکنیک های مهم بهینه سازی بازی های بزرگ و بهبود فریم ریت frame rate در یونیتی و سایر گیم انجین ها:

یکی از تنظیمات occlusion culling و یکی از تنظیمات دیگه گزینه ی near دوربین هست.

near پارامتر نزدیک بودن هست.مثلا اگه بهش عدد 10 بدیم اشیا تا 10 متری رندر میشه و باقی رندر نمیشه مگه اینکه پلیر حرکت کنه و تا مرز ده متر اشیا رندر میشه.

تکنیک دیگه اینه که بیایم خودمون اسکریپت بنویسیم ابتدا آرایه ای بسازیم که کل اشیای صحنه داخلش باشه.(یعنی از نوع GameObject باشه)

سپس Tag هر گیم ابجکت رو چک کنیم اگه غیر از tag زمین و خودمون بود شرط دوم رو اجرا کنیم و اون اینه :

با تابع Vector3.Distance به الگوی


public static float Distance(Vector3 a, Vector3 b);


فاصله ی دوربین رو تا شی رو چک می کنیم.
اگر فاصله کمتر از میزان دلخواه بود گیم ابجکت رو setActive(true یا فعال وگرنه setActive(false یا غیر فعال کنه.
با استفاده از این تکنیک هر چقدر بازی شما بزرگ باشه به شدت افزایش کارایی و بهینه سازی رو خواهیم داشت.
این یکی از حقه های بسیار مهمی هست که اکثر بازی ساز های بزرگ ازش بهره می برن.
با تشکر از رئیس :)



یک آموزش دیگه که از سایت یونیتی گرفتیم و زیپ کردیم روی پیکو فایل از اینجا دانلود کنید:
http://gameover.blog.ir/1394/11/17/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-Occlusion-Culling-Occlusion-Area-%D8%B2%DB%8C%D9%BE-%D8%B4%D8%AF%D9%87-%D8%A7%D8%B2-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A7%D8%B5%D9%84%DB%8C-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C
۰ نظر موافقین ۰ مخالفین ۰ ۰۵ بهمن ۹۴ ، ۱۷:۳۵
مدیرکل

منبع:gameover.blog.ir


VSync در یونتی چیست ؟

۱ نظر موافقین ۰ مخالفین ۰ ۰۵ بهمن ۹۴ ، ۱۶:۱۶
مدیرکل

منبع:gameover.blog.ir

حذف سایه ها و شرطهای اضافه تابع Update و استفاده از FixedUpdate.
cache کردن کلاس ها مثل tranform و ... مثال :

کد :

private Transform _transform;
void Start ()
{
        _transform = this.transform;//cache for optimization
}
استفاده از IEMulator و StartCoroutine.
نکته:بعضی اوقات بهتره انیمیشن ها رو توی یک تابع بذاریم و بعدش StartCoRoutine کنیم اون تابع رو،عوض اینکه بیایم و مستقیم اونو اجرا کنیم.
مثال از اجرا:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    IEnumerator WaitAndPrint()
    {
        // suspend execution for 5 seconds
        yield return new WaitForSeconds(5);
        print("WaitAndPrint " + Time.time);
    }
    IEnumerator Start()
    {
        print("Starting " + Time.time);

        // Start function WaitAndPrint as a coroutine
        yield return StartCoroutine("WaitAndPrint");
        print("Done " + Time.time);
    }
}

سعی کنید تکستچر های شما atlas(اتلس) یا دارای ابعادی با توان 2 باشن مثل 8 در 8 یا 8 در 32 یا 32 در 8 یا 16 در 64 یا 128*256 یا 64*64 یا 128*256 یا 512*512 یا 512*256 و ..... .
اگه اتلس نباشه خود یونیتی مجبوره اونو تبدیل به اتلس کنه و یکم پردازش اضافه مصرف میشه.

نکته : سعی کنید مدل های شما دارای مثلثات و پولیگان های کم باشه.

نکته بعدی:زیاد از پارتیکل مثل دود و آتش و مه و بارون و پکیج های بیخود استفاده نکنید و اگه هم استفاده کردید فقط توی زمان های لحظه ای اونا رو توی بازی فعال کنید.

نکته بعدی : اشیای ثابت رو انتخاب و گزینه static رو در inspector تیک بزنید.همچنین قسمتای پشت دیوارها یا غیر ضروری حذف کنید.

نکته بعدی: نورها رو لایت مپ(lightmap) کنید (تکنیک beast)

نکته بعدی:بعضی وقتا انیمیشن ها رو غیر فعال کنید و به جای تابع آپدیت سعی کنید توی OnTriggerEnter/2d بگید مثلا اگه کاراکتر به دشمن نزدیک شد دشمن انیمیشن بشه و توی OnTriggerExit/2d بگید اگه کاراکتر از محدوده دشمن خارج شد دشمن انیمیشن اش استاپ بشه و ... .

نکته بعدی: وقتی تیر می زنید پس از چند ثانیه سعی کنید تیر رو destroy کنید. اشیای غیر ضروری دیگه هم همونطور.

نکته بعدی: به جای متریال و شیدرها بهتره که از تکستچر های uv map استفاده کنید.

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

نکته بعد: کلایدرهای بیخود رو حذف یا بهینه کنید(در قسمت add component می تونید چند کلایدر مختلف تایپ کنید و بدید به مدل یا اسپرایتتون...نکته اگه edge colider کار نکرد بعضی اوقات بهتره باکس کلایدر بدید)

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


نکته بعدی: نوع شیدر رو بهتره توی inspector روی vertexLit بذاریم. چون پردازش کمتری نیاز داره هر چند کیفیت ممکنه تا حدی بیاد پایین. چون دو نوع تکستچر هست یکی پیکسلی،specular و ... هست که پردازش بیشتری می خواد و زیبایی بیشتری داره و یکی ورتکس هست که پردازش کمتر و زیبایی کمتر داره. شما باید دقت کنید که چه جسمی رو پیکسلی و چه جسمی رو ورتکسی انتخاب کنید. مثلا ساختمان هایی که خیلی دور هستن و لازم نیست که از نزدیک بهشون خیره بشیم رو vertexLit shader بدید.

نکته ی بعدی: اندازه ی بافت تصاویر کوچک بازی که زیاد به چشم نمیان رو کم کنید . مثلا گزینه ی max size رو برای تکستچر آجرها یا اشیای دیگه روی سایز کم تر بذارید تا حدی که قابل تحمل باشه.(برای bumped texture ها هم همینکارو کنید)

نکته ی بعدی: اگه می خواید تمام اجسام رو یه دفعه اپتیمایز کنید به منوی Edit->Project settings->Quality برید و اونجا می تونید تنظیمت دیگه ای انجام بدید مثل اینکه سایه ها رو روی hard بذارید یا حذف کنید. رزولوشن سایه ها و تکستچرها رو می تونید به طور تقریبی تنظیم کنید که روی low باشه.گزینه ی shadow distance رو اگه کم کنید سایه زیاد تا دور دست رندر نمیشه و یکم بهینه تر میشه.گزینه ی texture quality هم بای کم کردن کیفیت بافت تکستچرهای کل بازی هست که اینم می تونه بازی رو بهینه کنه.گزینه ی anisotropic texture هم اگه از کار بندازید جزئیات کم میشه.گزینه ی دیگه anti aliasing هست که لبه های عکس ها رو برامون تنظیم می کنه و اگه کمتر باشه تا یه حدی بهتره.

برای نور پردازی از تکنیک لایت مپ lightmap یا beast استفاده کنید:
http://gameover.blog.ir/1394/04/27/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%DA%A9%D9%86%DB%8C%DA%A9-beast-%D9%88-%D9%86%D9%88%D8%B1%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%DB%8C-lightmap-%D9%88-bake-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AA%D8%B9%D8%A7%D8%AF-%D8%A8%DB%8C%D8%B4%D9%85%D8%A7%D8%B1-%D9%86%D9%88%D8%B1
۱ نظر موافقین ۰ مخالفین ۰ ۰۵ بهمن ۹۴ ، ۰۴:۱۶
مدیرکل

منبع :gameover.blog.ir

مثال1:

متغیری از نوع عمومی public می سازیم که باید کامپوننت انیمیشن هم drag کنیم روش در inspector.

روش زیر برای انیمیشن هایی که با انیماتور نمی شه اجرا کرد(انیمیشن های سنتی یا legacy که با نرم افزارهای قدیمی ریگ شده) و حتی انیمیشن های جدید(هر دو ) جواب مید:

public Animation anim;
    void Start() 
    {

            anim.Play("esme animation");
    }


مثال2:

متغیری از نوع خصوصی private می سازیم که کامپوننت انیمیشن رو از طریق کد دریافت می کنیم.

    private Animation anim;
    void Start () 
    {
        anim.GetComponent<Animation> ();
            anim.Play("esme animation");
    }

نکته:

کامپوننت انیمیشن هم باید به player بدید. برای اینکه خودش کامپوننت رو بده یا نذاره حذفش کنید این دستور رو قبل از اسم کلاس بیارید:

[RequireComponent(typeof(Animation))]


نکته مهم: گزینه LEgacy یا سنتی در حالت دو بعدی یافت نمیشه و احتمالا فقط برای حالت سه بعدی در بخش Rig باید تنظیم بشه.(دو بعدی هم بهتره با Animator کار بشه نه Animation)

شاید یکی از دلایل افت فریم و کند شدن بازی های یونیتی اینه که از چند کامپوننت انیمیاتور استفاده کنیم.
پس بهتره بعضی اوقات به جای انیماتورها از کامپوننت انیمیشن استفاده بشه.

ابتدا کاراکتری که می خواید براش انیمیشن های مختلف بسازید انتخاب کنید( از کادر hierarchy(کادر اجزای صحنه))

سپس به منوی window->animation برید و انیمیشنی رو ایجاد کنید(Create new animation clip)

http://s6.picofile.com/file/8235101618/create_animationClip.jpg

http://s6.picofile.com/file/8235101684/create_animationClip2.jpg


سپس کامپوننت animation بدید به کاراکترتون. و size بدید و انیمیشن ها رو بیارید توش:

http://s6.picofile.com/file/8235101942/create_animationClip3.jpg


دستور Crossfade:


سپس از کد زیر الهام بگیرید برای سوئیچ بین انیمیشن ها :(دقت کنید اسم اسکریپت و کلاس سیشارپ ما باید حتما یکسان باشه.در اینجا ExampleClass)

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Animation anim;
    void Start() {
        anim = GetComponent<Animation>();
    }
    void Update() {
        if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1F)
            anim.CrossFade("Run");
        else
            anim.CrossFade("Idle");
    }
}

نکته: تابع یا متد CrossFade هم برای کامپوننت Animator کاربرد داره هم کامپوننت Animation.
موفق باشید.

در صورتی که نیاز به بهینه سازی هم دارید این مطلب و بخونید:
http://gameover.blog.ir/1394/11/05/%D8%A8%D8%B1%D8%AE%DB%8C-%D8%A7%D8%B2-%D8%AA%DA%A9%D9%86%DB%8C%DA%A9-%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%AB%D8%B1-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%A7%D9%84%D8%A7%D8%B1%D9%81%D8%AA%D9%86-%D8%B3%D8%B1%D8%B9%D8%AA-%D8%B1%D9%86%D8%AF%D8%B1-%D9%88-%D8%A7%D9%81%D8%B2%D8%A7%DB%8C%D8%B4-%DA%A9%D8%A7%D8%B1%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C

http://gameover.blog.ir/1394/08/11/%DA%A9%D8%AF-%D8%AD%D8%B1%DA%A9%D8%AA-%D9%BE%D8%B1%D8%B4-%D8%AF%D8%A7%D8%A8%D9%84-%D8%AC%D8%A7%D9%85%D9%BE-%D8%B1%D8%A7%D9%87-%D8%B1%D9%81%D8%AA%D9%86-%D8%AF%D9%88-%D8%A8%D8%B9%D8%AF%DB%8C-player-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-Easy-touch-version-3-%D8%B3%DB%8C%D8%B4%D8%A7%D8%B1%D9%BE


۳ نظر موافقین ۰ مخالفین ۰ ۰۴ بهمن ۹۴ ، ۱۸:۰۶
مدیرکل
منبع:gameover.blog.ir
اسکریپت زیر رو بدید به دوربین و سپس یک پریفب(یک گیم ابجکت که با ماوس قبلا از توی کادر hierarchy کشیده باشید توی کادر project) رو بندازید روی متغیر prefab از وروی اسکریپت در inspector.
using UnityEngine;
using System.Collections;

public class create : MonoBehaviour {
	Ray ray;
	RaycastHit hit;
	public GameObject prefab;
	void Update () {		
		ray=Camera.main.ScreenPointToRay(Input.mousePosition);		
		if(Physics.Raycast(ray,out hit)){			
			if(Input.GetKey(KeyCode.Mouse0))
			{
				GameObject obj=Instantiate(prefab,new Vector3(hit.point.x,hit.point.y,hit.point.z), Quaternion.identity) as GameObject;
				
			}			
		}

	}
}
نکته :
بعد از اجرا حتما باید توی صحنه یک Plane یا یک گیم ابجکت حاقل موجود باشه تا وقتی روش کلیک کردیم یک نمونه از پریفب ما ایجاد بشه.
پریفب هم گفتیم نمونه ای از گیم ابجکت هست که قبلا توی صحنه بود و بعدش کشیدیم توی کاد پروژه و سپس اونو حذف کردیم(حذف هم دلخواست)
۰ نظر موافقین ۰ مخالفین ۰ ۰۳ بهمن ۹۴ ، ۰۱:۱۲
مدیرکل

هرمشکلی در پرداخت یا دانلود بود در وبلاگ gameover.blog.ir مطرح کنید.
شماره تماس بذارید برای تلگرام
09039739619
09358077198

https://zarinp.al/173921

۳ نظر موافقین ۰ مخالفین ۰ ۰۱ بهمن ۹۴ ، ۰۹:۱۰
مدیرکل


منبع:gameover.blog.ir

// When the audio component has stopped playing, play otherClip
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public AudioClip otherClip;
    AudioSource audio;
    
    void Start() {
    	audio = GetComponent<AudioSource>();
    }
    
    void Update() {
        if (!audio.isPlaying) {
            audio.clip = otherClip;
            audio.Play();
        }
    }
}


روش بعدی:

using UnityEngine;
     using System.Collections;
 
     [RequireComponent(typeof(AudioSource))]

     public class ExampleClass : MonoBehaviour
     {
         public AudioClip engineStartClip;
         public AudioClip engineLoopClip;
         void Start()
         {
             GetComponent<AudioSource> ().loop = true;
             StartCoroutine(playEngineSound());
         }
 
         IEnumerator playEngineSound()
         {
             audio.clip = engineStartClip;
             audio.Play();
             yield return new WaitForSeconds(audio.clip.length);
             audio.clip = engineLoopClip;
             audio.Play();
         }
     }
منبع :
 http://answers.unity3d.com/questions/904981/how-to-play-an-audio-file-after-another-finishes.html
۰ نظر موافقین ۰ مخالفین ۰ ۳۰ دی ۹۴ ، ۰۱:۰۵
مدیرکل

منبع:gameover.blog.ir


مثال:

برای خروج از بازی وقتی روی یک cube کلیک شد بهش این کد رو میدیم:

void OnMouseDown(){
        Application.Quit();
}


مثال: برای باز شدن سایت و مثلا ارسال عدد 9 به فایل get.php:

void OnMouseDown(){
Application.OpenURL("http://example.com/get.php?Scrore=9");
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۹ دی ۹۴ ، ۲۰:۲۵
مدیرکل


منبع:gameover.blog.ir

GetComponent.<AudioSource> ().Stop();
GetComponent.<AudioSource> ().Play();
۰ نظر موافقین ۰ مخالفین ۰ ۲۵ دی ۹۴ ، ۰۹:۳۳
مدیرکل
منبع :gameover.blog.ir

Rename (or copy) the package to xxxxxxxxxxx.tar.gz then use any compression software that's able to decrompress tar.gz archives.

When you have it decompressed view inside the folders and you'll find files named "metaData" if you view those files with any editor (pretty much any text editor will do) you'll see the Unity version number inside starting at about character position 21

پکیج رو به xxxxxxxxxxx.tar.gz تغییر نام بدید سپس یک نرم افزار فشرده ساز رو که قادر به decmpress(از حالت فشرده خارج کردن) آرشیوهای tar.gz هست استفاده کنید.


بعد از استخراج در داخل پوشه ها فایل هایی به نام metaData پیدا خواهید کرد . اگر این فایل ها رو با یک ویرایشگر متنی باز کنید  شماره ورژن رو در آغاز و کاراکتر تقریبا 21 ام خواهید یافت.
موفق باشید.


http://forum.unity3d.com/threads/check-unity-version-with-which-unitypackage-was-created.225751/
۰ نظر موافقین ۰ مخالفین ۰ ۲۴ دی ۹۴ ، ۲۱:۱۸
مدیرکل
منبع:gameover.blog.ir
زبان:انگلیسی
https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQT-5OpZsFAbjUbWK9xq_Lh15_04A5r6DD-1BTkz-3Y5_bQKUE5

این کتاب واقعا کمیاب هست و وقت روی برنامه نویسی سیشارپ روی یونیتی بحث می کنه و از اول تا آخر به کدنویسی می پردازه.

ما خودمون خیلی جستجو کردیم و این اولین جایی هست این لینک رو مستقیم میذاریم برای شما.

تعداد صفحه: 686
ابتدا روی لینک زیر کلیک کنید.14 ثانیه صبر کنید تا تبلیغ رو ببینید. بعدش دکمه ی سبز رد تبلیغ رو بزنید تا به لینک مستقیم مدیافایلر فایل هدایت بشید.

نکته
: حجم این کتاب بعد از آنزیپ  120 مگ میشه.
zip شده فقط 40 مگ برای دانلود:


اینم ترجمه  قسمت های مهم از 400 صفحه اول اون به صورت فیلم های فارسی:
http://opizo.com/I6Jf2x

۲ نظر موافقین ۰ مخالفین ۰ ۲۲ دی ۹۴ ، ۱۴:۲۵
مدیرکل
منبع:gameover.blog.ir
http://answers.unity3d.com/questions/813752/is-there-any-way-to-save-a-variable-into-a-txt-fil.html
using UnityEngine;
 using UnityEngine.UI;
 using System.Collections;
 using System.IO;
 public class BestScore2 : MonoBehaviour {
 public Text textBestScore; // you dont need this
 
     void Start () {
         string t = "your text";
         string path = "Builds/FormulaOne_Data/BestScore.txt";
         System.IO.File.WriteAllText (@path, t); // for writing
         string text = System.IO.File.ReadAllText(@path); // for reading
         textBestScore.text = text;  // you dont need this
     }
 
 
 } 

۰ نظر موافقین ۰ مخالفین ۰ ۲۰ دی ۹۴ ، ۱۲:۱۸
مدیرکل

نکته:اولا این کتاب خیلی کمیاب هست و حتی توی سایت های خارجی هم بسیار نادر هست ولی ما این کتاب رو به رایگان براتون می ذاریم تا دانلود بفرمایید.

تعداد صفحه: نزدیک 800 


نکته ی مهم : افراد عادی که با انجین های بازی سازی unity کار نکردن یا کلا قصد ساخت بازی (چه دو بعدی چه سه بعدی) رو دارن نیازی به این کتاب نیست و باید اول بدون درگیر شدن با جزئیات،برن مستقیم با یونیتی کار کنن .



چون در openGL فقط کارهای گرافیک رو انجام میدیم تحت Visual c ++ و خروجی اندروید و غیره هم در کار نیست.(و الان هم واسه عهد بوقه و شما بهتره برید سمت unity)، یه خروجی صرفا EXE می سازیم که کتابخانه ها و فایل های DLL و Lib یا ... رو به محیط ویژوال استادیو add reference و تیک می زنیم و فایل dll رو در c:\windows\system32 میریزیم و lib رو هم در پوشه ی include و الی آخر... .

این کتاب برای زمانی هست که شما حرفه ای یونیتی یا انیجن های دیگه می شید.بین انجین های دیگه مثل cry یا unreal و unity و game maker studio (خود گیم میکر منسوخ هست و حتما استادیو خروجی اندروید میده) و OGRE و torque 3d و  S2Engine HD  هم هم خودتون مختارید با چی کار کنید. اما بنده توصیه ام اینه که شروع کارتون با unity باشه بعدش حالا خواستید برید سمت انجین های دیگه تا تست کنید و خودتون تشخیص بدید برتری های یونیتی رو. فقط فیزیک یونتیی کمی توی قسمت Rigid body و سرعت های بالا ممکنه ضعیف عمل کنه که اونا رو باید با تکنیک پیاده سازی کرد و شاید آنریل توی سیستم های فیزیک قوی تر باشه.اما باز هم شروع کار یونیتی از نظر ما.


بعد از تسلط به یونیتی و شروع بازی سازی،اونجایی که دوست دارید مطالعات آزاد تری رو در زمینه ی کدنویسی سخت تر با open GL انجام بدید(هر چند منسوخ هست) فقط به صرف اینکه ایده های ساخت انجین های بازی سازی رو درک کنید می تونید از کتب openGL مثل این و سایر کتب و directX و .... کمک بگیرد.(فرق open GL هم با directX اینه که openGL از توابع بیشتری استفاده می کنه و اشیای سه بعدی و ترسیمات texture و فایل های عکس و انداخت اونا روی مدل و shader ها(متریال های روی مدل ها) و نورپردازی ها و سایه گذاری ها و به طور کلی فقط کار گرافیک رو انجام میده و با صدا و سایر جنبه ها کاری نداره.(مباحث دیگه مثل openAL یا Cross Platform 3D Audio مربوط به صدا) و Directx هم جزو برنامه نویسی های حرفه ای تر هست که مستقیما با سحت افزار درگیر می شید و اونجا برای حرفه ای ها هست که دوست دارن کدهاشون با سرعت بیشتری بدون تبدیلات اضافه به فرمت اجرایی روی سیستم عامل ویندوز در بیاد و الی آخر...)

این شما و این یکی از بهترین کتاب های openGL (فقط حرفه ای ها مطالعه کنن و مبتدیان سعی کنید درگیر جزئیات این کتاب نشید که چطوری بازی بسازیم و از کجا شروع کنیم.اگه سوالی در رابطه با بازی سازی دارید در وبلاگ نظر بدید بنده ی حقیر راهنماییتون خواهم کرد انشاءا... . چون خودم مدت ها سر در گم بودم و چندین سال در این باب تحقیق کردم و البته باز هم بی سواد هستم در برابر اساتید و تمام شما بزرگواران. .و من ا... توفیق):


http://pxhst.co/avaxhome/ad/ac/0014acad_medium.jpeg

http://opizo.com/yrsFmQ

۱ نظر موافقین ۰ مخالفین ۰ ۱۹ دی ۹۴ ، ۱۱:۴۸
مدیرکل

منبع:gameover.blog.ir

ذخیره مرحله بازی در یونیتی 5:
۷ نظر موافقین ۰ مخالفین ۰ ۱۸ دی ۹۴ ، ۱۴:۰۱
مدیرکل

منبع:gameover.blog.ir

از منوی Edit زیرمنوی Render settings رو انتخاب کنید و گزینه ی Fog رو در پنل باز شده در کادر inspector فعال کنید و تنظیمات مثل رنگ و شدت و غیره رو دستکاری کنید:

http://s5.picofile.com/file/8130506150/fog_unit.jpg


۱ نظر موافقین ۰ مخالفین ۰ ۱۸ دی ۹۴ ، ۱۲:۵۷
مدیرکل

منبع:gameover.blog.ir


using UnityEngine;
using System.Collections;
//Smooth camera for 2d platforms
//Author:Sajjad3011
//unity 5
public class camera2d : MonoBehaviour {
    public Transform target;
    private float smooth=1f;
    void FixedUpdate () {
        transform.position = Vector3.Lerp(transform.position, target.position, smooth * Time.deltaTime)-new Vector3(0,0,0.4f);
    }
}
نکته: طبق کد حتما باید توی FixedUpdate کار کنید. اگه توی Update بذارید صحنه لرزش پیدا کرده یا پرک پرک می زنه.

طبق کد ما از متد یا تابع Lerp برای حرکت نرم دوربین بین دو نقطه شروع (پوزیشن فعلی دوربین) و پایان(پوزیشن player) استفاده کردیم و سرعت حرکت هم در پارامتر smooth انجام دادیم و در تایم ضرب کردیم. smooth به معنی فاکتور نرمی هست و اگه زیادش کنیم سرعت حرکت بیشتر خواهد بود.

وکتور 3 هم که ایجاد کردیم برای این بود که موقعیت دقیقا می افتاد روی پلیر و زوم میشد روش و ما به اندازه ی 0.4 در واحد float از محور z کم کردیم تا فاصله بگیره و عقب بره ولی توی بردار x و y همون هست و هیچی ازش کم نکردیم .


روش دوم :
using UnityEngine;
using System.Collections;

public class SmoothFollow2D : MonoBehaviour {

 private Vector3 velocity = Vector3.zero;
 public Transform target;
 
 // Update is called once per frame
 void Update () 
 {
  if (target)
  {
   Vector3 point = GetComponent<Camera>().WorldToViewportPoint(target.position);
   Vector3 delta = target.position - GetComponent<Camera>().ViewportToWorldPoint(new Vector3(0.2f, 0.5f, point.z)); //(new Vector3(0.5, 0.5, point.z));
   Vector3 destination = transform.position + delta;
   transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, 0);
  }
  
 }

}

۵ نظر موافقین ۰ مخالفین ۰ ۱۷ دی ۹۴ ، ۰۷:۵۶
مدیرکل