«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
توابع StateMachineBehaviour در یونیتی :: گیم اور _ بازیسازی با unity + مطالب متفرقه

گیم اور _ بازیسازی با unity + مطالب متفرقه

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

به نام خدا
--
گروه قدیم ما promakers.ir یا پرومیکرز بود که بالای هزار اموزش توش ساخته بودم به اسم sajjad3011 ولی حیف ادمین سایتش عوض کرد
حالا سوالی بود کاری بود این شمارمه

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

---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته
دوست داشتید شماره بذارید تو واتساپ یا ایتا یا .... گروه بزنیم.
09358077198

بایگانی
پیوندها

توابع StateMachineBehaviour در یونیتی

شنبه, ۲۲ اسفند ۱۳۹۴، ۰۴:۲۵ ق.ظ
gameover.blog.ir
یکم رو ترجمه کردم باقی تا بعد اگه نظر بذارید یادم بیارید

http://s7.picofile.com/file/8242931792/smb_tute_01.jpg
http://s6.picofile.com/file/8242931800/smb_tute_02.jpg

state machine behaviour ها توسط C# سیشارپ ایجاد شدند.

همه ی state machine behaviour ها از کلاس پایه ی یکسانی ارث می برند:StateMachineBehaviour

از آنجا که آنها از ارث بری(inheritance) پشتیبانی می کنند،اگر تابعی وجود داشته باشد می توانید آن را به کلاسهای چندگانه بیافزایید.

سپس به آسانی می توان به آن دست یافت.

برای اطلاعات بیشتر در مورد inheritance (ارث بری) اطلاعات پیوست شده در زیر را بخوانید.

StateMachineBehaviour functions



override public void OnStateEnter (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
}




  • The Animator parameter is a reference to the specific animator that this state machine behaviour is on.

  • For example, this could be used to set the values of animator parameters that were only necessary in this state, such as those for a blend tree.


  • The AnimatorStateInfo is the current info for the state that the state machine behaviour is on. It is the equivalent of writing animator.GetCurrentStateInfo(layerIndex); This can be useful in operations that involve the normalised time of the clip.

  • The layerIndex is the layer the state machine behaviour’s state is on. For example, zero for the base layer, one for the first, and so on.

As with MonoBehaviours, the functions of a StateMachineBehaviour are called under specific circumstances.

  • OnStateEnter is called on the first frame of the state being played.

  • OnStateUpdate is called after MonoBehaviour Updates on every frame whilst the animator is playing the state this behaviour belongs to.

  • OnStateExit is called on the last frame of a transition to another state.در آخرین فریم یک انتقال به وضعیت دیگر فراخوانی می شود

  • OnStateMove is called before OnAnimatorMove would be called in MonoBehaviours for every frame the state is playing. When OnStateMove is called, it will stop OnAnimatorMove from being called in MonoBehaviours.

  • OnStateIK is called after OnAnimatorIK on MonoBehaviours for every frame the while the state is being played. It is important to note that OnStateIK will only be called if the state is on a layer that has an IK pass. By default, layers do not have an IK pass and so this function will not be called. For more information on IK see the information linked below.

  • OnStateMachineEnter is called on the first frame that the animator plays the contents of a Sub-State Machine.

  • OnStateMachineExit is called on the last frame of a transition from a Sub-State Machine.

مثال:

using UnityEngine;

public class SpecialAttackParticlesSmb : StateMachineBehaviour
{
    public GameObject particles;            // Prefab of the particle system to play in the state.
    public AvatarIKGoal attackLimb;         // The limb that the particles should follow.


    private Transform particlesTransform;       // Reference to the instantiated prefab's transform.
    private ParticleSystem particleSystem;      // Reference to the instantiated prefab's particle system.


    // This will be called when the animator first transitions to this state.
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // If the particle system already exists then exit the function.
        if(particlesTransform != null)
            return;

        // Otherwise instantiate the particles and set up references to their components.
        GameObject particlesInstance = Instantiate(particles);
        particlesTransform = particlesInstance.transform;
        particleSystem = particlesInstance.GetComponent <ParticleSystem> ();
    }


    // This will be called once the animator has transitioned out of the state.
    override public void OnStateExit (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // When leaving the special move state, stop the particles.
        particleSystem.Stop();
    }


    // This will be called every frame whilst in the state.
    override public void OnStateIK (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // OnStateExit may be called before the last OnStateIK so we need to check the particles haven't been destroyed.
        if (particleSystem == null || particlesTransform == null)
            return;
        
        // Find the position and rotation of the limb the particles should follow.
        Vector3 limbPosition = animator.GetIKPosition(attackLimb);
        Quaternion limbRotation = animator.GetIKRotation (attackLimb);
        
        // Set the particle's position and rotation based on that limb.
        particlesTransform.position = limbPosition;
        particlesTransform.rotation = limbRotation;

        // If the particle system isn't playing, play it.
        if(!particleSystem.isPlaying)
            particleSystem.Play();
    }
}

تابع OnStateEnter :

override public void OnStateEnter (Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
    player = GameObject.Find(“Player”);
}

مثال دریافت behaviour:
using UnityEngine;

public class ExampleMonoBehaviour : MonoBehaviour
{
    private Animator animator;                          // Reference to the Animator component on this gameobject.
    private ExampleStateMachineBehaviour exampleSmb;    // Reference to a single StateMachineBehaviour.


    void Awake ()
    {
        // Find a reference to the Animator component in Awake since it exists in the scene.
        animator = GetComponent <Animator> ();
    }


    void Start ()
    {
        // Find a reference to the ExampleStateMachineBehaviour in Start since it might not exist yet in Awake.
        exampleSmb = animator.GetBehaviour <ExampleStateMachineBehaviour> ();

        // Set the StateMachineBehaviour's reference to an ExampleMonoBehaviour to this.
        exampleSmb.exampleMb = this;
    }
}


مثال بعد:
using UnityEngine;

public class ExampleStateMachineBehaviour : StateMachineBehaviour
{
    public ExampleMonoBehaviour exampleMb;
}

موافقین ۰ مخالفین ۰ ۹۴/۱۲/۲۲
مدیرکل

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی