テクノモンキー(サブ)

テクノモンキーのニュースブログです。 主に新作ゲームアプリやAmazonプライムビデオのレビュー、iOSやAndroid、Unityのアプリ開発に関する情報や考え事などを気軽に発信します。

【Unity】GameObjectの透明度をコード変更する方法(SpriteRendererを使わない)2D

UnityでGameObjectの透明度をコードで変えようとしたらつまづいてしまったのでメモ。


やりたいこととしては、
「未入手のアイテムを半透明の状態にしておいて、アイテムをゲットしたら半透明状態を元に戻す」
ってことです。




GameObjectの透明度を変える方法を調べていたんですが、調べてみると3Dでやる場合の方法ばっかりが出てきてしまいます。。(僕の検索法の問題もある)




vend9520-lab.net



qiita.com






その後、ようやくUnityの2Dでオブジェクトの透明度を変更する方法を見つけたんですが、




Unity2Dメモ2 スクリプトからSpriteの透明度を変える

d.hatena.ne.jp



やり方的には、GetComponentでSpriteRendererを取得して、colorの値を変えるという方法。





ただ僕が透明度を変えたいゲームオブジェクトは「Hierarchy→UI→image」で追加したGameObjectなので、SpriteRendererがないオブジェクトです。

f:id:no-work-no-life-4081:20180509132922p:plain


SpriteRendererを使わないでやる方法がないかなーって思って色々試した結果、以下の方法でできました。



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


public class Test : MonoBehaviour {
	


	public GameObject item_Star; //アイテム:スター

	void Start () {

		//アイテムをゲットしていないのでアルファ値を下げる
		item_Star.GetComponent<Image> ().color = new Color (1.0f, 1.0f, 1.0f, 0.25f);
	}

	void Update () {
		
	}
		
	// アイテムゲット処理
	public void GetItem(){

		//アイテムをゲットしたので、アルファ値を元の値にする
		item_Star.GetComponent<Image> ().color = new Color (1.0f, 1.0f, 1.0f, 1.0f);
	}

}






GetComponentでImageを取得してImageのcolorを変更することで透明度を変えられました。



Unityを触り始めて1週間くらい経ち、ようやく慣れてきた気がしますが、まだまだ謎が多い。。

【Unity】プレイヤーがダメージを受けた時に点滅させる方法

https://unity3d.com/files/images/ogimg.jpg?1


Unityでアクションゲームを作っているんですが、
「プレイヤーが敵に当たった時、点滅させて一定時間無敵状態にする」っていうのをやってみました。


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

using DG.Tweening;

public class PlayerManager : MonoBehaviour {
	
	private bool isDamaged = false; //敵に当たったか

	void Start () {
		//テスト用
		isDamaged = true;
	}

	void Update () {		
	}

	void FixedUpdate () {
		//ダメージを受けた時の処理
		if(isDamaged){
			float level = Mathf.Abs(Mathf.Sin(Time.time * 10));
			gameObject.GetComponent<SpriteRenderer> ().color =  new Color(1f,1f,1f,level);
		}
	}
}


敵に当たったかの判定がisDamagedで、trueになった場合(敵に当たった場合)にダメージを受けたとして点滅させます。

GameObjectのSpriteRendererの色を切り替えることで点滅しているように見せます。


上記の場合だと、isDamagedが最初からtrueなので、点滅し続けます。


プレイヤーがダメージを受けた → isDamagedをtrueにする
isDamagedがtrue → プレイヤーを点滅させる


こちらには書いてないですが実際に使う場合は点滅後、 isDamagedをfalseにしてSpriteRendererのcolorのalphaを元に戻す処理が必要ですね。


以下のサイトを参考にさせて頂きました。



raharu0425.hatenablog.com


関連:
【Unity】Scene内のGameObjectをポーズ(一時停止)させる方法 - テクノモンキー(サブ)
【Unity】Admobの広告が表示されない場合に試すべきこと - テクノモンキーのアプリ開発日記
UnityでGameObjectの子を取得して削除する方法 - テクノモンキーのアプリ開発日記

【Unity】SpriteのPivotが見つからない。。。

 

Unityアプリ開発の勉強中に遭遇した問題の解決法メモ。

 

SpriteのPivotが見つからない。。

 

