2ab4d677abd531a04e81d2b628f1736ff7fe0e57


응애 병아리들 엄마 닭 쫄쫄 따라다니는 스크립트

튜토리얼 안 보고 지금까지 배운 거 바탕으로 우지차 코딩했음


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class AnimationAndMovementControllerForChild : MonoBehaviour

{

    Animator animator;

    int isWalkingHash;

    int isRunningHash;


    [SerializeField]

    GameObject parent;

    [SerializeField]

    float positionOffsetX = 0f;

    [SerializeField]

    float positionOffsetZ = 0f;


    [SerializeField]

    float rotationFactorPerFrame = 3.0f;

    [SerializeField]

    float movementSpeed = 0.75f;

    [SerializeField]

    float runMultiplier = 2.0f;


    Vector3 positionToGoTo;

    Vector3 positionToLookAt;


    Vector3 getGoTo()

    {

        float x = parent.transform.position.x + ((parent.transform.forward.x * -1) + positionOffsetX);

        float z = parent.transform.position.z + ((parent.transform.forward.z * -1) + positionOffsetZ);

        return new Vector3(x, 0, z);

    }


    float getDistance()

    {

        return Vector3.Distance(getGoTo(), transform.position);

    }


    private void handleRotation()

    {

        if (getDistance() < 1)

        {

            positionToLookAt = parent.transform.position - transform.position;

        }

        else

        {

            positionToLookAt = getGoTo() - transform.position;

        }

                

        Quaternion currentRotation = transform.rotation;

        Quaternion targetRotation = Quaternion.LookRotation(positionToLookAt, Vector3.up);


        transform.rotation = Quaternion.Slerp(currentRotation, targetRotation, rotationFactorPerFrame * Time.deltaTime);

    }


    private void Awake()

    {

        animator = GetComponent<Animator>();

        isWalkingHash = Animator.StringToHash("Walk");

        isRunningHash = Animator.StringToHash("Run");

    }


    void Update()

    {

        handleRotation();


        positionToGoTo = getGoTo();


        Debug.Log(getDistance());


        if(getDistance() == 0)

        {

            animator.SetBool(isWalkingHash, false);

            animator.SetBool(isRunningHash, false);

        }

        else if(getDistance() > 2)

        {

            animator.SetBool(isRunningHash, true);

            transform.position = Vector3.MoveTowards(transform.position, positionToGoTo, movementSpeed * runMultiplier * Time.deltaTime);

        }

        else

        {

            animator.SetBool(isWalkingHash, true);

            animator.SetBool(isRunningHash, false);

            transform.position = Vector3.MoveTowards(transform.position, positionToGoTo, movementSpeed * Time.deltaTime);

        }

    }

}



응애