امتیاز موضوع:
  • 6 رأی - میانگین امتیازات: 4.67
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
کلمات کلیدی
برنامه نویسی و راهکارهایی در یونیتی

برنامه نویسی و راهکارهایی در یونیتی
#31
پرتاب گیم آبجکت به اطراف،بعد از کلیک روی آن :
برای پرتاب اشیاء بایدجهت حرکت رو تعیین کنیم و سپس speed یا سرعت حرکت بدیم.
ضمنا ابجکت شما بهتره که کامپوننت rigidboy نداشته باشه. برای تست می تونید ابتدا گیم ابجکت خودتون رو در hierarchy(پنجره ی اجزای صحنه) انتخاب و سپس در inspector نگاه کنید . اگه rigidbody داشت روش راست کلیک کرده و remove component می کنیم.

اسکریپت js برای پرتاب به جلو:
کد php:
public var throwSpeed float 5;
var 
speed float 0;
 
 function 
Update () {
     
speed Mathf.Lerp(speed0Time.deltaTime);
     
transform.Translate(Vector3.forward speed);
     if (
Input.GetMouseButtonDown(0))
         
speed throwSpeed;
 } 

throw یعنی پرتاب و throwSpeed یعنی سرعت پرتاب.
وقتی کاربر روی ابجکت کلیک کنه حرکت به جلو(Vector3.forward) با سرعت speed انجام میشه.

در تابع Update هم از تابع Lerp استفاده کردم تا سرعتی که بعد از کلیک برابر 5 شده، با گذشت زمان(Time.deltaTime) آروم آروم کم بشه و به صفر(که به جای پارامتر To یا پارامتر دوم تابع Lerp گذاشتیم) برسه.

اگه بخواید گیم ابجکت به بالا یا پایین یا چپ و راست یا عقب پرتاب بشه باید به جای Vector3.forward از Vector3.forward یا Vector3.down,Vector3.back,Vector3.left,Vector3.right استفاده کنید. اگه هم دقیقا بخواید می تونید به مختصات سه بعدی بدید.
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#32
ایجاد باد در یونیتی
مسیر game object->create other ->wind zone رو طی کنید.
در صحنه یک آیکن ساخته میشه که جهتش رو می تونید تغییر بدید(Rotate و ... )
resim
پارچه یا درخت یا چمن توی محوطه ی بادی بذارید تا در حین اجرا متوجه بشید.
بقیشو بدو

جابجایی یا حرکت در صحنه با صفحه کلید و ماوس در یونتیی:
alt+ctrl+drag : جابجایی صحنه
alt+ فلش های چپ و راست : حرکت آرام به چپ و راست و بالا و پایین در صحنه
shift+ فلش های چپ و راست و بالا و پایین : حرکت سریع به چپ و راست و بالا و پایین در صحنه
--
البته کلید های فوق رو با فلش های روی numlock هم می تونید تست کنید.
--
alt+drag LMB یا drag RMB : چرخش صحنه
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#33
افزایش کیفیت یا بهبود گرافیک محیط یا بهبود نورپردازی در یونیتی unity :
برای اینکار افراد حرفه ای shader نوسی خودشون رو انجام بدن.
اما افراد عادی ابتدا تکستچر یا uv map texture رو بندازن روی مدل توی صحنه و سپس گزینه ی shader در inspecter رو روی sprite/default بذارن. رنگ Tint رو هم دست نزنید(روی حالت پیشفرض یعنی رنگ سفید بذارید که شدیدترین نور هست)
مثال :
resim
دقت کنید که در این صفحنه نیاز به هیچ نوری ندارید wink
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#34
نوع داده ی شمارشی (enumerator) در یونیتی:
از این نوع داده برای تعریف متغیرها با مقادیری تعریف شده توسط خودمان استفاده می کنیم.
مثال :
زبان js
کد:
#pragma strict

enum Direction{North, East, South, West};function Start ()
{
    var myDirection : Direction;
    
    myDirection = Direction.North;
}

function ReverseDirection (dir : Direction) : Direction
{
    if(dir == Direction.North)
        dir = Direction.South;
    else if(dir == Direction.South)
        dir = Direction.North;
    else if(dir == Direction.East)
        dir = Direction.West;
    else if(dir == Direction.West)
        dir = Direction.East;
    
    return dir;    
}
مثال :

کد:
enum DoorStates {open,closed};
var doorState :DoorStates;

function Awake()
{
doorState =DoorStates.closed;
}




function OnTriggerEnter (triger : Collider)
{
    
    if ((triger.gameObject.tag == "Player_A")&&(doorState==DoorStates.closed))
    
        {
            doorState=DoorStates.open;
            GameObject.FindWithTag("Door_L").animation.Play("Door_Anim_A_Left_Open");    
            GameObject.FindWithTag("Door_R").animation.Play("Door_Anim_A_Right_Open");
        }
    


}

function OnTriggerExit (triger : Collider)