f:id:no-work-no-life-4081:20180501150642p:plain

 

本を見ながらUnityの勉強をしているんですが、

「SpriteのPivotをBottomに変更する」っていう作業をやろうと思ったら、

Pivotが見つかりません。。

 

 

ピボット(Pivot)

回転(rotation)、サイズ(size)、スケール(scale) の修正はピボットの周囲で起こりますので、ピボットの位置は回転、リサイジング、スケーリングの結果に影響します。ツールバーの Pivot ボタンが Pivot モードに設定されている場合、Rect Transform のピボットは Scene View で移動させることができます。

 

docs.unity3d.com

 

Pivotはオブジェクトの軸を設定するためのものらしいので、Spriteには必要な設定のはずなのですが。。

 

ちなみにUnityバージョンは Version 2017.4.1f1 Personal

f:id:no-work-no-life-4081:20180426102558p:plain

 

Sprite Editorの中にPivotを発見!

 

色々ポチポチして探した結果、「Sprite Editor」の中に「Pivot」がありました。

(一番上の画像の右下)

 

f:id:no-work-no-life-4081:20180501150944p:plain

 

無事Pivotを「Bottom」に変更できました。

 

techno-monkey.hateblo.jp

前の「is Kinematicが見つからない件」と同様、バージョンアップで仕様変更されたものと思われます。

 

 

とりあえずよかった。

 

 

 

 

【Unity】「is Kinematic 」がRigidbody 2Dにない場合の対処法

Unityでアプリ開発をしていてつまずいたことのメモ。

 

Unity開発本を見ながらサンプルアプリを作っていたら、

Rigidbody 2Dの「is Kinematic」にチェックを入れるって書いてあったから

 

その通りに設定しようと思ったら、、、、

f:id:no-work-no-life-4081:20180428103657p:plain

 

「is Kinematic」の項目が見つかりません。

なぜ?バージョン違い?

 

 

Unity の「is Kinematic」で同じような悩みを抱えていた人を発見!

 

どうしたものかと思っていたら、同じような問題に遭遇している人を発見しました。

 

teratail.com

 

こちらの記事によると、仕様変更があったらしく

Rigidbody 2Dの「 is Kinematic」のチェック →「Body Type」をKinematicにする

になった模様。

 

 

f:id:no-work-no-life-4081:20180428104248p:plain

 

これを参考にRigidbodyのBody Type を「Kinematic」に変更したら無事解決しました。

 

少し古めの本だとバージョンアップの影響で本通りにやってもうまく行かないことが多いので困るなーと思います。

 

 

 

 

Unity 「No cameras rendering 」が表示されてスクリーンが表示されない

https://unity3d.com/files/images/ogimg.jpg?1

最近仕事でUnityを触ることになりました。

 

Unityはほぼほぼ初心者なので、今後は自分用のメモとしてちょくちょく書いていきたいと思います。

 

Unityのバージョンは2017.4.1f1 Personal 

(なんか日付みたいだけどこれがバージョンで合ってるのかな?)

 

f:id:no-work-no-life-4081:20180426102558p:plain

 

「No cameras rendering」と表示されてスクリーンが表示されない。。

 

 

f:id:no-work-no-life-4081:20180426102712p:plain

 

Unity系の開発本を見ながら作って、はじめて「Play」でスクリーンを表示させようとしたらこんな画面が。。

 

「何かしらの入力ミスかなー?」って思って、色々調べて見たらこんな記事が。

 

 

tsubakit1.hateblo.jp

 

こちらの記事によるとカメラコンポーネントがないから表示できないよってエラーらしいですが、

 

自分のプロジェクトを見るとちゃんとカメラが表示されている。。。

 

なぜ・・・・!?

 

 

 

 

原因は選択されていたDisplayが違うカメラだったこと。。

 

f:id:no-work-no-life-4081:20180426103643p:plain

よく見てみると、「Display3?」

 

Displayの項目を特にいじった覚えはないのですが、カメラは1個しか配置していないので、試しに「Display1」に変更してみると、、、

 

 

 

f:id:no-work-no-life-4081:20180426103703p:plain

 

表示された!

 

凡ミスではありますが、なぜ「Display3」が選択されていたのか謎です。。。

ただ、僕のような初心者にはあり得る話かと思われます。。