万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    Vectorに対して直角 C# Unity

    URL: http://forum.unity3d.com/threads/33215-Vector-rotation

    ある障害物に対しては避けたいことをしたかった。
    このサイトを参考にした。

    ターゲットに対して進むコードは。

        Vector3 targetVec = targetTransform.localPosition - myTransform.localPosition;
        myTransform.position += targetVec.normalized * speed;
    

    落とし穴などを避けたいときに、Holeタグのものに対して直角に動かしたい、
    そのHoleを避けるフラグisAvoidHoleをOn/Off切り替えた

        void OnTriggerEnter (Collider other)
        {
            GameObject go = other.gameObject;
            if (go.tag == "Hole") {
                isAvoidHole = true;
                Debug.Log("OnTriggerEnter");
            }
        }
    
        void OnTriggerExit (Collider other)
        {
            GameObject go = other.gameObject;
            if (go.tag == "Hole") {
                isAvoidHole = false;
                Debug.Log("OnTriggerExit");
            }
        }
    

    よって結果こうなった

            Vector3 targetVec = targetTransform.localPosition - myTransform.localPosition;
            targetVec.y = 0;
            if (isAvoidHole)
            {
                Debug.Log("avoid");
                Vector3 vec = targetVec.normalized;
                Quaternion quat = Quaternion.AngleAxis(90, vec);
                myTransform.position += (quat * Vector3.up) * speed;
            }
            else
            {
                Debug.Log("chase");
                myTransform.position += targetVec.normalized * speed;
            }