はりうすブログ (のすけのメモ)

湘南にある小さな会社 代表 ”のすけ”のブログです

【Unity道場6】プレイヤーを動かすPlayerコントローラーの作成

回答例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
  public float speed = 3f;  //移動スピード

  // Start is called before the first frame update
  void Start()
  {

  }

  // Update is called once per frame
  void Update()
  {
    float x = Input.GetAxis("Horizontal");  //左右方向のキー取得
    float z = Input.GetAxis("Vertical"); //上下方向のキー取得

    float addX = speed * x * Time.deltaTime;
    float addZ = speed * z * Time.deltaTime;

    transform.GetComponent<Rigidbody>().MovePosition(transform.position + new Vector3(addX, 0, addZ));
    transform.LookAt(transform.position + new Vector3(addX, 0, addZ));
  }
}

Simply Pianoやばい。ピアノコードが直感的に覚えられる

なんだか、最近ピアノにハマっている、のすけです。

PCばかり触っていると、揺らぎあるものに無性に引かれるもので

辿り着いたのがピアノ。


小学生の時に3年ほど習ってたんだけど、それ以来。

ピアノは電子のやつで、6万円くらい?でYAMAHAのP125ってやつを買いました。

色々触ったのだけど、これが一番グランドピアノのキータッチに近かったので。迷った末に購入。

ちょっと、キーが重くて指が疲れるけど、後悔はしていない。


最近は、Youtubeとかオンライン学習サイトが充実してて、

ピアノの先生に習いに行かなくても、全然学習できるのね。


Udemyとかで色々買ってみたけど、今、一番ハマっているのがこれ
f:id:hollywis:20211016054805p:plain

Simply Piano (年間コースで1万円くらい. 安すぎ!)


何がスゴイって、iPadにインストールしたら、あとはピアノとiPadをUSBケーブルで繋ぐと認識して

押したキーを合ってるか審査してくれるんだよね。


あと、カリキュラムが充実してて

子供の頃に習った、クラシックピアノ系もあるし

さらに! ピアノのコードを学習するカリキュラムもあって

実際のPOPSに合わせてコードで伴奏する方法が学べちゃう。




もう3ヶ月くらい毎日やって、もう少してコードのカリキュラムはクリアしちゃうのが、ちょっと物足りないんだけど。

終わったら、どうしようか。


クラシックピアノコースに進むか、もしくはYoutubeのコースでも進むか。

UniRxやってます

最近何も書いてなかったので、雑記を

こんにちは、のすけです。

最近は、これのシングルトンとかobservableパターンを読んで

その後、UniRx勉強してます

Vue.jsなどでobservableをなんとなく使ってたのですが

これを読んで理解が深まりました。

イベントと実処理を分離した実績達成システムを実装したくてたどりついた感じで

ゲームのパターンってなってますが、結構汎用的に、いろんなシステム開発で使える手応えを感じてます。


ではまた

shopifyという凄いECプラットフォーム

こんにちは、のすけです。

ただの雑記なのですが、shopifyというECプラットフォームご存知でしょうか。

最近は、簡単に個人のショップを作れるサービスがいっぱいあって

例えば
・BASE
・STORES
とか便利で利用していました。

数クリックでWEBのECショップが簡単に作れて便利ですよね。

ただ、セール中のモーダルを出してみたりなど、ちょっとした複雑な機能を
追加したりなんかは難しくて

そうなってくると、他のECプラットフォームになってくるわけですが

たとえば
WordPressにECプラグイン(WooCommerceとか)入れる
・ECcubeを使う
何かの選択肢が出てきたりします。

そんな中で、最近?2018年らしいけれど日本語にも対応したshopifyが中々凄いそう

利用間隔はBASEやSTORESのような感じでありながら
カスタマイズ性がWordPressやECcubeのような感じ。

つまり
サーバー不要で数クリックでショップを開けるけて
かつ細かいカスタマイズも色々できる!

APIもあって中々いじりがいがあるようです。
フロント部分はスクラッチで自前で作って、管理画面だけ利用するなんてこともできそうなので
期待が持てます。

海外性ということもあり、海外向けのEC作りたい場合にはかなり重宝しそうです。

ちょっと色々いじっていこうかなと
では!

【Unity道場5】衝突判定をせよ

問題1:衝突判定をせよ

キューブオブジェクトを上から落として、地面にぶつかった時にオブジェクトを削除してください。

回答例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CollisionTest : MonoBehaviour
{

    void OnCollisionEnter(Collision collision)
    {
            Destroy(gameObject);
            Debug.Log("当たったよ!");
    }
}

解説

OnCollisionEnterでイベントを検出して、オブジェクトを削除しています

実行結果

f:id:hollywis:20210215234005g:plain

問題2:衝突先のオブジェクトを削除せよ

問題1を改良します。

キューブオブジェクトを上から落として、地面にぶつかった時に地面オブジェクトの方を削除してください。

回答例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CollisionTest : MonoBehaviour
{
  void OnCollisionEnter(Collision collision)
  {
    Debug.Log("当たったよ!" + collision.gameObject.name);
    Destroy(collision.gameObject);

  }
}

解説

collision.gameObject

これで衝突先にgameObjectを取得できるので、それをDestroyします。

動作

地面に触れた瞬間に衝突して、地面が消えます

f:id:hollywis:20210216000553g:plain

【Unity道場4】マウスクリックを検出せよ

