LoginSignup
0
0

More than 3 years have passed since last update.

kelpnetの作法 その8

Last updated at Posted at 2019-07-03

概要

kelpnetの作法を調べてみた。
ライントレースやってみる。
運転してみた。

結果

何回やっても、2コーナークリアして、コースアウト。魔物が、住んでる。

image.png

サンプルコード

using UnityEngine;
using KelpNet;
using System;

public class pc3 : MonoBehaviour
{
    [SerializeField]
    private Camera dispCamera;
    [SerializeField]
    private SpriteRenderer bod;
    [SerializeField]
    public float val;
    private Texture2D tex0;
    Function testnn;
    void Start()
    {
        var tex = dispCamera.targetTexture;
        tex0 = new Texture2D(tex.width, tex.height, TextureFormat.ARGB32, false);
        testnn = ModelIO.Load(Application.dataPath + "/test.nn");
    }
    void Update()
    {    
        var tex = dispCamera.targetTexture;
        Texture2D tex1 = new Texture2D(40, 40, TextureFormat.ARGB32, false);
        Texture2D tex2 = new Texture2D(40, 40, TextureFormat.ARGB32, false);
        Texture2D tex3 = new Texture2D(40, 40, TextureFormat.ARGB32, false);
        Texture2D tex4 = new Texture2D(40, 40, TextureFormat.ARGB32, false);
        Texture2D tex5 = new Texture2D(40, 40, TextureFormat.ARGB32, false);
        float v1;
        float v2;
        float v3;
        float v4;
        float v5;
        RenderTexture.active = dispCamera.targetTexture;
        tex0.ReadPixels(new Rect(0, 0, tex.width, tex.height), 0, 0);
        tex0.Apply();
        tex1.ReadPixels(new Rect(10, 200, 40, 40), 0, 0);
        tex1.Apply();
        tex2.ReadPixels(new Rect(60, 200, 40, 40), 0, 0);
        tex2.Apply();
        tex3.ReadPixels(new Rect(110, 200, 40, 40), 0, 0);
        tex3.Apply();
        tex4.ReadPixels(new Rect(160, 200, 40, 40), 0, 0);
        tex4.Apply();
        tex5.ReadPixels(new Rect(210, 200, 40, 40), 0, 0);
        tex5.Apply();
        val = Sense(tex0);
        v1 = Sense(tex1);
        v2 = Sense(tex2);
        v3 = Sense(tex3);
        v4 = Sense(tex4);
        v5 = Sense(tex5);
        Real[] s = new Real[] {
            v1,
            v2,
            v3,
            v4,
            v5
        };        
        NdArray res = testnn.Predict(s)[0];
        float x = 0;
        float y = 0;
        if (res.Data[0] > res.Data[1] && res.Data[0] > res.Data[2])
        {
            y = Time.deltaTime * 0.5f;
        }
        if (res.Data[1] > res.Data[0] && res.Data[1] > res.Data[2])
        {
            x = Time.deltaTime * -50.0f;
        }
        if (res.Data[2] > res.Data[0] && res.Data[2] > res.Data[0])
        {
            x = Time.deltaTime * 50.0f;
        }
        transform.Rotate(0, 0, x);
        transform.Translate(0, y, 0);
        Sprite spr = Sprite.Create(tex0, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f));
        bod.sprite = spr;
    }
    private float Sense(Texture2D tex)
    {
        var cols = tex.GetPixels();
        var avg = new Color(0, 0, 0);
        foreach (var col in cols)
        {
            avg += col;
        }
        avg /= cols.Length;
        return avg.grayscale;
    }
}

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0