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

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

برنامه نویسی و راهکارهایی در یونیتی
#81
اینم اسکریپت تمیز تر سوئیچ بین انیمیشن های پنجره ی Animator :
http://promakers.ir/showthread.php?tid=9...#pid125792
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#82
حفظ تعادل player و گیم ابجکت در بازی دو بعدی/جلوگیری از لغزش کاراکتر در بازی های دو بعدی :
برای گیم ابجکت دلخواه که ریجید بادی داره ،در زیرشاخه ی Constraint از Rigidbody محور Z رو محدود کنید.(گزینه ی Z رو تیک بزنید)
resim
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#83
فایل های DLL یا کتابخانه های یونیتی که با using در فضای نام استفاده می شه رو بعد از دانلود کجا بریزیم؟
در مسیر C:\Program Files\Unity\Editor\Data\Managed
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#84
تغییر اسپرایت یک گیم ابجکت دو بعدی با استفاده از کد سیشارپ و بکار گیری کامپوننت Sprite Renderer :
کد php:
public Sprite sprite1// Drag your first sprite here
public Sprite sprite2// Drag your second sprite here

private SpriteRenderer spriteRenderer

void Start ()
{
    
spriteRenderer GetComponent<SpriteRenderer>(); // we are accessing the SpriteRenderer that is attached to the Gameobject
    
if (spriteRenderer.sprite == null// if the sprite on spriteRenderer is null then
        
spriteRenderer.sprite sprite1// set the sprite to sprite1
}

void Update ()
{
    if (
Input.GetKeyDown (KeyCode.Space)) // If the space bar is pushed down
    
{
        
ChangeTheDamnSprite (); // call method to change sprite
    
}
}

void ChangeTheDamnSprite ()
{
    if (
spriteRenderer.sprite == sprite1// if the spriteRenderer sprite = sprite1 then change to sprite2
    
{
        
spriteRenderer.sprite sprite2;
    }
    else
    {
        
spriteRenderer.sprite sprite1// otherwise change it back to sprite1
    
}

جهت استفاده،ابتدا اسکریپت سیشارپی بسازید و کد فوق رو درونش جا بدید.
بعد از انداختن اسکریپت روی یک emtpty game object دو اسپرایت png رو به ترتیب بندازید روی پارامترهای sprite1 و sprite2 در inspector . بازی رو اجرا کنید.
کاربرد کد فوق برای تغییر اسپرایت های single غیر انیمیشن دار هست.
مثلا گاهی player می پره روی حریف،می خوایم اسپرایت دشمن رو عوض کنیم و اسپرایت حالت پرس شده رو روی دشمن نشون بدیم با کد فوق میتوم اینکار رو عوض کنیم. نکته رو خودتون پیدا کنید. فقط می خواستم کار کامپوننت spriteRenderer رو نشون بدم که چطوری از طریق سیشارپ ازش استفاده کنیم.موفق باشید.smiley
منبع :
http://gamedev.stackexchange.com/questio...t-in-unity
یه مدل کد js هم اینه(ولی من توصیه می کنم سیشارپ کار کنید):
کد:
var sprites : SpriteCollection;

function Start()
{
    sprites = new SpriteCollection("Spritesheet"); // Spritesheet = path + name of sprite in Resources folder

    GetComponent("SpriteRenderer").sprite = sprites.GetSprite("Sprite1"); //name of specific sprite in spritesheet
}
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#85
تغییر اسپرایت والد با استفاده از تکنیک دسترسی به والد یک گیم آبجکت/دسترسی به هر گره ای که قبل از شروع بازی به صحنه اضافه کردیم/دسترسی به شی دلخواه در بازی:
هزار و یک روش برای اینکار وجود داره.اما همیشه ساده ترین روش هم وجود داره.
مثال:
ما یک گیم ابجکت داریم به اسم enemy. بعدش برای این enemy یک گیم ابجکت empty می سازیم و می اندازیم توی زیرشاخش به عنوان فرزند.
به این فرزند یک box collider 2d می دیم و اونو مثلا روی دست راست کاراکتر enemy می ذاریم.برای اینکه از طریق کد بگیم اگه player به دست دشمن برخورد کرد دشمن اسپرایتش عوض بشه.

خوب برای اینکار ما کد رو به ابجکت empty ای که ساختیم ربط می دیم چون قرار نیست عمل برخورد با تمام بدن enemy انجام بشه بکله می خوایم فقط با کلایدری که روی دست کاراکتر ساختیم تشخیص داده بشه.

کد php:
using UnityEngine;
using System.Collections;
public class 
EnemyDie MonoBehaviour {
    public 
Sprite Sprite1;
    public 
Sprite Sprite2;
    public 
GameObject enemy;
    
void Start () 
    {

        if (
enemy.gameObject.GetComponent<SpriteRenderer>().sprite == null)
            
enemy.gameObject.GetComponent<SpriteRenderer>().sprite Sprite1;
    }
    
    
void OnTriggerEnter2D(Collider2D other)
    {
        if (
other.tag == "player")
        {
            
Debug.Log("dast doshman");
            
enemy.gameObject.GetComponent<SpriteRenderer>().sprite Sprite2;
        }
    }


در کد فوق enemy اسم والدی هست که گیم ابجکت empty فرزندش شد. نوعش رو public گذاشتیم(public GameObject enemy) برای اینکه از ورودی،گیم ابجکت Enemy والد رو بکشیم روش و داخل کد بهش دسترسی داشته باشیم.

با کد enemy.gameObject ، اشاره می دیم به والدی که دریافت کردیم.سپس باید به کامپوننت SpriteRenderer ازش دسترسی داشته باشیم و اسپرایت والد رو تغییر بدیم. با کد enemy.gameObject.GetComponent<SpriteRenderer>().sprite می تونیم این کار رو انجام بدیم.بقیه رو روی کدهای بالا فکر کنید. سوالی بود توی پرسش و پاسخ بپرسید.ممنون.
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#86
روش صحیح دسترسی به کنترلر انیماتور از طریق کد سیشارپ برای تنظیم مقدار متغیرهای انیماتور/رفع خطای مقداردهی متغیرهای انیماتور در یونیتی

فرض کنید یک انیماتور به player دادید. سپس از طریق کد زیر متغیر run رو با مقدار بولین true تنظیم می کنیم :

کد:
        private Animator animator;
        animator.GetComponent<Animator>.SetBool ("run", true);
اسکریپت رو به player ربط می دیم.
بلافاصله خطای زیر رو دریافت می کنیم :
کد:
Assets/scripts/player.cs(8,26): error CS0119: Expression denotes a `method group', where a `variable', `value' or `type' was expected


برای رفع این مشکل باید اسکریپت رو به صورت زیر تغییر بدید :
کد php:
        private Animator animator;
        
animator this.GetComponent<Animator> ();
        
animator.SetBool ("run"true); 
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#87
خیلی عالی و کاربردی بود ممنونم مشکلم حل شدflowerflowerflowerflowerflowerflowerflowerflowerflowerflowerflowerflowerflowerflower
[size=medium][size=large]شاید نه امروز... نه فردا... و نه روز دیگر... اما سرانجام همه چیز درست خواهد شد[/size][/size]
[size=large]
[size=medium]بازی ها و نمونه کارهای من:[/size][/size]

[size=medium][url=https://cafebazaar.ir/app/ir.bazisazjavan.flappyheart/?l=fa]بازی قلب پرنده[/url][/size]
پاسخ
#88
چرا بعضی اوقات OnTriggerEnter و OnCollisionEnter کار نمی کند؟
پاسخ:
گاهی علت این است که به گیم ابجکت های خود collider های 2D داده ایم اما در اسکریپت خود از توابع 3D در اسکریپ های خود استفاده کرده ایم.

برای حل مشکل از مثال زیر الگو بگیرید :

کد php:
        void OnTriggerEnter2D(Collider2D other) {
        
Debug.Log("OnTriggerEnter 2D");
        } 

        
void OnCollisionEnter2D(Collision2D coll) {
        
Debug.Log("OnCollisionEnter 2D"); 
نکته ی دوم اینه که هر دو گیم ابجکت باید collider 2d داشته باشد.
نکته سوم : بلعکس موارد فوق هم ممکنه رخ بده که خودتون می تونید جابجا کنید توابع 2D رو با توابع 3D.
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#89
تکنیک فارسی نویسی در یونیتی:
با استفاده از یک فارسی ساز می تونید متن فارسی رو به یونیتی انتقال داده و از فونت مجازش توی یونیتی استفاده کنید.
به عنوان مثال فونت F_unwan.ttf (فونت هایی که اولشون F داره) برای فارسی ساز Leo moon کار می کنه که می تونید این فونت رو بکشید توی project و سپس یک ui canvas Text ایجاد کرده و فونت رو بکشید روی پارامتر Font در inspector.
سپس متن تایپ شده در Leomoon رو کپی کنید توی فیلد Text در inspector .
resim
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#90
اجرای صدا بعد از برخورد دو گیم ابجکت در یونیتی:
نکته ی مهم: این اسکریپت برای برنامه نویسی دو بعدی هست.برای سه بعدی خودتون از توابع 3d استفاده کنید که پیشتر آموش دادم.
یک Audio source Component بدید به Player.
یک اسکریپت سیشارپ با نام collisiondetection با کد زیر ایجاد کنید(البته هر نام مجازی باشه فرق نمی کنه فقط باید همنام کلاسی باشه که توی اسکریپت میاد) و بندازید روی player :
کد php:
using UnityEngine;
using System.Collections;
public class 
collisiondetection MonoBehaviour {
public 
AudioSource audio;
    
    
void Start() {
        
//audio = GetComponent<AudioSource>();
    
}
    
        
void OnTriggerEnter2D(Collider2D other) {
        
Debug.Log("OnTriggerEnter 2D");
        } 

        
void OnCollisionEnter2D(Collision2D coll) {
        
Debug.Log("OnCollisionEnter 2D");
        
audio.Play ();
    }

به کد دقت کنید.
پارامتر audio از نوع Audio Source و به صورت public تعریف شده،.یعنی پارامتر audio رو باید در inspector بکشیم بندازیم روش.
یک کامپوننت Audio source رو برای پلیر add component کنید و یک فایل صوتی رو که قبلا به کادر پروژه drag کردیم رو بکشید بندازید روی پارامتر Audio clip رها کنید.
سپس کامپوننت Audio source رو بکشید بندازید روی پارامتر audio از اسکریپت.
به اسپرایت player یک collider 2d بدید . به گیم ابجکت زمین همونطور.
به اسپرایت player ، یک Rigid body 2d بدید و پارامتر Z در قسمت constraint(محدودیت) رو تیک بزنید تا کاراکتر وقتی می افته روی زمین لغزش نکنه.
resim
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ




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