In medio stat virtus

雰囲気研究者です。

ゲージ作成、移動ボタン作成、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 ( nowsize0.5f1f);
        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に該当する計算式をさっき神リンクって紹介したスレッドからピックアップするほうがよさそう。

 

 

以上〜。