見出し画像

プログラミングノート

こんにちは!ねずみとりです。今回はプログラミングノートについて書こうと思います。

何を書く?

いつも使うプログラムをまとめたりよくはまるエラーの解決策について書くといいと思います。毎回ブラウザで検索せずに済み、メモを検索して自分にとって分かりやすい文章を見られるようにできます。

何に書く?

紙のノートはやめておいた方がいいと思います。検索ができないので。メモアプリなら何でもいいです。私はワードパットを使ってリッチテキストファイルに保存していました。しかし今はnotionがおすすめです。マークダウン形式で文章をまとめることができ、データベースや画像、Texの数式も貼ることができます。

実際私が使っていたプログラミングノート

言語はC#でUnityのメモがほとんどだったと思います。

unityで使うスクリプトメモ

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
よくやるミス一覧
if文に;つける
==と=
using UnityEngine.UI;とかの付け忘れ
ちゃんとスクリプトをアタッチしたか
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
カメラ操作
scroll = Input.GetAxis("Mouse ScrollWheel");//ズーム
Cam.transform.Translate(transform.forward * scroll * 80);
if (Input.GetMouseButton(2))//真ん中押しながらカメラ動かす
{
	float xro = Input.GetAxis("Mouse X");
	float yro = Input.GetAxis("Mouse Y");
	var ro = new Vector3(-xro * 10, -yro * 10, 0f);
	Cam.transform.Translate(ro);
}
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
Debug.Log("log output");

Debug.Log ("<color=#ff0000ff>debug comment</color>"); // 赤色で表示
Debug.Log ("<color=#00ff00ff>debug comment</color>"); // 緑色で表示
Debug.Log ("<color=#0000ffff>debug comment</color>"); // 青色で表示
Debug.Log ("<i>debug comment</i>");             //斜体で表示
Debug.Log ("<b>debug comment</b>");             //太文字で表示
Debug.Log ("<size=30>debug comment</size>");    //大きく表示
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
回転
transform.Rotate(new Vector3(0,0,30))

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
接触判定 当たり判定
void OnCollisionEnter(Collision aiueo)
{
	tring tag = aiueo.gameObject.tag;
}

OnCollisionEnter:接触した瞬間に実行
OnCollisionStay:接触中に実行
OnCollisionExit:接触から離れたときに実行
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
Destroy (gameObject);//自分を消す
Destroy(collision.gameObject);//相手を消す
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
キーボード操作

if (Input.GetKey(KeyCode.Space)) {}
Input.GetKey
キーを押している間は常に(連射状態)
Input.GetKeyDown
キーを押していない状態から押した時
InputGetKeyUp
キーを押している状態から話した時

Space
Return
A
LeftControl
UpArrow

KeyCode.Keypad0
テンキー0

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
移動

if (Input.GetKeyDown (KeyCode.UpArrow)) 
{
	transform.Translate (0, 0, 3);
}

if (Input.GetKey(KeyCode.Space))
{
	transform.position += transform.forward * speed * Time.deltaTime;
}

//力を加える
 void FixedUpdate () 
{
	Rigidbody rb = this.GetComponent<Rigidbody> ();  // rigidbodyを取得
	Vector3 force = new Vector3 (0.0f,0.0f,1.0f);    // 力を設定
	rb.AddForce (force);  // 力を加える
}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
タイピング

public void InputLogger()
{
	string inputValue = inputField.text;

	Debug.Log(inputValue);

	if (inputValue == "aa")
	{
		Debug.Log("ii");//ここにやらせたいこと
	}
	InitInputField();
}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
生成

public GameObject obj;

Instantiate(obj, new Vector3(1.0f, 1.0f, 0.0f), Quaternion.identity);

Instantiate(suna, new Vector3(Random.Range(30, 40), Random.Range(1, 30), Random.Range(-40, -30)), Quaternion.Euler(Random.Range(0, 180), Random.Range(0, 180), Random.Range(0, 180)));


◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
遅れて実行

private void Start()
{
	//2秒後にオブジェクトを消す
	Invoke("Destroy", 2);
}

//Invokeで使う
void Destroy()
{
	Destroy(gameObject);
	Debug.Log("消えた時間" + Time.time);
}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
Update内で1回だけ処理する方法

public class Test : MonoBehaviour
{
	bool One;

	void Start ()
	{
		One = true;
	}

	void Update ()
	{
		if (One)
		{
			Debug.Log ("Play!!");
			One = false;
		}
	}
}
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
変数名の一括変更
変数選んで
ctrl+f

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
ランダム
float random;

random = Random.Range(0, 3240);

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
UnityのInspectorで変数を表示する方法

publicにするだけ

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
NullReferenceException: Object reference not set to an instance of an object

オブジェクトについてるスクリプトの設定をしていないと出てくる
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
スクリプトで色を付ける
このスクリプトを色を付けたいオブジェクトにつける
void Start ()
{
	//オブジェクトの色をRGBA値で変更する
	GetComponent<Renderer>().material.color = new Color32(248, 168, 133, 1);
}
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
親子解除 形成

public GameObject parentObject;
public GameObject childObject;

childObject.transform.parent = null;
childObject.transform.parent = parentObject.transform;

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
マウスホイール
scroll = Input.GetAxis("Mouse ScrollWheel");

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
fpsカメラ
public class look : MonoBehaviour
{

	public Transform verRot;
	public Transform horRot;

	void Start ()
	{
		verRot = transform.parent;
		horRot = GetComponent<Transform>();
	}