問題:マウスクリックを検出せよ

ゲームオブジェクトのマウスクリックを検出してログを出力してください。

回答例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class PrefabDestroyer : MonoBehaviour, IPointerClickHandler
{
  // Start is called before the first frame update
  void Start()
  {

  }

  // Update is called once per frame
  void Update()
  {

  }

  public void OnPointerClick(PointerEventData pointerData)
  {
    Debug.Log(gameObject.name + " がクリックされました!");
  }

}

解説

マウスクリックを検出するためには、イベントシステムとカメラからのポインタークリックを検出します

f:id:hollywis:20210215231543p:plain

そのために、まずはインスペクタービューでカメラにPhysics Raycasterを設定します

そして、クリックを検出したいオブジェクトにスクリプトをセットします。

using UnityEngine.EventSystems;

イベントシステムのライブラリの利用宣言。

public class PrefabDestroyer : MonoBehaviour,  IPointerClickHandler

MonoBehaiviorの横に、IPointerClickHandlerを継承を記述します。


あとはOnPointerClick関数を定義して、クリックイベントを取得します。

public void OnPointerClick(PointerEventData pointerData)
  {
    Debug.Log(gameObject.name + " がクリックされました!");
  }

f:id:hollywis:20210215232154p:plain

【Unity道場3】ゲームオブジェクトを動的に生成せよ

こんにちは

Unityの書籍を何も考えずに言われるままにゲームを作っても

全く!!!覚えておらず


一向に手放しでゲームを作れるようになれる気がしないため始まった

Unity道場の3回目です。

問題1:ゲームオブジェクト動的に生成せよ

ゲームオブジェクト動的に生成するプログラムを書け。

動的生成するプレハブはInspectorビューから指定できるようにすること。

また出現位置をランダム化すること。

回答例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PrefabCreater : MonoBehaviour
{
  public GameObject prefab;

  void Start()
  {
    this.CreatePrefab();
  }

  void Update()
  {

  }

  void CreatePrefab()
  {
    float x = Random.Range(-5.0f, 5.0f);
    float y = Random.Range(0.0f, 5.0f);
    float z = Random.Range(-5.0f, 5.0f);

    GameObject new_prefab = Instantiate(
        prefab,
        new Vector3(x, y, z),
        Quaternion.identity
    );
  }
}

解説

最初のこの部分で、まずUnityのUIから動的に生成したいPrefabを指定してあげます。

public GameObject prefab;

こう記述することで、Inspectorビューから事前に生成するプレハブを指定できます。



そして、適当な名前の動的生成用の関数(CreatePrefab)を作ります.

void CreatePrefab()
  {
    float x = Random.Range(-5.0f, 5.0f);
    float y = Random.Range(0.0f, 5.0f);
    float z = Random.Range(-5.0f, 5.0f);

    GameObject new_prefab = Instantiate(
        prefab,
        new Vector3(x, y, z),
        Quaternion.identity
    );
  }

オブジェクトの動的な生成には、Instantiate関数を用います。

この関数は、プレハブからオブジェクトを生成する関数です。


Instantiate関数

  • 第1引数:動的生成するプレハブを指定
  • 第2引数:出現座標を指定(Vector3構造体)
  • 第3引数:回転方向を指定(Quatenion構造体)


問題では、ランダムな座標を指定する必要があるため、float型の数値,x,y,xをRandom.Range関数を用いて生成しています。

Random.Range関数の引数は範囲を示しており、xは-5~5, yは0~5, zは-5~5の間で乱数が取得できるようにしてみました。

Instantiate関数の第3引数で指定しているQuaternion.identityは回転しないという意味になります。

実行結果

こんな感じで、再生するたびにランダムに指定したプラハブがゲームオブジェクトとして出現します。

f:id:hollywis:20210215144338p:plain

f:id:hollywis:20210215144331p:plain
f:id:hollywis:20210215144326p:plain

問題2:動的生成したゲームオブジェクト削除せよ

問題1を拡張すること。

動的に生成したゲームオブジェクトが出現してから3秒後に削除するプログラムを書け。

回答例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PrefabCreater : MonoBehaviour
{
  public GameObject prefab;
  private GameObject new_prefab;

  // Start is called before the first frame update
  void Start()
  {
    this.CreatePrefab();
  }

  // Update is called once per frame
  void Update()
  {

  }

  void CreatePrefab()
  {
    float x = Random.Range(-5.0f, 5.0f);
    float y = Random.Range(0.0f, 5.0f);
    float z = Random.Range(-5.0f, 5.0f);

    new_prefab = Instantiate(
        prefab,
        new Vector3(x, y, z),
        Quaternion.identity
    );

    Invoke("DestroyPrefab", 3.0f);
  }

  void DestroyPrefab()
  {
    Destroy(new_prefab);
  }
}

解説

消すためにはグローバル変数に動的生成したオブジェクトを置いておく必要があるので、以下を追加

private GameObject new_prefab;

消すための関数を適当な名前(DestroyPrefab)で作ります

void DestroyPrefab()
  {
    Destroy(new_prefab);
  }
}

ゲームオブジェクト削除には、Destory関数を用います。

また、3秒後に消すために、メソッドを遅延実行させるInvoke関数を動的生成後に呼び出します。

Invoke("DestroyPrefab", 3.0f);

実行結果

3秒後に消えましたよと。

f:id:hollywis:20210215151306p:plain

Unity2020入門

Unity2020入門