amir.nemati63
کاربر VIP
سلام.
من تازه با یونیتی شروع به کار کردم.
یه باکس ساده رو به عنوان درب در نظر بگیرید که با یه انیمیشن کوتاه به زمین فرو میره و با یه انیمیشن دیگه از زمین بیرون میاد.
کد رو با جاوا طوری نوشتم که وقتی فاصله کمتر از 5 واحد باشه و کلید E زده بشه ، درب باز بشه و در صورت فشار مجدد کلید ، درب بسته بشه.
همینطور اگر کاراکتر از محدوده ی 5 واحد دور تر بشه درب بصورت اتوماتیک بسته میشه.
تا اینجاش مشکلی ندارم.
ولی وقتی درب رو به مکان دیگه ای غیر از مختصات (0و0و0) که انیمیشن رو براش ساختم میبرم ، وقتی انیمیشن اجرا میشه ، درب به محل (0و0و0) منتقل و اجرا میشه.
میخواستم بدونم از دوستان کسی هست که بدونه چطور میشه این مشکل رو رفع کرد تا انیمیشن درب در محل خودش اجرا بشه؟
چون فکر میکنم کد لازم میشه ، پیوستش میکنم.
آبجکت Button کلیدی هست کنار درب که کد بهش نسبت داده شده .
آبجکت DoorMesh همون باکس معرف درب هست و Player هم کاراکتر بازی .
پیشاپیش متشکرم.
[JSS]#pragma strict
enum DoorStates{ Close, Open };
private var Player : GameObject;
private var Button : GameObject ;
private var DoorMesh : GameObject ;
private var DoorState : DoorStates;
private var distance : float ;
function Start ()
{
DoorState = DoorStates.Close;
Player = GameObject.FindWithTag("Player");
Button = GameObject.FindWithTag("Button");
DoorMesh = GameObject.FindWithTag("Door");
}
function Update ()
{
Door();
}
function Door()
{
distance = Vector3.Distance(Player.transform.position , Button.transform.position);
Debug.Log(distance);
if( distance < 5 && Input.GetButtonDown("Action") )
{
if (DoorState == DoorStates.Close)
{
DoorOpen();
}
else if (DoorState == DoorStates.Open )
{
DoorClose();
}
}
if (distance > 5 )
{
if (DoorState == DoorStates.Open )
{
DoorClose();
}
}
}
function DoorOpen()
{
DoorMesh.animation.CrossFade("Open");
DoorState = DoorStates.Open;
}
function DoorClose()
{
DoorMesh.animation.CrossFade("Close");
DoorState = DoorStates.Close;
}[/JSS]
من تازه با یونیتی شروع به کار کردم.
یه باکس ساده رو به عنوان درب در نظر بگیرید که با یه انیمیشن کوتاه به زمین فرو میره و با یه انیمیشن دیگه از زمین بیرون میاد.
کد رو با جاوا طوری نوشتم که وقتی فاصله کمتر از 5 واحد باشه و کلید E زده بشه ، درب باز بشه و در صورت فشار مجدد کلید ، درب بسته بشه.
همینطور اگر کاراکتر از محدوده ی 5 واحد دور تر بشه درب بصورت اتوماتیک بسته میشه.
تا اینجاش مشکلی ندارم.
ولی وقتی درب رو به مکان دیگه ای غیر از مختصات (0و0و0) که انیمیشن رو براش ساختم میبرم ، وقتی انیمیشن اجرا میشه ، درب به محل (0و0و0) منتقل و اجرا میشه.
میخواستم بدونم از دوستان کسی هست که بدونه چطور میشه این مشکل رو رفع کرد تا انیمیشن درب در محل خودش اجرا بشه؟
چون فکر میکنم کد لازم میشه ، پیوستش میکنم.
آبجکت Button کلیدی هست کنار درب که کد بهش نسبت داده شده .
آبجکت DoorMesh همون باکس معرف درب هست و Player هم کاراکتر بازی .
پیشاپیش متشکرم.
[JSS]#pragma strict
enum DoorStates{ Close, Open };
private var Player : GameObject;
private var Button : GameObject ;
private var DoorMesh : GameObject ;
private var DoorState : DoorStates;
private var distance : float ;
function Start ()
{
DoorState = DoorStates.Close;
Player = GameObject.FindWithTag("Player");
Button = GameObject.FindWithTag("Button");
DoorMesh = GameObject.FindWithTag("Door");
}
function Update ()
{
Door();
}
function Door()
{
distance = Vector3.Distance(Player.transform.position , Button.transform.position);
Debug.Log(distance);
if( distance < 5 && Input.GetButtonDown("Action") )
{
if (DoorState == DoorStates.Close)
{
DoorOpen();
}
else if (DoorState == DoorStates.Open )
{
DoorClose();
}
}
if (distance > 5 )
{
if (DoorState == DoorStates.Open )
{
DoorClose();
}
}
}
function DoorOpen()
{
DoorMesh.animation.CrossFade("Open");
DoorState = DoorStates.Open;
}
function DoorClose()
{
DoorMesh.animation.CrossFade("Close");
DoorState = DoorStates.Close;
}[/JSS]
آخرین ویرایش: