کد چرخش کاراکتر(نگاه کردن دوربین به جهت ماوس) با ماوس در یونیتی برای حالت سه بعدی چرخش دوربین به چپ و راست
نکته : برای حالت سه بعدی هست مطلب زیر:
کد js(جاوااسکریپت)
var Xrotatespeed:float=10; var Yrotatespeed:float=10; function Start () { } function Update () { transform.Rotate(new Vector3 (0,Input.GetAxis("Mouse X")*Xrotatespeed,0)); //transform.Rotate(new Vector3 (Input.GetAxis("Mouse Y")*Yrotatespeed*-1,0,0)); print(transform.rotation.eulerAngles); }
اینم کد cs(سیشارپ) اگه اشتباه نکرده باشم اینطوری میشه :
float Xrotatespeed=10f; float Yrotatespeed=10f; void Start () { } void Update () { transform.Rotate(new Vector3 (0,Input.GetAxis("Mouse X")*Xrotatespeed,0)); //transform.Rotate(new Vector3 (Input.GetAxis("Mouse Y")*Yrotatespeed*-1,0,0)); Debug.Log(transform.rotation.eulerAngles); }
توضیح:
دلتا تایم رو حذف کردم تا سرعت دست خودم باشه و با x ماس انجام بشه.
ضمنا چرخش بالا و پایین (حول محور X ) رو حذف کردم چون خیلی وقتا لازم نیست و بیشتر کاربر رو گیج می کنه.
توضیحات اضافی برای یادگیری بیشتر و درک سیستم ماوس و مختصات:
ماوس دو تا پارامتر داره x,y
تابع Rotate سه تاپارامتر داره x,y,z که زاویه چرخش رو حول محور دلخواه میدیم به پارامترهاش.
چرخش بالا و پایین (روی محور y ماوس):
اگه بخوایم چرخش به بالا و پایین رو انجام بدیم باید حول محور x بچرخیم یعنی پارامتر اول رو
مقدار میدیم و دومی و سومی رو صفر می کنیم. و ضمنا زاویه ی چرخش بالا و
پایین رو با حرکت بالا و پایین ماوس انجام میدیم و چون ماوس وقتی بالا می
ره y اش تغییر می کنه پس پارامتر اول که قرار بود حول محور x چرخش بشه رو
در Mouse Y ضرب کردیم.
چرخش به چپ و راست(روی محور x ماوس):
اگه بخوایم چرخش به چپ و راست رو انجام بدیم باید حول محور y بچرخیم یعنی پارامتر دوم رو
مقدار میدیم و اولی و آخری رو صفر می کنیم. و ضمنا زاویه ی چرخش چپ و راست
رو با حرکت چپ و راست ماوس انجام میدیم و چون ماوس وقتی چپ وراست می ره x
اش تغییر می کنه پس پارامتر دوم که قرار بود حول محور y چرخش بشه رو در
Mouse X ضرب کردیم.
راستی: rotation دوربین اصلی رو روی 0و0و0 بذار و اسکریپت رو هم بنداز روی دوربین اصلی
راستی برای اینکه خود کاراکتر بچرخه و مثلا روو
کنه به نقطه ی دلخواه باید از تابع lookat استفاده کنید.الگوی استفاده و
نحوه ی استفاده رو خیلی ساده می تونید با بررسی نمونه اسکریپت ها یا یک
جستجوی ساده در اینترنت پیدا کنید.اگه سایت اصلی هم بسته باشه با شیلتر یا
... بازش کنید یا بپرسید.
روش دوم :
استفاه از خصوصیت rotation هست که از نوع Quaternion هست و با استفاده از تابع اویلر باید مقدار بهش بدیم اینطوری:
void Update () { transform.rotation = Quaternion.Euler(new Vector3(0, Input.mousePosition.x, 0)); }
به دقت کنید. پارامتر اول و آخر یعی x و z رو صفر گفتیم چون چرخشی حول محور x(میله ای از چپ به راست که چرخش حول آن یعنی چرخش از جلو و عقب)، و چرخشی حول محور Z (میله ای از عقب به جلو که چرخش حول آن یعنی چرخش از پهلو) نداریم.
فقط پارامتر دوم یعنی چرخش حول محور Y(میله ای از پایین به بالا که چرخش حول آن یعنی چرخش به چپ و راست) را با مقدار حرکت ماوس به چپ و راست تنظیم کردیم تا اگر ماوس به چپ حرکت کند دوربین به چپ و اگر به راست حرکت داده شد دوربین به راست نگاه کند.