AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

学校シミュレーター #2

f:id:yasu9780:20170114221144p:plain

教室を三つにして、学生はそれぞれ6人。全校生徒18人。先生は3人。
職員室を追加。


ステート
 登校:まず自席に向かう。その後は自由時間。教師は職員室へ
 授業開始:学生、教師は教室へ
 自由時間;学生は学内自由行動。教師は職員室へ
 下校:全員で学外へ移動



学校シミュレーター #2

学校のAsset等は買ってないですが、ロジックの検証なら大丈夫かな。出来上がってから置き換えればいいし。
食事動作のアニメーションがあれば、昼食時間を作りたい。
それでタイムスケージュールにそって1日が流れるようにして、太陽光なども変化させる。

ユーザーが動かす学生を追加する場合は、
 移動、這い這い移動、ジャンプ、挨拶(FllowMe、ByeByeなど)

ユーザーを動かすときは、ちゃんと壁で覆いたい。あとドアの開閉とか。

YandereSimulatorだと、玄関に靴箱があって、ちゃんと各学生に割り振りがあって、そこで靴を履き替えるという細かさ( ゚Д゚)



会話は相手のstartTalk()がtrueの時に成立。お互いに向き合って5秒程度アイドリングする

 //近くの生徒と交流
            if ( state ==0 && timer2 <= 0 && !isCommunicate )
            {
                int no2 = GetNearest();
                if (no2 != -1 && no2!= lastCommunicateNo)
                {
                    dis = Vector3.Distance(transform.position, Yandere.Main.ch[no2].transform.position);
                    if (dis>0.6f && dis < 1f  )
                    {
                        if( Yandere.Main.ch[no2].GetComponent<Character>().startTalk(no) )
                        {
                            startTalk(no2);
                            return;
                        }
                    }
                }
            }


navMeshはパスを取得して動かす。

UnityEngine.AI.NavMeshAgent agent;
UnityEngine.AI.NavMeshPath path = null;

void Start()
{
    path = new UnityEngine.AI.NavMeshPath();
    isGoal = true;
    GO = false;
}

void newGoal()
{
     UnityEngine.AI.NavMesh.CalculatePath(transform.position, goal.position, UnityEngine.AI.NavMesh.AllAreas, path);
     index = 0;
     isGoal = false;
     GO = false;
}
void Update()
{
    if (isGoal) return;

    float dis = Vector3.Distance(transform.position, goal.position);
    if (dis < 0.4f)
    {
        isGoal=true;
        return;
    }
    dis = Vector3.Distance(transform.position, path.corners[index]);
    if(dis<0.2f) index++;
    if (index >= path.corners.Length) return;

            Quaternion rot = Quaternion.LookRotation(path.corners[index] - transform.position);
            Vector3 rot2 = rot.eulerAngles;
            rot = Quaternion.Euler(0, rot2.y,0);//階段で傾くのでまっすぐにする
            transform.rotation = rot;
            transform.position += transform.forward * Time.deltaTime * speed;
}