ゲージ作成、移動ボタン作成、rigidbodyとか
メモ程度に〜
オブジェクトに当たると体力ゲージがさがるようなHUDを作る
完成したHUD.cs↓ これをプレハブ化したゲージにつけました
using UnityEngine;
using System.Collections;
public class HUD : MonoBehaviour {
private float hitpoint;
private float hitpoint_max;
private float nowsize;
public float default_size;
public GameObject refObj;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
Rocket rocket = refObj.GetComponent<Rocket> ();
if (rocket != null) {
hitpoint = rocket.Hitpoint;
hitpoint_max = rocket.Hitpoint_max;
} else {
Debug.LogWarning ("can't get script Rocket!");
}
nowsize = default_size - hitpoint/hitpoint_max;
transform.localScale = new Vector3 ( nowsize, 0.5f, 1f);
if(nowsize<=0){
Application.LoadLevel("result");
}
}
}
デフォルトサイズから、減った割合だけ減るようにしたつもり…
わからなかったり苦戦したことが
・ゲームオブジェクトを参照するときpublicで宣言してるからあとでInspectorから対応するオブジェクトをドラッグアンドドロップする必要があった
・減らしたいHPバーをプレハブにする
→大きさ調整しただけで特になにもつけてない
他のブログみてると難しいことやってて行数少ないけど時間かかった…
移動ボタン作成
左右の移動ボタンを作った。まあマウス入力の判別だしいけるっしょー
でも、同じスクリプトを2箇所に使いまわしたかったけどうまくいかなかった。
コントローラーのスクリプトでbool型のチェック変数を作っておいて、クリックされたオブジェクトのタグで場合分けをしたかったのだけども…
先に押した方のtrueがずっと有効になっていて、Input.GetMouseButtonUpでFalseでリセットするようにしてるはずなのにうまくいかなかった記憶
時間ないから右用、左用でスクリプトを作った。ぽんこつ〜
public class TransButton_L : MonoBehaviour {
public GameObject refObj;
public float power;
// Update is called once per frame
void Update () {
Rocket rocket = refObj.GetComponent<Rocket> ();
power = rocket.power;
if(Input.GetMouseButton(0)){
Vector3 aTapPoint=Camera.main.ScreenToWorldPoint(Input.mousePosition);
Collider2D aCollider2d = Physics2D.OverlapPoint(aTapPoint);
if(aCollider2d){
rocket.rigidbody2D.velocity = new Vector2(-1,0)*power;
}
}
}
}
前に作ったRocket.csで動かすパワーを決めてたからそれを参照するように変更しただけー
どこかで見つけたマウス入力の違いをメモ書き
●マウス入力を取得
function Update() {
if(Input.GetMouseButtonDown(0)){
//マウスの左ボタンを押した
}
if(Input.GetMouseButton(0)){
//マウスの左ボタンを押し続けている
}
if(Input.GetMouseButtonUp(0)){
//マウスの左ボタンを離した
}
}
背景をスクロールするようにしたい
↓こちらを参考にして作った
背景をスクロールさせる | Unity | Obake Solutions
このリンク先のリンク先をもともと読んでいたらうまくいかなかったんだけどマテリアル作成してませんでしたぺろぺろ
rigidbody.AddForceとRigidbody2D.AddForceの受け渡しの違い
引力を発生するEnemy発生させようとおもって
[Unity] 惑星に向かって物体が落ちるようにする | ftvlog
このリンク先のスクリプトそのままコピペ。したけどエラー。
rigidbodyじゃなくてRigidbody2Dを使わなきゃいけないっぽくて、そのまま2Dだけ足してもエラー。
どうやらrigidbodyではAddForce(x: float, y: float, z: float, mode: ForceMode = ForceMode.Force): void;
の型でForceModeを引数にできる。
一方RIgidbody2D.AddForceでは
AddForce(force: Vector2): void;
なので同じ書き方をしたら怒られる。
※Rigidbody2DにもForceModeを引数にできるらしいけど、ForceMode2Dにしなきゃいけないぽい
rigidbody2D.AddForceの使い方の参考スレッド
Rigidbody2D and ForceMode.AddVelocity? - Unity Answers
↑このリンク後々神になる
しかもForceModeとForceMode2Dでvariablesが異なる
ForceMode2DではForceとImpulseのみ。
Unity - Scripting API: ForceMode2D
参考スクリプトではAcceleration使いたいのに!
げろげろ!
ということで引数にMode使うよりは、Modeに該当する計算式をさっき神リンクって紹介したスレッドからピックアップするほうがよさそう。
以上〜。