مهمان عزیز خوش‌آمدید. ورود عضــویت


click and point (unity)
#1
سلام دوستان خیلی وقت بود دنبال اموزش کلیک و اشاره در یونیتی بودم و بلاخره تونستم خودم پیاده سازیش کنم و گفتم به شما هم اموزش بدیم و حالشو ببرید .

کد:
private bool mouseClicksStarted = false;
    private int mouseClicks = 0;
    public float mouseTimerLimit = .25f;
    public GameObject playerBlue;
    public Vector3 newposition ;
    public float speed = 0 ;
    public Vector3 playerposition ;

    void Update() {

        
        playerposition = new Vector3 (playerBlue.transform.position.x,playerBlue.transform.position.y,playerBlue.transform.position.z);
        
        
        if(playerposition.x > newposition.x){
            Debug.Log("player bishtare");
            transform.localScale = new Vector3 (1,1,1);
        }
        if(playerposition.x < newposition.x){
            Debug.Log("player kamtare " ) ;
            transform.localScale = new Vector3 (-1,1,1);
        }
        if(playerposition == newposition){
            Debug.Log("mosavi ast");
            GetComponent<Animator>().SetInteger("action-player",0);
        }
        

        if(Input.GetMouseButtonDown(0)){ OnClick ();    
            Ray ray = (Camera.main.ScreenPointToRay(Input.mousePosition));
            RaycastHit hit ;
            speed = 0 ;
            if(Physics.Raycast(ray,out hit ))
            {
                print(hit.transform.name);
                if(hit.transform.name == "backgame" )
                {
                    newposition = new Vector3 (hit.point.x , playerBlue.transform.position.y , playerBlue.transform.position.z);
                    
                }
            }
        }
        playerBlue.transform.position = Vector3.MoveTowards(this.transform.position , newposition , speed * Time.deltaTime ) ;
    }
    
    public void OnClick(){
        mouseClicks++;
        if(mouseClicksStarted){
            return;
        }
        mouseClicksStarted = true;
        Invoke("checkMouseDoubleClick",mouseTimerLimit);
    }
    
    
    private void checkMouseDoubleClick()
    {
        if(mouseClicks > 1){
            GetComponent<Animator>().SetInteger("action-player",1);
            speed = 20 ;
        }else{
            GetComponent<Animator>().SetInteger("action-player",2);
            speed = 5 ;
        }
        mouseClicksStarted = false;
        mouseClicks = 0;
        
    }
}

خب اول از همه بگم من زیاد توضیح دادنم خوب نیست (البته کد ها هم خیلی واضح هستن )
خب اول میریم سراغ متغییر ها :
1- متغییری از نوع اعداد صحیح برای شمارش دفعات تاچ شدن .
2- متغییری از نوع اعداد اعشاری = زمان دابل تاچ رو مشخص میکنه (مقدار منطقه زمانی شرط دابل تاچ)
3-متغیری از نوع اجسام بازی که بازیکن (کاراکتر ) رو درون اون میریزیم .
4-متغییری از نوع بردارها (سه جهت) برای ذخیره مکان تاچ شده .
5- متغییری از نوع اعداد اعشاری برای سرعت حرکت بازیکن .
6- متغییری از نوه بردارها (سه جهت) برای ذخیره موقعیت بازیکن .


خب میریم سراغ کد ها (توی این کد ما فقط با تابع update سروکار داریم و چندتا تابع شخصی )

در خط اول کد ها ما اومدیم متغییر playerposition رو برابر با مختصات playerblue که کاراکتر ما هست قرار میدیم ( کاربرد اون هم برای تغییر انیمیشن ها و چک کردن رسیدن به موقعیت تاچ شده است ) .

چند خط بعدی کد که بسیار واضح هستش میاد موقعیت مکانی بازیکن رو که داخل یک متغییر از نوع برداری ریخته بودیم رو با موقعیت مکانی جایی که تاچ کردیم میکنه و  دستورات لازم مثل عوض کردن سمت کاراکتر و غیره ذالک .