	void Update ()
	{
		float X_Rotation = Input.GetAxis("Mouse X");
		float Y_Rotation = Input.GetAxis("Mouse Y");
		verRot.transform.Rotate(0, -X_Rotation, 0);
		horRot.transform.Rotate(Y_Rotation, 0, 0);
	}
}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
スクリプト無効 有効
ゲームオブジェクト.GetComponent<スクリプト>().enabled = false;
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
重力有効無効
private Rigidbody rb;←publicにしてインスペクターでオブジェクトを貼る

	void Start ()
	{
		rb = this.GetComponent<Rigidbody>();
		rb.useGravity = false;
	}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
レイキャスト
gizumosがオンになってないと表示されない
Debug.DrawRay(new Vector3(0.0f, 0.0f, 0.0f),new Vector3(0.0f, 1000.0f, 1000.0f), Color.red);

Physics.Raycast(Vector3 origin(rayの開始地点), Vector3 direction(rayの向き),RaycastHit hitInfo(当たったオブジェクトの情報を格納), float distance(rayの発射距離), int layerMask(レイヤマスクの設定));
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
親取得
transform.root.gameObject ; ←一番上の親を取得
transform.parent.gameObject; ←一つ上の親を取得
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
double to float みたいなエラー
数字にちゃんとfを付ける
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
textをfind
using UnityEngine.UI;
GameObject.Find ("ScoreText").GetComponent<Text>().text = "aaa"
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
角度指定
public class MainCharacter : MonoBehaviour
{
	void Update ()
	{
		// transformを取得
		Transform myTransform = this.transform;

		// ワールド座標を基準に、回転を取得
		Vector3 worldAngle = myTransform.eulerAngles;
		worldAngle.x = 10.0f; // ワールド座標を基準に、x軸を軸にした回転を10度に変更
		worldAngle.y = 10.0f; // ワールド座標を基準に、y軸を軸にした回転を10度に変更
		worldAngle.z = 10.0f; // ワールド座標を基準に、z軸を軸にした回転を10度に変更
		myTransform.eulerAngles = worldAngle; // 回転角度を設定
	}
}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
1秒待つ
void Start()
{
	yield return new WaitForSeconds(1f); // 1秒待つ
}
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
倍速

Time.timeScaleの値を変更

Time.timeScale=0;

なら停止

Time.timeScale=1;

経過速度

2倍速にしたければ、

Time.timeScale=2;

スローなら

Time.timeScale=0.1;

FixedUpdateにする

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
lookatのy軸だけ動かす

void Update()
{
	if (lookTarget)
	{
		var direction = lookTarget.transform.position - transform.position;
		direction.y = 0;
		var lookRotation = Quaternion.LookRotation(direction, Vector3.up);
		transform.rotation = Quaternion.Lerp(transform.rotation, lookRotation, 0.1f);
		}
	}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
プロパティの書き方

private float _AbundanceGrass;//野草の豊富さ 0 100
public float AbundanceGrass
{
	get { return _AbundanceGrass; }
	set
	{
		if (_AbundanceGrass < 0.0f) _AbundanceGrass = 0.0f;
		else if (_AbundanceGrass > 100.0f) _AbundanceGrass = 100.0f;
		else _AbundanceGrass = value;
	}
}
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
if文みたいにvisualstudioで書いた文を閉じることができるプリプロセッサ
#region
#endregion
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
距離
using UnityEngine;
using UnityEngine.UI;

public class DistanceController : MonoBehaviour
{
	public GameObject MajorObj;
	public GameObject Surface;
	public Text MajorText;

	// Update is called once per frame
	void Update()
	{
		Vector3 Apos = MajorObj.transform.position;
		Vector3 Bpos = Surface.transform.position;
		float dis = Vector3.Distance(Apos, Bpos);
		MajorText.text = "現在の距離: " + dis+ "m";
    }
}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
時間経過
timer += Time.deltaTime;
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
UnityでマウスがUI上にあるかどうかチェックするスクリプト

using UnityEngine.EventSystems;
if (EventSystem.current.IsPointerOverGameObject ()) 
{
	// 処理したい内容
}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
ペイントツール

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

public class PaintTool : MonoBehaviour
{
	public Texture2D drawTexture { get; set; }
	public Color[] buffer { get; set; }
	public Texture2D mainTexture { get; set; }
	public Renderer Renderer { get; set; }
	public const float MAX_COLOR = 255.0f;

	private void Start()
	{
		Renderer = GetComponent<Renderer>();
		mainTexture = (Texture2D)GetComponent<Renderer>().material.mainTexture;
		Color[] pixels = mainTexture.GetPixels();
		buffer = new Color[pixels.Length];
		pixels.CopyTo(buffer, 0);

		drawTexture = new Texture2D(mainTexture.width, mainTexture.height, TextureFormat.RGBA32, false);
		drawTexture.filterMode = FilterMode.Point;
	}

	public void PaintSet(float red, float green, float blue, float transparency, int x, int y)
	{
		Color paintColor = new Color(red / MAX_COLOR, green / MAX_COLOR, blue / MAX_COLOR, transparency);
		buffer.SetValue(paintColor, x + WorldManager.TEXTURE_SIZE * y);
	}

	public void PaintUpdate()
	{
		drawTexture.SetPixels(buffer);
		drawTexture.Apply();
		Renderer.material.mainTexture = drawTexture;
	}
}

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
透明なオブジェクトが映らなくなる
RenderingModeをCutoutにしてみる
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆


さいごに

ここまで見て頂きありがとうございます。メモは数年前に作ったものなので間違っていることやUnityの仕様が変わっているところがあるかもしれません。プログラミングノートづくりの参考として見て頂けるとありがたいです。


この記事が気に入ったらサポートをしてみませんか?