كيفية تغيير ألوان وحدة كائن ثلاثي الأبعاد


الاجابه 1:

هذا سهل إلى حد ما. أولاً ، اسمح لي بتقديمك إلى OnMouseEnter و OnMouseUp و OnMouseExit.

OnMouseEnter هي طريقة باطلة تستدعيها الوحدة عندما تضع الماوس فوق كائن معين. لذلك ، لنفترض أن لديك Cube ، وأن لديك برنامجًا نصيًا عليه ، باستخدام OnMouseEnter. عندما تحوم بالماوس فوق هذا الكائن ، ستستدعي الوحدة OnMouseEnter.

OnMouseExit هو عكس ذلك. يتم استدعاؤه عندما يخرج الماوس من الكائن. مرة أخرى ، عد إلى المكعب ، إذا أخرجت الماوس منه ، فسيتم استدعاء طريقة OnMouseExit.

ثم لديك OnMouseUp. يتم استدعاء OnMouseUp عندما يكون الماوس أعلى كائن GameObject مع البرنامج النصي ، تقوم بالنقر فوقه وتحريره.

OnMouseDown هو نفسه OnMouseUp ، ولكن يتم استدعاؤه عند النقر ، وليس عند تحرير النقرة.

OnMouseUpAsButton هو نفسه OnMouseUp ، ولكن لن يتم استدعاؤه إذا ضغطت باستمرار فوق الكائن ، وحرك الماوس بعيدًا عن الكائن وحرر النقرة.

لذلك ، مع هذا ، دعونا نغير لون المادة.

بادئ ذي بدء ، تحتاج إلى مرجع إلى MeshRenderer الخاص بكائنك. لذلك يمكننا التصريح عن متغير:

باستخدام UnityEngine ؛ExampleCube فئة عامة: MonoBehaviour{العارض الخاص _ العارض ؛ // كل العارضين يرثون من العارض.}

وخزنها على استيقظ.

باستخدام UnityEngine ؛ExampleCube فئة عامة: MonoBehaviour{العارض الخاص _ العارض ؛ // كل العارضين يرثون من العارض. استيقظ الفراغ الخاص () {_renderer = GetComponent () ؛ }}

الآن بعد أن أصبح لدينا وصول إلى MeshRenderer لهذا الكائن ، فلنقم بإنشاء بعض المتغيرات الأخرى:

باستخدام UnityEngine ؛ExampleCube فئة عامة: MonoBehaviour{ // أنا أستخدم متغيرات SerializeField والمتغيرات الخاصة هنا // لأنه يتفق مع التغليف و // اتفاقيات الأمان C #. [SerializeField] الخاص Color32 _normalColor = new Color32 (100، 100، 100)؛ [SerializeField] private Color32 _highlightColor = new Color32 (100 ، 200 ، 200) ؛ [SerializeField] الخاص Color32 _activeColor = new Color32 (255، 255، 255)؛العارض الخاص _ العارض ؛ // كل العارضين يرثون من العارض. استيقظ الفراغ الخاص () {_renderer = GetComponent () ؛ }}

لماذا هذا؟ حسنًا ، لنفترض أنك تريد أن تقرر بصريًا الألوان التي تريدها؟ حسنًا ، يمكنك فعل ذلك في المفتش بهذه المتغيرات!

الآن ، لنفعل بعض السحر ونغير اللون. للقيام بذلك ، يجب عليك الوصول إلى خاصية لون المواد عبر الكود. لحسن الحظ ، هذا سهل ، ما عليك سوى أن تكتب:

_renderer.material.color = // بعض الألوان الرائعة.

الآن دعنا نجمع ذلك مع OnMouseEnter و OnMouseExit و OnMouseUpAsButton و OnMouseDown:

ExampleCube فئة عامة: MonoBehaviour{ // أنا أستخدم متغيرات SerializeField والمتغيرات الخاصة هنا // لأنه يتفق مع التغليف و // اتفاقيات الأمان C #. [SerializeField] الخاص Color32 _normalColor = new Color32 (100، 100، 100)؛ [SerializeField] private Color32 _highlightColor = new Color32 (100 ، 200 ، 200) ؛ [SerializeField] الخاص Color32 _activeColor = new Color32 (255، 255، 255)؛العارض الخاص _ العارض ؛ // كل العارضين يرثون من العارض. استيقظ الفراغ الخاص () {_renderer = GetComponent () ؛ _renderer.material.color = _normalColor ؛ } الفراغ الخاص OnMouseEnter () { _renderer.material.color = _highlightColor ؛ } الفراغ الخاص OnMouseDown () { _renderer.material.color = _activeColor ؛ } الفراغ الخاص OnMouseExit () { _renderer.material.color = _normalColor ؛ } الفراغ الخاص OnMouseUpAsButton () { _renderer.material.color = _highlightColor ؛ }}

وهذا كل شيء! الآن ، يتغير لون الكائن الخاص بك كما يفعل الزر! في صحتك!

بعض روابط المستندات:

MonoBehaviour.OnMouseDown ()MonoBehaviour.OnMouseUp ()السلوك الأحادي. OnMouseUpAsButton ()MonoBehaviour.OnMouseEnter ()MonoBehaviour.OnMouseDown ()

الاجابه 2:

بسيط!

فقط قم بإنشاء برنامج نصي لكائن اللعبة واكتب هذا:

Color GameobjectColor = لون جديد (R ، G ، B ، a) ؛

كائن Gameobject العام ؛

تحديث باطل ()

{

إذا {if (Input.GetMouseDown (0)) {

obj.color = GameobjectColor ؛

}

}