درود مهمان گرامی! ثبت نام

ساخت بازی

امتیاز موضوع:
  • 6 رأی - میانگین امتیازات: 4.67
  • 1
  • 2
  • 3
  • 4
  • 5
برنامه نویسی و راهکارهایی در یونیتی
#21
ایجاد شیدر car paint برای نقاشی روی ماشین :
در پنجره project راست کلیک کرده و create->shader و سپس روی شیدر ایجاد شده دابل کلیک کنید تا وارد mono editor یونیتی بشیم.
کد زیر رو جایگزین کنید.
کد php:
Shader "Elementals/Reflection Blur Fresnel"
{
    
Properties
    
{
        
_MainTint ("Main Tint"Color) = (0.5,0.5,0.5,0.5)
        
_MainTex ("Texture"2D) = "white" {}
        
_NormalMap ("Normal Map"2D) = "bump" {}
        
_SpecularMap("Specular Map"2D) = "white" {}
        
_Cube ("Cubemap"CUBE) = "" {}  
        
_ReflectionMap ("Reflection Map"2D) = "white" {}
        
_Blur ("Blur"Float) = 0.5  
        
        _SpecColor 
("Specular Color"Color) = (0.5,0.5,0.5,1)
        
_Shininess ("Shininess"Range (0.011)) = 0.078125 

        _RimColor
("Rim Color"Color) = (1,0,0,1)
        
_RimPower("Rim Power"Float) = 100

        _FresIn
("Fresnel Mid"Range(0.0011.0)) = 0.25
        _FresOut
("Fresnel Zovniwn"Range(0.0011.0)) = 0.25
    

    
    
SubShader
    
{
        
Tags "RenderType" "Opaque" }
        
CGPROGRAM 
        
#pragma surface surf  Sram 
        #pragma glsl
        #pragma target 3.0 
        
        
float _Blur;
        
float _BlurType;
        
float _BlurRange;
        
fixed _ReflPower
        
        
float _Shininess
        
float _SpecPower;
        
        
float4 _FresColor;
        
fixed _FresPowerIn;
        
fixed _FresPowerOut;
        
fixed _FresIn;
        
fixed _FresOut;
                
        
fixed4 _MainTint;
        
float4 _RimColor
        
float _RimPower
        
        
struct Input
        
{
            
float2 uv_MainTex;
            
float2 uv_NormalMap
            
float2 uv_SpecularMap
            
float2 uv_ReflectionMap;
            
float3 worldRefl;
            
float3 viewDir
            
INTERNAL_DATA
        
}; 
        
        
sampler2D _MainTex;
        
sampler2D _NormalMap;
        
sampler2D _SpecularMap;
        
sampler2D _ReflectionMap;
        
samplerCUBE _Cube;  
        
float4 refl;
        
        
inline fixed4 LightingSram(SurfaceOutput sfixed3 lightDirfixed3 viewDirfixed atten)
        {
            
fixed3 halfVector normalize(lightDir viewDir);
        
            
fixed NdotL max(0dot(s.NormallightDir));
            
            
fixed EdotH max(0dot(viewDirhalfVector));
            
fixed NdotH max(0dot(s.NormalhalfVector));
            
fixed NdotE max(0dot(s.NormalviewDir));
            
            
//Rim light  
            
fixed rimLight 0;
            
rimLight pow(rimLight_RimPower) * NdotH;
             
            
float spec pow (NdotHs.Specular*128.0) * s.Gloss;
            
            
fixed4 finalColor;
            
finalColor.rgb = (s.Albedo _LightColor0.rgb NdotL +  _LightColor0.rgb spec _SpecColor rimLight) * (NdotE atten 2);
            return 
finalColor;
        } 
        
        
float4 ReflectionBlurCube(samplerCUBE CubeTexfloat3 refVectorfloat _Blur)
        {
            
_BlurRange _Blur/10;
                
refl += texCUBE (CubeTexrefVector float3(4*_BlurRange,0,0))*0.05;
                
refl += texCUBE (CubeTexrefVector float3(3*_BlurRange,0,0))*0.09;
                
refl += texCUBE (CubeTexrefVector -float3(2*_BlurRange,0,0))*0.12;
                
refl += texCUBE (CubeTexrefVector -float3(1*_BlurRange,0,0))*0.15;
                
refl += texCUBE (CubeTexrefVector ) * 0.16;
                
refl += texCUBE (CubeTexrefVector float3(1*_BlurRange,0,0))*0.15;
                
refl += texCUBE (CubeTexrefVector float3(2*_BlurRange,0,0))*0.12;
                
refl += texCUBE (CubeTexrefVector float3(3*_BlurRange,0,0))*0.09;
                
refl += texCUBE (CubeTexrefVector float3(4*_BlurRange,0,0))*0.05;
    
//                refl += texCUBE (CubeTex, refVector -float3(0,4*_BlurRange,0))*0.05;
//                refl += texCUBE (CubeTex, refVector -float3(0,3*_BlurRange,0))*0.09;
//                refl += texCUBE (CubeTex, refVector -float3(0,2*_BlurRange,0))*0.12;
//                refl += texCUBE (CubeTex, refVector -float3(0,1*_BlurRange,0))*0.15;
//                refl += texCUBE (CubeTex, refVector ) * 0.16;
//                refl += texCUBE (CubeTex, refVector +float3(0,1*_BlurRange,0))*0.15;
//                refl += texCUBE (CubeTex, refVector +float3(0,2*_BlurRange,0))*0.12;
//                refl += texCUBE (CubeTex, refVector +float3(0,3*_BlurRange,0))*0.09;
//                refl += texCUBE (CubeTex, refVector +float3(0,4*_BlurRange,0))*0.05;
//    
//                refl += texCUBE (CubeTex, refVector - float3(0,0,4*_BlurRange))*0.05;
//                refl += texCUBE (CubeTex, refVector - float3(0,0,3*_BlurRange))*0.09;
//                refl += texCUBE (CubeTex, refVector - float3(0,0,2*_BlurRange))*0.12;
//                refl += texCUBE (CubeTex, refVector - float3(0,0,1*_BlurRange))*0.15;
//                refl += texCUBE (CubeTex, refVector ) * 0.16;
//                refl += texCUBE (CubeTex, refVector + float3(0,0,1*_BlurRange))*0.15;
//                refl += texCUBE (CubeTex, refVector + float3(0,0,2*_BlurRange))*0.12;
//                refl += texCUBE (CubeTex, refVector + float3(0,0,3*_BlurRange))*0.09;
//                refl += texCUBE (CubeTex, refVector + float3(0,0,4*_BlurRange))*0.05;
    
//                refl += texCUBElod (CubeTex, float4(refVector - float3(4*_BlurRange,0,0), _Blur))*0.05;
//                refl += texCUBElod (CubeTex, float4(refVector - float3(3*_BlurRange,0,0), _Blur))*0.09;
//                refl += texCUBElod (CubeTex, float4(refVector - float3(2*_BlurRange,0,0), _Blur))*0.12;
//                refl += texCUBElod (CubeTex, float4(refVector - float3(1*_BlurRange,0,0), _Blur))*0.15;
//                refl += texCUBElod (CubeTex, float4(refVector , _Blur)) * 0.16;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(1*_BlurRange,0,0), _Blur))*0.15;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(2*_BlurRange,0,0), _Blur))*0.12;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(3*_BlurRange,0,0), _Blur))*0.09;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(4*_BlurRange,0,0), _Blur))*0.05;
//    
//                refl += texCUBElod (CubeTex, float4(refVector - float3(0,4*_BlurRange,0), _Blur))*0.05;
//                refl += texCUBElod (CubeTex, float4(refVector - float3(0,3*_BlurRange,0), _Blur))*0.09;
//                refl += texCUBElod (CubeTex, float4(refVector - float3(0,2*_BlurRange,0), _Blur))*0.12;
//                refl += texCUBElod (CubeTex, float4(refVector - float3(0,1*_BlurRange,0), _Blur))*0.15;
//                refl += texCUBElod (CubeTex, float4(refVector , _Blur)) * 0.16;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(0,1*_BlurRange,0), _Blur))*0.15;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(0,2*_BlurRange,0), _Blur))*0.12;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(0,3*_BlurRange,0), _Blur))*0.09;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(0,4*_BlurRange,0), _Blur))*0.05;
//    
//                refl += texCUBElod (CubeTex, float4(refVector - float3(0,0,4*_BlurRange), _Blur))*0.05;
//                refl += texCUBElod (CubeTex, float4(refVector - float3(0,0,3*_BlurRange), _Blur))*0.09;
//                refl += texCUBElod (CubeTex, float4(refVector - float3(0,0,2*_BlurRange), _Blur))*0.12;
//                refl += texCUBElod (CubeTex, float4(refVector - float3(0,0,1*_BlurRange), _Blur))*0.15;
//                refl += texCUBElod (CubeTex, float4(refVector , _Blur)) * 0.16;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(0,0,1*_BlurRange), _Blur))*0.15;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(0,0,2*_BlurRange), _Blur))*0.12;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(0,0,3*_BlurRange), _Blur))*0.09;
//                refl += texCUBElod (CubeTex, float4(refVector + float3(0,0,4*_BlurRange), _Blur))*0.05;
             
                //return refl/3 ;//* _ReflPower;
                //refl = texCUBE (CubeTex, refVector);
                
return refl ;//* _ReflPower;
        
}
        
        
void surf (Input INinout SurfaceOutput o)
        { 
            
half4 c tex2D (_MainTexIN.uv_MainTex);
            
o.Albedo c.rgb _MainTint c.c.rgb *(1c.a);
            
half4 g tex2D (_SpecularMapIN.uv_SpecularMap);
            
o.Gloss g.r;
            
o.Specular _Shininess
            
o.Normal UnpackNormal (tex2D (_NormalMapIN.uv_NormalMap)); 
            
            
_ReflPower tex2D (_ReflectionMapIN.uv_ReflectionMap).r;
                                    
             
half rim saturate(dot(normalize(IN.viewDir), o.Normal));
             
half fr1 saturate(dot(normalize(IN.viewDir), o.Normal));
             
half fr2 saturate(dot(normalize(IN.viewDir), o.Normal));

            
float4 bluredReflection ReflectionBlurCube(_Cube,WorldReflectionVector (INo.Normal),_Blur);
            
o.Emission bluredReflection _ReflPower *_FresOut pow(fr11) + 
                         
bluredReflection _ReflPower *_FresIn pow(fr21) + 
                         
_RimColor.rgb pow(rim_RimPower)*_RimColor.a;
        }
        
ENDCG
    

    
Fallback "Diffuse"

کد رو ذخیره کنید .
به محیط یونیتی برگردید و یه new material ایجاد کنید و سپس شیدر ایجاد شده رو توی کادر پروژه با ماوس بکشید بندازید ری این متریال تا set بشه.
سپس متریال رو بندازی روی ابجکت دلخواه.

بخش properties از کد شیدر رو نگاه کنید:
resim
13 تا پارامتر از ورودی می گیریم. این ورودی ها کجان ؟
پاسخ:
متریال رو انتخاب کنید می بینید 10 پارامتر در inspector ایجاد شده.

می تونید تنظیم کنید و تکستچرهای bumped و ... رنگ و غیره رو تنظیم کنید:
resim
یک تکستچر متال(فلز) بندازید روی main texture و یک تکستچر نرمال مپ بندازید روی پارامتر nornaml map .
نکته: ساخت تکستچر نرمال مپ فقط با چند کلیک در نرم افزار crazy bumped صورت می گیره.
حالا تسکتچرهای دیگه هم ندادید زیاد مهم نیست ولی نرمال مپ واسه ایجاد بجستگی ها و طبیعی جلوه کردن بکار می ره.سوال بود بپرسید.
پارامتر tint واسه رنگ tint یا رنگ سیری (یه رنگ ایجاد انعکاس) روی ماشین بکار میره.
نمونه خروجی:
resim
تا چند ثانیه دیگه یه کلیپ هم میذارم تا ببینید قدرت روwink

اینم کلیپ(کیفیت رو خیلی اوردم پایین تا بشه 2 مگ، ویلا 12 مگ بود ):
http://s5.picofile.com/file/8154744884/s..._.zip.html
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
 سپاس شده توسط محمدمهدی علیجانی ، moien1 ، aliheadari ، qwerty13
#22
Gyroscope Controller (چرخش موبایل و افقی و عمودی شدن بازی) برای unity3d
resim
منبع:
http://blog.heyworks.com/how-to-write-gy...h-unity3d/
مترجم:sajjad3011
--
برای اینکار باید دوربین اصلی رو با استفاده از کد به طور مناسب و بدون هیچ لرزش قابل توجهی چرخش بدیمsmiley
این اسکریپت، محور بالای جهان مجازی را به موازات محور بالای جهان واقعی نگه داشته و از نو ، چرخش افقی را درجه بندی می کند.
مسئله ای که ما حل می کنیم دارای انواع سیستم های مختصات مرجع مختلف در دستگاه iOS در unity3d است: چپ دست و راست دست.

برای تبدیل quaternion( سیستم 4 تایی) از یک سیستم به سیستم دیگر، از تابع زیر استفاده می کنیم:
کد php:
private static Quaternion ConvertRotation(Quaternion q)
{
    return new 
Quaternion(q.xq.y, -q.z, -q.w);


سپس از کد زیر برای حاسبه ی چرخش دوربین استفاده می کنیم:
کد php:
transform.rotation ConvertRotation(Input.gyro.attitude); 
مشکل بعدی با مقداردهی برای ساپورت روی گوشی های مختلف هست. این مشکل توسط سازندگان خود یونیتی در ورژن Unity 4 به بالا حل شد . با تابع زیر این کار صورت می گیرد:
کد php:
private Quaternion GetRotFix()
{
    if (
Screen.orientation == ScreenOrientation.Portrait)
        return 
Quaternion.identity;
    if (
Screen.orientation == ScreenOrientation.LandscapeLeft
    
|| Screen.orientation == ScreenOrientation.Landscape)
        return 
Quaternion.Euler(00, -90);
    if (
Screen.orientation == ScreenOrientation.LandscapeRight)
        return 
Quaternion.Euler(0090);
    if (
Screen.orientation == ScreenOrientation.PortraitUpsideDown)
        return 
Quaternion.Euler(00180);
    return 
Quaternion.identity;

و در زیر، تابع آپدیت شده برای محاسبه ی چرخش دوربین را می بینیم:
کد php:
transform.rotation ConvertRotation(Input.gyro.attitude) * GetRotFix(); 
اسکریپت کنترلر، باید دوربین رو مناسب با چرخش موبایل ، آپدیت و در سطح افقی reset کنه. یعنی برای مثال اگه کاربر گوشی رو به سمت شمال نگه داره گوشی باید به طور خودکار جهت شمال مجازی رو تنظیم کنه و دوربین جهت و direction داده شده رو نشون بده.
در زیر اسکریپیتی مبتنی بر چرخش دستگاه و تنظیم دوربین اکانت (account) رو میبینید:
کد php:
transform.rotation cameraBase * ( ConvertRotation(referenceRotation Input.gyro.attitude) * GetRotFix(); 
محاسبات cameraBase و referanceRotation یک حقه است. اینجا دو مشکل اصلی داریم:
* شما باید برای محاسبه ی referenceRotation، به جهت دستگاه موبایل خودتون دسترسی داشته باشید.
* شما باید برای محاسبه ی cameraBase ،فقط به چرخش حول محور بالا(Up) دسترسی داشته باشید.


توابع دقیقی برای مثال پیوست شده وجود دارد.
و آخرین چیز moothing camera rotation (چرخش نرم دوربین) هست که با استفاده از دستور Slerp این کار رو انجام می دیم
کد php:
transform.rotation Quaternion.Slerp(transform.rotationcameraBase * ( ConvertRotation(referanceRotation Input.gyro.attitude) * GetRotFix()), lowPassFilterFactor); 

نکته ی مترجم(sajjad3011): تابع lerp رو توی درسای قبلی همین تاپیک یاد دادم که چه قدرتی داره و چقدر کار باهاش قشنگه. برای درک slerp فقط کافیه همون Lerp رو که یادتون دادم بخونیدsmiley

حالا اجازه بدید دو تابع AttachGyro و DetachGyro رو هم اضافه کنیم.
اولی، کنترلر رو enable(فعال) و تمام چرخش های اصلی رو re calculate (از نو محاسبه) می کنه.
دومی،کنترلر رو از کار میندازه(disable می کنه)teeth

سرانجام کنترلر ما آماده میشهteeth . لطفا مثال پیوست را دانلود کنید. سازندش می گه من از پیام ها و قدردانی ها و سوالات شما تشکر می کنم. امیدوارم این پست برای شما مفید بوده باشه teeth

دانلود مثال:
http://blog.heyworks.com/wp-content/uplo...typackage/
پسوندش بعد از دانلود ممکنه حذف بشه. خودتون پسوند رو به unitypackage تغییر بدید.
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
 سپاس شده توسط محمدمهدی علیجانی ، moien1 ، shervin_akh ، aliheadari ، UtmostGG ، qwerty13
#23
پرتاب گیم آبجکت به اطراف،بعد از کلیک روی آن :
برای پرتاب اشیاء بایدجهت حرکت رو تعیین کنیم و سپس 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
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



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

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



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



پاسخ
 سپاس شده توسط محمدمهدی علیجانی ، qwerty13
#26
نوع داده ی شمارشی (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
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
 سپاس شده توسط aminj73 ، محمدمهدی علیجانی ، qwerty13
#27
برای تغییر سلاح یا تعویض سلاح یا تعویض قطعات یا بدنه ی ماشین یا سوئیچ یا تغییر لباس یا فعال و غیرفعال کردن آبجکت های دلخواه در صحنه چه کنیم؟
برای اینکار از تابع 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
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



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



پاسخ
 سپاس شده توسط محمدمهدی علیجانی ، aliheadari
#29
اجرای یک فیلم در ابتدای بازی و از بین رفتن بعد از چند (در اینجا 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
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
 سپاس شده توسط محمدمهدی علیجانی ، hossien021 ، aliheadari ، qwerty13
#30
نکته ی مهم تابع 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
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
 سپاس شده توسط محمدمهدی علیجانی ، aliheadari ، qwerty13


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش شیدر نویسی در یونیتی قسمت 1 ErfanAhmadi 15 4,705 15/3/1396، 05:53 عصر
آخرین ارسال: mamali me
  آموزش یونیتی از مبتدی تا متوسط برنامه ریزی شده amirhosein.raad 24 2,896 26/2/1396، 08:24 عصر
آخرین ارسال: TakOn1
  پرداخت درون برنامه ای بازار sajjad3011 0 359 4/10/1394، 10:41 عصر
آخرین ارسال: sajjad3011
Big Grin دانلود کتاب فارسی آموزش کامل زبان برنامه نویسی پایتون Teshne 3 1,178 19/2/1394، 06:25 عصر
آخرین ارسال: sajjad3011
Question اسکریپت نویسی در یونیتی به زبان C# soroosh 4 4,698 20/10/1393، 01:38 عصر
آخرین ارسال: Ali-reza8448



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