ほしきままなり

趣味のプログラミングやらガジェットやらを気ままに記事にしてきます

【Unity】プログラミングなんもわからん人のためのコピペプログラミング初歩

友人にざっくり説明することが多くなったのでそのまとめ。

この記事のターゲット

  • Unityチュートリアルちょっと触って、初めて自分のゲームを作ってみたい
  • 1からプログラミングはできないから、色んな参考サイトをコピペして作りたい
  • プログラミングはif文くらいならわかるかもレベル

っていう人向けです。

この記事ではとてもざっくりとUnity、プログラミングについて触れるので、ちゃんと学びたい人は本とか公式チュートリアルを見に行ってください。

メソッドだったりコルーチンだったりなんかは解説しないので、そこらへんを知りたい人は回れ右してください。

チュートリアルはやったほうがいい

Unityでどんなことができるのかを掴むためにも、色んなサイトで公開されているチュートリアルは一度やってきたほうがいいと思います。

xr-hub.com

baba-s.hatenablog.com

エディターは何を使えばいいの?

基本的にVisualStudio 2019を使えばいいと思います。(VisualStudio Codeではありません) 初学者に便利な機能は主に下記二点だと思います。

  • スクリプトがエラーになっている場合に赤いニョロニョロで教えてくれる
  • 補完という機能が便利

他にも上げたらキリがないほどの便利機能が含まれています。 無料で使えるので使わない手はないです。

VisualStudioが立ち上がらない場合は「Unity エディタ 変更」でググって設定してみてください。

スクリプトの初歩の初歩

まずプレイヤーを作ろうと思います。 PlayerというC# Scriptを新規作成するとこのような感じのものが生成されます。

f:id:jun3453:20200628154026p:plain

これらを超ざっくり説明するので以下のことをなんとなく覚えておいて下さい。

基本

{ のところから } があるところまでが1つの区画です。

基本的にclassやStart、Updateは1個までしか置けないと考えてください。

1~3行目 using

おまじない。気にしない。

5行目~18行目 public class Player: MonoBehaiviour

プレイヤーというものを構成する区画です。 この中の上のほうにHP等、プレイヤーに必要な要素を書いていくことになります。

スクリプトの名前とclass名は同名にしてください。

8行目~11行目 Start()

この中にスクリプトが開始するときの動きを書き込みます。 兄弟にAwake、OnEnableなどがあります。気になったら調べてみてください。

14行目~17行目 Update()

この中に1フレームごとに動作する動きを書き込んでいきます。 兄弟にFixedUpdateというものがあります。こちらも気になったら調べてみてください。

コピペしてみる

さっきのスクリプトにキャラクターの移動をコピペしてみましょう。

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

public class MovePlayer : MonoBehaviour
{
       public Rigidbody rb;

       void Start()
       {
               rb = GetComponent<Rigidbody>();
       }
       void Update()
       {
               float x = Input.GetAxis("Horizontal") * 10f;
               float z = Input.GetAxis("Vertical") * 10f;
               rb.AddForce(x, 0, z);
       }
}

このコピペ元はクラス名がMovePlayerなので、先ほどのスクリプトにコピペするとエラーになってしまいます。

  • Startの中身をコピペして貼り付け。
  • Updateの中身をコピペして貼り付け。

という風にやっていくのがよいです。

次にジャンプをコピペしてみます。

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

public class JumpPlayer : MonoBehaviour
{
       public Rigidbody rb;

       void Start()
       {
               rb = GetComponent<Rigidbody>();
       }
       void Update()
       {
               if (Input.GetButtonDown("Jump"))
               {
                      rb.AddForce(0, 100f, 0);
               }
       }
}

先ほどの移動のものと同じ、rbの行があります。 ここはすでにあるので、2重に書く必要はありません。

今回コピペするのは、ジャンプに必要なif文全体です。 if文も{から}までが1つなので、ここをUpdateの下の方に追加していきましょう。

コピペできたものが以下になります。

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

public class Player : MonoBehaviour
{
       public Rigidbody rb;

       void Start()
       {
               rb = GetComponent<Rigidbody>();
       }

       void Update()
       {
               float x = Input.GetAxis("Horizontal") * 10f;
               float z = Input.GetAxis("Vertical") * 10f;
               rb.AddForce(x, 0, z);

               if (Input.GetButtonDown("Jump"))
               {
                      rb.AddForce(0, 100f, 0);
               }
       }
}

次に当たり判定とHPがなくなったら死ぬ要素をコピペしていきます。

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

public class Atarihantei : MonoBehaviour
{
       int hp = 10;

       private void OnCollisionEnter(Collision collision)
       {
               if (collision.gameObject.tag == "Bullet")
               {
                      hp--;
               }
       }
}

これを先ほど作成したPlayer classの中にコピペしていきます。 コピーするのはhpの1行とOnCollisionEnterの区画です。

これでBulletというタグのついたゲームオブジェクトに当たったらHPが-1されるというPlayerの完成です。

適当にまとめ

Unityは膨大な量のサンプルプログラムがネットに転がっています。 「Unity プレイヤー ジャンプ」「Unity 敵 作り方」なんかでググると何百件も見本が出てきます。 自分が望む動きを見つけて、コピペしてみてを繰り返していくことで理解が進むと思います。

基本的に何かを参考にして作る時は全てをコピペするのではなく、if文や処理一つ一つを部品としてみてみてください。 調べていくうち、コピペして組み込んでいくうちに文章がどういう動きをしているのか、どういう使い方をしたらいいかがわかってくると思います。