خب حالا رسیدیم به قسمت اصلی کد یعنی ری زدن یا همون فرستادن اشعه . (توضیح کلی = دوستان ری زدن یا همون اشعه میاد از نقطه ای که ما مشخص کردیم خط یا همون اشه ای رو میفرسته که خیلی کاربرد داره (زیاد جزئی توضیح نمیدم بهتره این مباحثو بصورت ویدیویی مشاهده کنید ) خب ما اومدیم با استفاده از کلیک چپ موس یک شرط رو گزاشتیم که اگه کلیک چپ موس فشرده شد => ابتدا تابع OnClick رو فراخوانی میکنه و بعدش در خط اول میاد یک متغییر از نوع اشعه که ما اسمشو همون ری گزاشتیم رو از دوربین به جایی که ما کلیک کردیم میفرسته .  در خطوط بعدی ما میاییم و برخورد اشعه  رو چک میکنیم . و میگیم اگه با یک جسمی برخورد کرد بیاد اسم اون جسم رو برای ما پرینت کنه .

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

خب میریم ادامه ی کار در خط بعدی ما میایم میگیم که اگر نقطعه برخورد جسمی که پیدا کرده اسمش برابر با اسم مورد نظر ما باشه بیاد و متغییر newposition رو که برای گرفتن مکان کلیک شده بود رو برابر ایکس نقطه لمس شده و وای و زد مختصات خود پلیر کن .
نکته2 (من چون میخواستم پلیر فقط در محور ایکس حرکت کنه فقط مختصات ایکس نقطه تاچ شده رو بهش دادم شما میتونید برای بازی های 3 بعدی سه نقطه رو بدید یا دوتا . دیگه کدشو یاد گرفتید طبق سلیفه پیش برید )

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

خب ی توضیح کلی میدم راجب چندتا کد بعدی که ماله دابل تاچ و سینگل تاچه . ببین دوستان ما ی زمانی داریم تو اون زمان اگه ما هر بار تاچ کنیم میاد یک عدد به متغییر mouseclick اضافه میکنه و بعدش با استفاده از خاصیت invoke بعد از گزشتن زمان mousetimerlimit تابع چک موس دابل کلیک فراخوانی میشه . خب حالا اصل کار

حالا میایم چک میکنیم و میگیم اگه متغیر موس کلیک (تو اون زمان که گفتیم ) بیشتر یک بود . بگه که دابل کلیک شده . (من واسه دابل کلیک سرعت کاراکترو 20 گزاشتم (متغییر speed)  و با استفاده از کامپوننت انیماتور اومدم انیمیشن دویدن رو گزاشتم .

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


چندتا چیز کلی => خب اول از همه بگم که کلیک موس در اندروید همون حکم تاچ رو داره
اگه توجه کنید در شرط کلیک شدن من اومدم یدور سرعت رو صفر کردم . این هیچ تاثیری نداره میتونید برش دارید ولی بهتره بزارید بعضی وقتا ی باگ هایی پیش میاد .
این مقادیر و غیره همشون شخصی من هستن بیشتریاشونو میتونید تغییر بدید ولی اینا بهترین گزینه هاش هستن دیگه حالا بازم بستگی به کار خودتون داره
-------------------------------------------------------------------------------------------------------------------------------------------------

لینک فایل پروژه :
click and point (unity)
*


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

سپاس فراموش نشه 4  شب خوش موفق باشید .
[عکس: MM.png]
 
پاسخ دهید
 سپاس شده توسط: erfan002pooya ، mostafanastary ، mahdi_R8095 ، developer ، ARMAN_IRBAX ، shazde ، user-11 ، makan parsi ، mhc ، vng ، dyyergame ، hamed2002
#2
سلام
ممنون که کد رو به اشتراک گذاشتی، منتهی یه زحمتی بکش، به صورت فایل پروژه ی یونیتی بذاری ، تشکر ها بیشتر هم میشه....
 
پاسخ دهید
 سپاس شده توسط: danials008 ، shazde
#3
(1395/10/16، 10:01 عصر)mostafanastary نوشته: سلام
ممنون که کد رو به اشتراک گذاشتی، منتهی یه زحمتی بکش، به صورت فایل پروژه ی یونیتی بذاری ، تشکر ها بیشتر هم میشه....

چشم حتما تا چند دقیقه دیگه ی فایل سورس با فایل کد رو هم میزارم 63
[عکس: MM.png]
 
پاسخ دهید
 سپاس شده توسط: shazde
#4
لینک سورس اضافه شد !
[عکس: MM.png]
 
پاسخ دهید
 سپاس شده توسط: shazde
#5
بسیار ممنون.
 
پاسخ دهید
 سپاس شده توسط: danials008 ، shazde
#6
(1395/10/16، 09:21 عصر)danials008 نوشته: سلام دوستان خیلی وقت بود دنبال اموزش کلیک و اشاره در یونیتی بودم و بلاخره تونستم خودم پیاده سازیش کنم و گفتم به شما هم اموزش بدیم و حالشو ببرید .

کد:
private bool mouseClicksStarted = false;
    private int mouseClicks = 0;
    public float mouseTimerLimit = .25f;
    public GameObject playerBlue;
    public Vector3 newposition ;
    public float speed = 0 ;
    public Vector3 playerposition ;

    void Update() {

        
        playerposition = new Vector3 (playerBlue.transform.position.x,playerBlue.transform.position.y,playerBlue.transform.position.z);
        
        
        if(playerposition.x > newposition.x){
            Debug.Log("player bishtare");
            transform.localScale = new Vector3 (1,1,1);
        }
        if(playerposition.x < newposition.x){
            Debug.Log("player kamtare " ) ;
            transform.localScale = new Vector3 (-1,1,1);
        }
        if(playerposition == newposition){
            Debug.Log("mosavi ast");
            GetComponent<Animator>().SetInteger("action-player",0);
        }
        

        if(Input.GetMouseButtonDown(0)){ OnClick ();    
            Ray ray = (Camera.main.ScreenPointToRay(Input.mousePosition));
            RaycastHit hit ;
            speed = 0 ;
            if(Physics.Raycast(ray,out hit ))
            {
                print(hit.transform.name);
                if(hit.transform.name == "backgame" )
                {
                    newposition = new Vector3 (hit.point.x , playerBlue.transform.position.y , playerBlue.transform.position.z);
                    
                }
            }
        }
        playerBlue.transform.position = Vector3.MoveTowards(this.transform.position , newposition , speed * Time.deltaTime ) ;
    }
    
    public void OnClick(){
        mouseClicks++;
        if(mouseClicksStarted){
            return;
        }
        mouseClicksStarted = true;
        Invoke("checkMouseDoubleClick",mouseTimerLimit);
    }
    
    
    private void checkMouseDoubleClick()
    {
        if(mouseClicks > 1){
            GetComponent<Animator>().SetInteger("action-player",1);
            speed = 20 ;
        }else{
            GetComponent<Animator>().SetInteger("action-player",2);
            speed = 5 ;
        }
        mouseClicksStarted = false;
        mouseClicks = 0;
        
    }
}

خب اول از همه بگم من زیاد توضیح دادنم خوب نیست (البته کد ها هم خیلی واضح هستن )
خب اول میریم سراغ متغییر ها :
1- متغییری از نوع اعداد صحیح برای شمارش دفعات تاچ شدن .
2- متغییری از نوع اعداد اعشاری = زمان دابل تاچ رو مشخص میکنه (مقدار منطقه زمانی شرط دابل تاچ)
3-متغیری از نوع اجسام بازی که بازیکن (کاراکتر ) رو درون اون میریزیم .
4-متغییری از نوع بردارها (سه جهت) برای ذخیره مکان تاچ شده .
5- متغییری از نوع اعداد اعشاری برای سرعت حرکت بازیکن .
6- متغییری از نوه بردارها (سه جهت) برای ذخیره موقعیت بازیکن .


خب میریم سراغ کد ها (توی این کد ما فقط با تابع update سروکار داریم و چندتا تابع شخصی )

در خط اول کد ها ما اومدیم متغییر playerposition رو برابر با مختصات playerblue که کاراکتر ما هست قرار میدیم ( کاربرد اون هم برای تغییر انیمیشن ها و چک کردن رسیدن به موقعیت تاچ شده است ) .

چند خط بعدی کد که بسیار واضح هستش میاد موقعیت مکانی بازیکن رو که داخل یک متغییر از نوع برداری ریخته بودیم رو با موقعیت مکانی جایی که تاچ کردیم میکنه و  دستورات لازم مثل عوض کردن سمت کاراکتر و غیره ذالک .

خب حالا رسیدیم به قسمت اصلی کد یعنی ری زدن یا همون فرستادن اشعه . (توضیح کلی = دوستان ری زدن یا همون اشعه میاد از نقطه ای که ما مشخص کردیم خط یا همون اشه ای رو میفرسته که خیلی کاربرد داره (زیاد جزئی توضیح نمیدم بهتره این مباحثو بصورت ویدیویی مشاهده کنید ) خب ما اومدیم با استفاده از کلیک چپ موس یک شرط رو گزاشتیم که اگه کلیک چپ موس فشرده شد => ابتدا تابع OnClick رو فراخوانی میکنه و بعدش در خط اول میاد یک متغییر از نوع اشعه که ما اسمشو همون ری گزاشتیم رو از دوربین به جایی که ما کلیک کردیم میفرسته .  در خطوط بعدی ما میاییم و برخورد اشعه  رو چک میکنیم . و میگیم اگه با یک جسمی برخورد کرد بیاد اسم اون جسم رو برای ما پرینت کنه .

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

خب میریم ادامه ی کار در خط بعدی ما میایم میگیم که اگر نقطعه برخورد جسمی که پیدا کرده اسمش برابر با اسم مورد نظر ما باشه بیاد و متغییر newposition رو که برای گرفتن مکان کلیک شده بود رو برابر ایکس نقطه لمس شده و وای و زد مختصات خود پلیر کن .
نکته2 (من چون میخواستم پلیر فقط در محور ایکس حرکت کنه فقط مختصات ایکس نقطه تاچ شده رو بهش دادم شما میتونید برای بازی های 3 بعدی سه نقطه رو بدید یا دوتا . دیگه کدشو یاد گرفتید طبق سلیفه پیش برید )

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

خب ی توضیح کلی میدم راجب چندتا کد بعدی که ماله دابل تاچ و سینگل تاچه . ببین دوستان ما ی زمانی داریم تو اون زمان اگه ما هر بار تاچ کنیم میاد یک عدد به متغییر mouseclick اضافه میکنه و بعدش با استفاده از خاصیت invoke بعد از گزشتن زمان mousetimerlimit تابع چک موس دابل کلیک فراخوانی میشه . خب حالا اصل کار

حالا میایم چک میکنیم و میگیم اگه متغیر موس کلیک (تو اون زمان که گفتیم ) بیشتر یک بود . بگه که دابل کلیک شده . (من واسه دابل کلیک سرعت کاراکترو 20 گزاشتم (متغییر speed)  و با استفاده از کامپوننت انیماتور اومدم انیمیشن دویدن رو گزاشتم .

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


چندتا چیز کلی => خب اول از همه بگم که کلیک موس در اندروید همون حکم تاچ رو داره
اگه توجه کنید در شرط کلیک شدن من اومدم یدور سرعت رو صفر کردم . این هیچ تاثیری نداره میتونید برش دارید ولی بهتره بزارید بعضی وقتا ی باگ هایی پیش میاد .
این مقادیر و غیره همشون شخصی من هستن بیشتریاشونو میتونید تغییر بدید ولی اینا بهترین گزینه هاش هستن دیگه حالا بازم بستگی به کار خودتون داره
-------------------------------------------------------------------------------------------------------------------------------------------------

لینک فایل پروژه :
click and point (unity)
*


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

سپاس فراموش نشه 4  شب خوش موفق باشید .

اول اینکه لینک خرابه دانلود نمیشه 
دوم اینکه کد اشکال داره انیمیشن ها هیچکدوم اجرا نمیشن

 
پاسخ دهید
 سپاس شده توسط:
#7
سلام
کارت عالی بود
هیچی یونیتی نمیشه
 
پاسخ دهید
 سپاس شده توسط: danials008
#8
(1395/12/21، 04:04 عصر)kamran7013 نوشته:
(1395/10/16، 09:21 عصر)danials008 نوشته: سلام دوستان خیلی وقت بود دنبال اموزش کلیک و اشاره در یونیتی بودم و بلاخره تونستم خودم پیاده سازیش کنم و گفتم به شما هم اموزش بدیم و حالشو ببرید .

کد:
private bool mouseClicksStarted = false;
    private int mouseClicks = 0;
    public float mouseTimerLimit = .25f;
    public GameObject playerBlue;
    public Vector3 newposition ;
    public float speed = 0 ;
    public Vector3 playerposition ;

    void Update() {

        
        playerposition = new Vector3 (playerBlue.transform.position.x,playerBlue.transform.position.y,playerBlue.transform.position.z);
        
        
        if(playerposition.x > newposition.x){
            Debug.Log("player bishtare");
            transform.localScale = new Vector3 (1,1,1);
        }
        if(playerposition.x < newposition.x){
            Debug.Log("player kamtare " ) ;
            transform.localScale = new Vector3 (-1,1,1);
        }
        if(playerposition == newposition){
            Debug.Log("mosavi ast");
            GetComponent<Animator>().SetInteger("action-player",0);
        }
        

        if(Input.GetMouseButtonDown(0)){ OnClick ();    
            Ray ray = (Camera.main.ScreenPointToRay(Input.mousePosition));
            RaycastHit hit ;
            speed = 0 ;
            if(Physics.Raycast(ray,out hit ))
            {
                print(hit.transform.name);
                if(hit.transform.name == "backgame" )
                {
                    newposition = new Vector3 (hit.point.x , playerBlue.transform.position.y , playerBlue.transform.position.z);
                    
                }
            }
        }
        playerBlue.transform.position = Vector3.MoveTowards(this.transform.position , newposition , speed * Time.deltaTime ) ;
    }
    
    public void OnClick(){
        mouseClicks++;
        if(mouseClicksStarted){
            return;
        }
        mouseClicksStarted = true;
        Invoke("checkMouseDoubleClick",mouseTimerLimit);
    }
    
    
    private void checkMouseDoubleClick()
    {
        if(mouseClicks > 1){
            GetComponent<Animator>().SetInteger("action-player",1);
            speed = 20 ;
        }else{
            GetComponent<Animator>().SetInteger("action-player",2);
            speed = 5 ;
        }
        mouseClicksStarted = false;
        mouseClicks = 0;
        
    }
}

خب اول از همه بگم من زیاد توضیح دادنم خوب نیست (البته کد ها هم خیلی واضح هستن )
خب اول میریم سراغ متغییر ها :
1- متغییری از نوع اعداد صحیح برای شمارش دفعات تاچ شدن .
2- متغییری از نوع اعداد اعشاری = زمان دابل تاچ رو مشخص میکنه (مقدار منطقه زمانی شرط دابل تاچ)
3-متغیری از نوع اجسام بازی که بازیکن (کاراکتر ) رو درون اون میریزیم .
4-متغییری از نوع بردارها (سه جهت) برای ذخیره مکان تاچ شده .
5- متغییری از نوع اعداد اعشاری برای سرعت حرکت بازیکن .
6- متغییری از نوه بردارها (سه جهت) برای ذخیره موقعیت بازیکن .


خب میریم سراغ کد ها (توی این کد ما فقط با تابع update سروکار داریم و چندتا تابع شخصی )

در خط اول کد ها ما اومدیم متغییر playerposition رو برابر با مختصات playerblue که کاراکتر ما هست قرار میدیم ( کاربرد اون هم برای تغییر انیمیشن ها و چک کردن رسیدن به موقعیت تاچ شده است ) .

چند خط بعدی کد که بسیار واضح هستش میاد موقعیت مکانی بازیکن رو که داخل یک متغییر از نوع برداری ریخته بودیم رو با موقعیت مکانی جایی که تاچ کردیم میکنه و  دستورات لازم مثل عوض کردن سمت کاراکتر و غیره ذالک .

خب حالا رسیدیم به قسمت اصلی کد یعنی ری زدن یا همون فرستادن اشعه . (توضیح کلی = دوستان ری زدن یا همون اشعه میاد از نقطه ای که ما مشخص کردیم خط یا همون اشه ای رو میفرسته که خیلی کاربرد داره (زیاد جزئی توضیح نمیدم بهتره این مباحثو بصورت ویدیویی مشاهده کنید ) خب ما اومدیم با استفاده از کلیک چپ موس یک شرط رو گزاشتیم که اگه کلیک چپ موس فشرده شد => ابتدا تابع OnClick رو فراخوانی میکنه و بعدش در خط اول میاد یک متغییر از نوع اشعه که ما اسمشو همون ری گزاشتیم رو از دوربین به جایی که ما کلیک کردیم میفرسته .  در خطوط بعدی ما میاییم و برخورد اشعه  رو چک میکنیم . و میگیم اگه با یک جسمی برخورد کرد بیاد اسم اون جسم رو برای ما پرینت کنه .

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

خب میریم ادامه ی کار در خط بعدی ما میایم میگیم که اگر نقطعه برخورد جسمی که پیدا کرده اسمش برابر با اسم مورد نظر ما باشه بیاد و متغییر newposition رو که برای گرفتن مکان کلیک شده بود رو برابر ایکس نقطه لمس شده و وای و زد مختصات خود پلیر کن .
نکته2 (من چون میخواستم پلیر فقط در محور ایکس حرکت کنه فقط مختصات ایکس نقطه تاچ شده رو بهش دادم شما میتونید برای بازی های 3 بعدی سه نقطه رو بدید یا دوتا . دیگه کدشو یاد گرفتید طبق سلیفه پیش برید )

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

خب ی توضیح کلی میدم راجب چندتا کد بعدی که ماله دابل تاچ و سینگل تاچه . ببین دوستان ما ی زمانی داریم تو اون زمان اگه ما هر بار تاچ کنیم میاد یک عدد به متغییر mouseclick اضافه میکنه و بعدش با استفاده از خاصیت invoke بعد از گزشتن زمان mousetimerlimit تابع چک موس دابل کلیک فراخوانی میشه . خب حالا اصل کار

حالا میایم چک میکنیم و میگیم اگه متغیر موس کلیک (تو اون زمان که گفتیم ) بیشتر یک بود . بگه که دابل کلیک شده . (من واسه دابل کلیک سرعت کاراکترو 20 گزاشتم (متغییر speed)  و با استفاده از کامپوننت انیماتور اومدم انیمیشن دویدن رو گزاشتم .

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


چندتا چیز کلی => خب اول از همه بگم که کلیک موس در اندروید همون حکم تاچ رو داره
اگه توجه کنید در شرط کلیک شدن من اومدم یدور سرعت رو صفر کردم . این هیچ تاثیری نداره میتونید برش دارید ولی بهتره بزارید بعضی وقتا ی باگ هایی پیش میاد .
این مقادیر و غیره همشون شخصی من هستن بیشتریاشونو میتونید تغییر بدید ولی اینا بهترین گزینه هاش هستن دیگه حالا بازم بستگی به کار خودتون داره
-------------------------------------------------------------------------------------------------------------------------------------------------

لینک فایل پروژه :
click and point (unity)
*


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

سپاس فراموش نشه 4  شب خوش موفق باشید .

اول اینکه لینک خرابه دانلود نمیشه 
دوم اینکه کد اشکال داره انیمیشن ها هیچکدوم اجرا نمیشن

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

(1395/12/21، 04:45 عصر)hunk نوشته: سلام
کارت عالی بود
هیچی یونیتی نمیشه

خواهش میشود.
[عکس: MM.png]
 
پاسخ دهید
 سپاس شده توسط:
#9
پس تو کد چرا انیمیشن هست
 
پاسخ دهید
 سپاس شده توسط:
#10
(1395/12/22، 07:08 عصر)kamran7013 نوشته: پس تو کد چرا انیمیشن هست

کد:
       if(mouseClicks > 1){
           GetComponent<Animator>().SetInteger("action-player",1);
           speed = 20 ;
       }else{
           GetComponent<Animator>().SetInteger("action-player",2);
           speed = 5 ;
       }
باید توی پنجره Animator بین انمیشن ها transition بسازی و یک متغیر از نوع bool در پنجره Animator قسمت parameters بسازی و به transition ها شرط بدی مثلا بگی اگر متغیر action-player ترو بود
 
پاسخ دهید
 سپاس شده توسط:
  


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  طرح نذری آموزشی در فرادرس mohammadamin12000014 0 56 1397/6/27، 01:36 صبح
آخرین ارسال: mohammadamin12000014
  مهم آموزش واقعیت افزوده برای همه با یونیتی(بدون نیاز به برنامه نویسی!) developer 6 3,116 1397/4/16، 11:20 صبح
آخرین ارسال: mjavad
  تغییر زاویه پلیر به سمت دشمن erfab 3 513 1396/12/5، 11:06 عصر
آخرین ارسال: aa82
  یک مثال ساده از Blend Tree ها در یونیتی rezadehghan 0 211 1396/11/24، 02:01 عصر
آخرین ارسال: rezadehghan
  امضا کردن کد در یونیتی rezadehghan 0 240 1396/11/24، 01:59 عصر
آخرین ارسال: rezadehghan

پرش به انجمن: