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  شب خوش موفق باشید .
 
  پاسخ


 سپاس شده توسط: erfan002pooya ، mostafanastary ، mahdi_R8095 ، developer ، ARMAN_IRBAX ، shazde ، user-11 ، makan parsi ، mhc ، vng ، dyyergame ، hamed2002 ، daiisalman
#2
سلام
ممنون که کد رو به اشتراک گذاشتی، منتهی یه زحمتی بکش، به صورت فایل پروژه ی یونیتی بذاری ، تشکر ها بیشتر هم میشه....
  پاسخ


 سپاس شده توسط: danials008 ، shazde
#3
(1395/10/16، 10:01 عصر)mostafanastary نوشته است: سلام
ممنون که کد رو به اشتراک گذاشتی، منتهی یه زحمتی بکش، به صورت فایل پروژه ی یونیتی بذاری ، تشکر ها بیشتر هم میشه....

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


 سپاس شده توسط: shazde
#4
لینک سورس اضافه شد !
 
  پاسخ


 سپاس شده توسط: 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
(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 نوشته است: سلام
کارت عالی بود
هیچی یونیتی نمیشه

خواهش میشود.
 
  پاسخ


 سپاس شده توسط:
#8
پس تو کد چرا انیمیشن هست
  پاسخ


 سپاس شده توسط:
#9
(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 ترو بود
  پاسخ


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

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


 سپاس شده توسط:


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
  درباره موهو (انیمه استودیو): azin24 3 6,445 1400/2/2، 09:41 عصر
آخرین ارسال: Mikaeil
  دوره آموزشی ساخت بازی ساده برای سطح مبتدی general-sherman 3 3,497 1399/9/27، 04:54 عصر
آخرین ارسال: general-sherman
Star آموزش نامه ی گرافیک طراحی ی خودروی ایرانی Mohamad## 2 2,651 1399/6/11، 11:51 صبح
آخرین ارسال: Mohamad##
  موقعیت شغلی انیماتور 2 بعدی : azin24 2 2,696 1399/2/6، 01:56 عصر
آخرین ارسال: mahdi.paradox
  ریگ بندی لذت بخش و متفاوت با نسخه ی جدید اسکریپت Duik azin24 1 2,413 1399/2/6، 01:51 عصر
آخرین ارسال: M.gh

پرش به انجمن: