این پست اشتباهه میشه حذفش کنید!:31:
Printable View
این پست اشتباهه میشه حذفش کنید!:31:
فکر نکنم یونیتی از متغیر public پیشتبانی کنه
برای اینکار نیاز به شی عمومی دارید که اگه یک شی بزارید که دیگر شی با تگ یا نام Find یا FindWithTag پیداش کنم بعدش با GetComponent به اسکریپتش دست یابی کنن.حالا اگه می خواهی در لود مرحله بعد نابود نشه بایستی از تابع DontDestroyOnLoadاستفاده کنی.
من موافقم! چون همین الان جواب یه سوالمو تو 40 صفحه پیش پیدا کردم و پیدا کردنش واقعا کار سختی بود. اگه تاپیک ها مجزا بشه فک کنم بهتر باشه.نقل قول:
من هنوز نفهمیدم چطوری میتونم یه متغیر global بسازم!!! (چه قد خنگم؟!)
میشه بیشتر توضیح بدین؟
ببینید ، شما نمیتونی یه متغییر تعریف کنی و بعد تو هر اسکریپتی اونو به راحتی فراخوانی کنی ( این مباحث شی گرایی #C هست ، ربط چندان زیادی به یونیتی نداره )
مثلا تو اسکریپت t1 ما 2تا متغییر داریم :
و تو اسکریپت t2 نیاز داریم که به این متغییر ها دسترسی داشته باشیم.کد:public class t1 : MonoBehaviour
{
public static bool Static_Flag;
public bool Normal_Flag;
}
متغییر اول از نوع Static هست، پس با نام کلاس بش دسترسی هست ( مثلا مثل VB شاید ) ولی کلا شما یه متغییر از نوع اول داری.
متغییر دوم فقط Public هست و باید با تابع GetComponent کار کنی ، کدی که من نوشتم ( برای متغییر دوم )، اگر هر دو اسکریپت t1 و t2 به یه آبجکت داده شده باشن کار میکنه .
نکته : خداییش این دفعه بگی نتونستم ، میام دم در خونتون میزنمت :)کد:t1.Static_Flag = true;
t1 _t1 = (t1)gameObject.GetComponent("t1");
_t1.Normal_Flag = true;
سلام
من میخوام موسم بره روی یه مدل یا collider یه کاری انجام بشه . کلیک نه ها همین که رفت روش یا از روش اومد کنار . از چه تابعی استفاده کنم ؟
ویرایش :
مشکل حل شد ارمین بهم گفت و دستشم درد نکنه . از OnMouseEnter باید استفاده میکردم .
من از جاوا اسکریپت استفاده میکنم. اینا تو جاوا اسکریپت جواب میده؟؟!!:31:
من یه game object دارم اسمش هست First Person Controller
چند تا اسکریپت بهش دادم. اون 2 تا اسکریپتی که من مشکل دارم اینان :
اسکریپت fpsplayer :
کد:#pragma strict
var spear = 50;
function Start () {
}
function Update () {
}
اسکریپت spear_thrower :
من متغیر spear رو تو اسکریپت اول تعریف کردم و میخوام تو اسکریپت دوم ازش استفاده کنم.کد:#pragma strict
var projectile : Rigidbody;
var speed = 20;
var spear : fpsplayer;
spear = GetComponent("fpsplayer");
function Start () {
}
function Update () {
if(Input.GetButtonDown("Fire1"))
if (spear > 0) {
{
var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position,transform.rotation);
instantiatedProjectile.velocity =transform.TransformDirection(Vector3(0,0,speed));
Physics.IgnoreCollision(instantiatedProjectile.collider,transform.root.collider);
spear -= 1;
}
}
}
الان کجای این کد غلطه؟
چی کار کنم درست شه؟
ممنون.
سر تا پاش اشتباهه جیگر.
الان این GetComponent بیچاره ، از کدوم آبجکت fpsplayer رو بگیره؟
اگر تمام این اسکریپت ها رو به یه آبجکت دادی، کد شما اینجوری میشه :
اسکریپت : t1
اسکریپت : t2کد:#pragma strict
public var Spear : int = 50;
function Update()
{
print(Spear);
}
کد:#pragma strict
var CopySpear : int;
var CopyT1 : t1;
function Start ()
{
CopyT1 = gameObject.GetComponent("t1") as t1;
CopySpear = CopyT1.Spear;
// OR
CopyT1.Spear = 10;
}
ممنون. بالاخره مشکلم حل شد.:31:
خب یه سوال دگ :
من اگه بخوام یه محتویات متغیر رو نمایش بدم باید چی کار کنم؟ (مثلا تعداد تیر رو)
ممنون.