حرکت دو بعدی پلتفرم به سمت جایی که کلیک یا تاچ کردیم در یونیتی_کد سیشارپ
شنبه, ۲۳ آبان ۱۳۹۴، ۱۱:۲۰ ب.ظ
منبع:gameover.blog.ir
بعد طبق این mov حرکت به چپ و راست می کنیم خیلی ساده.
تابع Flip() هم بر حسب این mov میاد و localscale رو برای x مثبت منفی می کنه که باعث میشه پلیر به چپ و راست نیگاه کنه.
خط anim.SetInteger ("Movement", Mathf.Abs(move)); می گه برو تو انیماتور ببین اگه متغیر Movement بود اونو با 1 تنظیم کن که اونجا باس شرط بذارید روی خط انتقال انیمیشن ایستاده به انیمیشن راه رفتن، که اگه مثلا پارامتر Movement یک شد سوئیچ انجام بشه.
Mathf.Abs(move) قدر مطلش متغیر move رو می ده.
حالا چرا قدر مطلق گرفتیم،چون فرقی نداره پلیر به راست یا چپ بخواد بره. در هر دو حالت انیمیشن راه رفتن اجرا می کنیم. فقط localscale رو با کد اومدیم منفی کردیم جایی که حرکت به چپ هست.(یعنی move رو فقط موقع ارسال به انیماتور اومدیم با تابع قدر مطلق Abs مثبت ارسال کردیم)
همه چیزم تر و تمیز نوشتم حالیتون بشه.
واسه درک انیماتور هم اینو بخونید:
http://gameover.blog.ir/1394/04/05/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%DA%A9%D8%A7%D9%86%DB%8C%D9%85-%DB%8C%D8%A7-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C-%D9%BE%D9%86%D8%AC%D8%B1%D9%87-%D8%A7%D9%86%DB%8C%D9%85%D8%A7%D8%AA%D9%88%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-animator
منبع اصلی:
http://answers.unity3d.com/questions/895411/2d-character-controller-for-platformer-with-touch.html
using UnityEngine; using System.Collections; //sajjad3011 public class Indiana2 : MonoBehaviour { public Vector3 target; // The point user picks for the character to follow public bool facingRight = false; // Check where the character is facing private int move=0; // Movement direction private float maxSpeed = 5f; // Speed of character movement private Animator anim; // Reference to the animator // Use this for initialization void Start () { anim = GetComponent<Animator> (); } void FixedUpdate() { // Obtaining target point user clicked on screen if (Input.GetMouseButton (0)) { // After user has clicked left mouse button recording mouse position Vector3 mousePos = Input.mousePosition; // Converting mouse position into coordinate system connected to the camera. target = Camera.main.ScreenToWorldPoint (new Vector3 (mousePos.x, mousePos.y, 1f)); // Set movement direction depending on target point if (target.x < transform.position.x) move = -1; else if (target.x> transform.position.x) move = 1; Debug.Log (move); } // Flip the character if nessessary if (move ==1 && ! facingRight) Flip (); if (move == -1 && facingRight) Flip(); // check if arrived to target point if (Mathf.Abs (target.x - transform.position.x) < 0.2f) { move = 0; } anim.SetInteger ("Movement", Mathf.Abs(move)); // apply velocity to actually make character move rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y); } void Flip() { Debug.Log ("In Flip"); facingRight = !facingRight; Vector3 theScale = transform.localScale; theScale.x *= -1; transform.localScale = theScale; } }کد بالا چیز خاصی نداره نقطه ی کلیک رو چک می کنیم اگه x اش بیشتر از پلیر بود move رو مثبت ویلا منفی می کنه.
بعد طبق این mov حرکت به چپ و راست می کنیم خیلی ساده.
تابع Flip() هم بر حسب این mov میاد و localscale رو برای x مثبت منفی می کنه که باعث میشه پلیر به چپ و راست نیگاه کنه.
خط anim.SetInteger ("Movement", Mathf.Abs(move)); می گه برو تو انیماتور ببین اگه متغیر Movement بود اونو با 1 تنظیم کن که اونجا باس شرط بذارید روی خط انتقال انیمیشن ایستاده به انیمیشن راه رفتن، که اگه مثلا پارامتر Movement یک شد سوئیچ انجام بشه.
Mathf.Abs(move) قدر مطلش متغیر move رو می ده.
حالا چرا قدر مطلق گرفتیم،چون فرقی نداره پلیر به راست یا چپ بخواد بره. در هر دو حالت انیمیشن راه رفتن اجرا می کنیم. فقط localscale رو با کد اومدیم منفی کردیم جایی که حرکت به چپ هست.(یعنی move رو فقط موقع ارسال به انیماتور اومدیم با تابع قدر مطلق Abs مثبت ارسال کردیم)
همه چیزم تر و تمیز نوشتم حالیتون بشه.
واسه درک انیماتور هم اینو بخونید:
http://gameover.blog.ir/1394/04/05/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%DA%A9%D8%A7%D9%86%DB%8C%D9%85-%DB%8C%D8%A7-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C-%D9%BE%D9%86%D8%AC%D8%B1%D9%87-%D8%A7%D9%86%DB%8C%D9%85%D8%A7%D8%AA%D9%88%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-animator
منبع اصلی:
http://answers.unity3d.com/questions/895411/2d-character-controller-for-platformer-with-touch.html
۹۴/۰۸/۲۳