{
    
    if ((triger.gameObject.tag == "Player_A")&&(doorState==DoorStates.open))
    
        {
            doorState=DoorStates.closed;
            GameObject.FindWithTag("Door_L").animation.Play("Door_Anim_A_Left_Close");    
            GameObject.FindWithTag("Door_R").animation.Play("Door_Anim_A_Right_Close");
        }
    
}
منبع:
http://unity3d.com/learn/tutorials/modul...umerations
p30world.com
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#35
برای تغییر سلاح یا تعویض سلاح یا تعویض قطعات یا بدنه ی ماشین یا سوئیچ یا تغییر لباس یا فعال و غیرفعال کردن آبجکت های دلخواه در صحنه چه کنیم؟
برای اینکار از تابع setActive استفاده می کنیم. مثلا اسکریپت زیر رو ببینید. با فشردن کلید 1 و 2و3 روی numpad و یا 1و2و3 زیر کلید های تابعی(fuctional keys) بین قطعات تنظیم شده در پارامترهای ghete1 و ghete2 و ghete3 سوئیچ می کنیم و در هر لحظه یک آیتم را فعال خواهیم کرد.
کد php:
//setActive.Cs
using UnityEngine;
using System.Collections;
public class 
setActive MonoBehaviour {
    public 
GameObject ghete1;
    public 
GameObject ghete2;
    public 
GameObject ghete3;
    
// Use this for initialization
    //edit:Sajjad3011
    
void Start () {
        
ghete1.gameObject.SetActive(true);
        
ghete2.gameObject.SetActive(false);
        
ghete3.gameObject.SetActive(false);
    }
    
// Update is called once per frame
    
void Update(){
        if(
Input.GetKeyDown("1") || Input.GetKey (KeyCode.Keypad1)){
            
//switch part1
            
killAll();
            
ghete1.gameObject.SetActive(true);
        }
        if(
Input.GetKeyDown("2") || Input.GetKey (KeyCode.Keypad2)){
            
//switch part2
            
killAll();
            
ghete2.gameObject.SetActive(true);
        }
        if(
Input.GetKeyDown("3") || Input.GetKey (KeyCode.Keypad3)){
            
//switch part3
            
killAll();
            
ghete3.gameObject.SetActive(true);
        }
    }
    
void killAll(){
        
ghete1.gameObject.SetActive(false);
        
ghete2.gameObject.SetActive(false);
        
ghete3.gameObject.SetActive(false);
    }

به اسکریپت دقت کنید.زبان آن سیشارپ بوده و با اندکی تغییر می توانید آن را به js تغییر دهید. تابع killAll رو هر بار صدا می زنیم تا تمام آیتم ها رو غیر فعال کنیم و سپس یکی از قطعات رو با نوشتن اسمش و سپس تابع setActive از کلاس gameObject فعال می کنیم.
دقت کنید که سه تا گیم آبجکت به عنوان قطعه ی 1 و 2 و 3 باید توی صحنه بذارید و همچنین یک گیم آبجکت تهی(empty game object) ایجاد کنید و اسکریپت رو بندازید روش. سپس قطعات رو بندازید روی پارامترهاش توی inspector تا توی آرایه تنظیم بشه.wink
نکته ی مهم : دقت کنید که موقعت(position) و زاویه ی چرخش(rotation) و مقیاس(scale) تمام قطعات یکی باشه تا بتونید به راحتی قطعات ماشین رو تنظیم کنید و بزرگ بودن یا قطعات خودرو تو هم نرن. برای تغییر سلاح یا تغییر اسلحه اینکار مهم نیستsmiley

منبع مطالعه شده : http://answers.unity3d.com/questions/606...cript.html
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#36
یه نکته ای رو لازم هست بگم: بعضی جاها من اشتباهی نوشتم کد js و توی اسکریپت از کد سیشارپ استفاده کردم یا بلعکس گفتم کد cs و کد js رو آوردم. شما خودتون توی کد نگاه کنید. اول کدها معمولا اگه var باشه js هست و توی سیشارپ ما var نداریم. توی سیشارپ واسه تعریف متغیر ابتدا نوع میاد مثلا public string ، اما توی js اول var میاد بعدش اسم متغیر و بعدش احتمالا دو نقطه و نوع متغیر و الی آخر.خودتون پس حواستون رو جمع کنید تا بهتر درگیر بشید و بهتر یاد بگیرید. یه نکته ی دیگه بگم که احتیاج به هیچ یک از اونا نیست. توی کدهای سیشارپ یادتون باشه(بیشتر وقتا) اولش using داریم و کتابخونه ها رو نیاز هست لینک کنیم ولی توی js از یونیتی اینکار نیاز نیست.smiley
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#37
اجرای یک فیلم در ابتدای بازی و از بین رفتن بعد از چند (در اینجا 10) ثانیه:
اسکریپت زیر رو میندازیم روی یک plane.
سپس یک فیلم کوتاه mp4 رو به پروژه اضافه می کنیم (به صورت movie texture توسط یونیتی تبدیلات انجام میشه خودکار)
یادتون نره quick Time هم باید نصب باشه) .
سپس فیلم رو می کشیم روی پارامتر a که از نوع MovieTexture تعریف کرده بودیم.
حالا اجرا می کنیم
کد php:
//movieTexture.js
//author:sajjad3011
var MovieTexture;
var 
i:float=0;
 var 
