落書きノート

ふと自分が気になった事を書いてます

Unity 一通りの機能完成 発展させるとオンラインゲーム風になる?

最終的なソースコードは以下のようになった。

using UnityEngine;
using System.Collections;

public class spider : MonoBehaviour
{ 
    public GameObject player;
    private NavMeshAgent agent;
    private Animator anim;
    private Animator animP;
    private AnimatorStateInfo currentBaseState;
    private AnimatorStateInfo currentBaseStateP;
    private static int damageState = Animator.StringToHash ("Base Layer.Damage");
    private static int attackState = Animator.StringToHash ("Base Layer.HiKick");

    // Use this for initialization
    void Start ()
    {
        anim = GetComponent<Animator> ();
        animP = player.GetComponent<Animator> ();
        agent = GetComponent<NavMeshAgent> ();
    }
    
    // Update is called once per frame
    void Update ()
    {
        currentBaseState = anim.GetCurrentAnimatorStateInfo (0);
        currentBaseStateP = animP.GetCurrentAnimatorStateInfo (0);

        if (currentBaseState.fullPathHash == damageState) {
            if (!anim.IsInTransition (0)) {
                anim.SetBool ("damage", false);
            }
        }

        if (!anim.IsInTransition (0)) {
            agent.SetDestination (new Vector3 (400.0f, 0.0f, 320.0f));
            anim.SetFloat ("speed", agent.velocity.sqrMagnitude);
        }
    }

    void OnCollisionEnter (Collision other)
    {
        if (other.gameObject.tag == "hikickAttack") {
            if(currentBaseStateP.fullPathHash == attackState){
                if (!anim.IsInTransition (0)) {
                    anim.SetBool ("damage", true);
                }
            }
        }
    }
}

Unity-Chanのプレハブの子オブジェクトに、体のパーツが色々とあるのだが、その中の足のパーツに、リジッドボディとコライダを追加しておいた。コライダは適当に座標合わせ。

後はリジッドボディとコライダを追加したことによって、他のオブジェクトと干渉していたので、レイヤー機能を使って、干渉を避けた。レイヤーのオンオフは、Physics Managerで出来る。

後はOnCollisionEnterメソッドがうまく働くかどうかである。このソースコードでは、体のパーツにhikickAttackというタグを設定しておいたので、このようなコードになった。

後は発展させれば色々なことが出来そう。また次の機会にいじる。

プレイ動画 https://www.youtube.com/watch?v=Vwml7ij7H6k