myTimer float 10.0;
function 
Start () {
 
renderer.material.mainTexture a;
a.Play();
}
 
function 
Update () {

if(
myTimer && a.isPlaying){ 
myTimer -= Time.deltaTime
if(
myTimer <= 0){Destroy(transform.gameObject); }
}
}
//update 
روی صحنه ی دلخواه میریم تا نمای خوبی داشته باشیم سپس دوربین رو انتخاب می کنیم و ctrl+shit+F می زنیم تا روی صحنه ی جاری set بشه.
فیلم اجرا میشه و بعد از 10 واحد زمانی نابود میشه.
بعدش می تونید هر عملی دوست داشتید انجام بدید.
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#38
نکته ی مهم تابع Update و FixedUpdate و استفاده در کدنویسی فیزیک یونیتی:

تابع Update در یونیتی در فرکانس 1000 هرتز اجرا میشه در حالی که انجین فیزیک تابع FixedUpdate در فرکانس 50هرتز call می شن.

وقتی برنامه نویسی فیزیک انجام میدید برای اینکه دقیق تر باشید بهتره که از fixedUpdate استفاده کنید و همچنین توسط پارامتر Timestep در مسیر Edit > Project Settings > Time می تونید تنظیمات رو انجام بدید.

این مقدار،زمان انتظار بین آپدیت فیزیک و گام step رو مشخص می کنه و بر حسب ثانیه هست.شما می توانید فرکانس را با تقسیم 1 به مقدار، بر حسب هرتز hertz تنظیم کنید.(مثلا 0.01 ثانیه انتظار به معنی 1 / 0.01 = 100 Hz می باشد)

یعنی ثانیه و هرتز نسبت عکس دارن.

نکته ی مهم آن است که هر چه فرکانس بالاتر باشد CPU ناپایدارتر یا unstable خواهد بود.

معمولا بهتر است Fixed Update frequency رو بین 30 الی 100 هرتز hertz قرار داده شود.

ایجاد چند فریم تاخیر در تابع update یا ...:

برای اینکار از تابع yield استفاده میشه.
مثال :
کد php:
// Wait a frame
yield return null// C#
 
yield; // UnityScript 
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#39
تکنیک beast و نورپردازی lightmap و bake کردن صحنه به منظور پردازش کمتر و کارایی و کیفیت گرافیک بهتر:
این تکنیک بسیار موثر هست و به شدت کارایی داره و پردازش رو کم می کنه و بازی سازان بزرگ دنیا از این تکنیک در خیلی از بازی ها استفاده می کنند و به جزات می شه گفت یکی از قوی ترین تکنیک ها هست.

برای bake کردن ابتدا چند منبع نور نقطه ای (point light) یا ... رو توی صحنه بذارید . رنگ نورها و شدت اون ها رو به اندازه ی مطلوب و موقعیت دلخواه رو تنظیم کنید تا نور مورد نیاز روی گیم ابجکت دلخواهتون ایجاد بشه و صحنه رو از تاریکی در بیاره.

گیم ابجکت شما می تونه یک مدل uv map شده باشه و تکستچر هم روش انداخته باشید مهم نیست.

اونو انتخاب کنید و در کادر خصوصیات(inspector)در همون نواحی بالایی،روی دکمه ی select کلیک کنید تا پنل import settings باز بشه.

در قسمت Meshes به سربرگ Model و گزینه ی Generate Lightmap UVs رو فعال کنید.

دکمه ی apply رو بزنید و کمی منتظر بمونید تا تنظیمات اعمال بشه.

دوباره در hierarchy(پنل اجزای صحنه) مدلتون رو انتخاب کنید و در پنل inspector گزینه ی Static رو فعال کنید.

برای بقیه ی مدل هاتون هم که میخواید نور ثابت یا static داشته باشید کافیه عملیات فوق رو تکرار کنید.

حالا وقت Lightmapping هست.

از پنجره ی Window گزینه ی Lightmapping رو انتخاب کنید تا پنل مربوط باز بشه.

حالا می تونید روی bake scene کلیک کنید تا صحنه bake بشه. باید کمی صبور باشید.

نکته ی مهم: دقت کنید که تمام نورها رو باید در صحنه بذارید و یک بار فرصت bake دارید و نمی تونید یک بار bake کنید و بعد مثلا بعضی نورها رو حذف و اضافه کنید و دوباره bakeکنید. یعنی نه اینکه نمی شه بلکه با هر بار baking همه چیز از نو انجام خواهد شد و اگه نوری حذف شده باشه حتی baking قبلی هم حذف خواهد شد.wink
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#40
ایولللللللللللللللللل
من دارم بازی د بعدی میسازم کمک میکنی ؟؟؟؟سجادwhat
[size=large]
www.studiomjt.com
:-S[/size]
پاسخ




کاربرانِ درحال بازدید از این موضوع: 1 مهمان