TIL UIおよび監視対象22014


💡 ゲームの計画
第四章では、旗の近くに車を止める「自動車駐車ゲーム」を作成した.
ゲームが始まると、車が画面左下に表示されます.
画面を切り替えると、車が走り始め、徐々に減速して停止します.
ストロークの長さを調整することで自動車の走行距離を変えることができます
画面の右下に旗が表示され、中央に車と旗の間の距離が表示されます.
💡 ゲームデザインの5ステップ
手順1:画面に配置するすべてのオブジェクトをリストします.
手順2:移動可能オブジェクトのコントローラスクリプトを決定する
ステップ3:オブジェクトを自動的に作成するための拡張スクリプトを決定する
手順4:UIをリフレッシュするための監視スクリプトの準備
手順5:スクリプトの作成プロセスを検討する
💡 モーションオブジェクトを作成します.
  • Sceneビューにオブジェクト
  • を配置する
    コントローラスクリプトを作成し、
  • メソッドを使用してオブジェクト
  • を移動します.
  • で作成されたスクリプトをオブジェクトに適用
  • [コントローラスクリプトの作成]
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CarController : MonoBehaviour
    {
    	float speed = 0;
    	Vector2 startPos;
    
    void Start()
    {
    }
    
    void Update()
    {
    
    // 마우스 왼쪽 버튼을 클릭 했을 때
    if(Input.GetMouseButtonDown(0))
    {
    	this.startPos = Input.mousePosition;  // 클릭한 지점의 좌표를 startPos 변수에 저장
          }
    
    // 마우스에서 손을 뗐을 때
    else if(Input.GetMouseButtonUp(0))
    {
    	Vector2 endPos = Input.mousePosition;  // 손을 뗀 지점의 좌표를 endPos 변수에 저장
    
    	//endPos의 x 좌표 값에서 startPos의 x 좌표 값을 뺀 만큼의 차이를 swipe 길이로 저장
    	float swipeLength = endPos.x - this.startPos.x;
    
       	// 스와이프 길이를 거리라고 생각하고, 적절한 시간으로 나눠 초기 속도 값에 대입함
    	// 500.0f의 값은 원하는대로 수정 가능하고, 값이 클수록 속도가 느려짐
    	this.speed = swipeLength / 500.0f;
    
    	// 효과음 재생을 위한 AudioSource 컴포넌트와 Play 메서드
    	GetComponent<AudioSource>().Play();
          }
    
    	// transform 컴포넌트로 Translate 메서드에 접근하여 speed만큼 오브젝트를 이동시킴
        	transform.Translate(this.speed, 0, 0);
    
    	// speed 값에 감쇠 계수를 곱해주어 점차 감속하다가 멈추는 동작을 하게 됨
    	this.speed *= 0.98f;
    
    	}
    }
    [監督スクリプトの作成]
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI; // UI 오브젝트를 사용하기 위해 필요함
    
    public class GameDirector : MonoBehaviour
    {
    
    // 다른 컴포넌트에 접근하기 위하여 빈 상자인 GameObject형 변수 선언
    GameObject car;
    GameObject flag;
    GameObject distance;
    
    void Start()
    {
    
    // GameObject의 Find 메서드로 인수에 해당하는 오브젝트를 찾아 얻어 옴
    this.car = GameObject.Find("car");
    this.flag = GameObject.Find("flag");
    this.distance = GameObject.Find("Distance");
    
    }
    
    void Update()
    {
    
    // 깃발의 x 좌표 값과 자동차의 x 좌표 값 사이의 차이를 거리 변수 length에 저장함
      float length = this.flag.transform.position.x - this.car.transform.position.x;
    
    	if(length >= 0) //length ≥ 0. 즉, 자동차와 깃발 사이의 거리가 0보다 크거나 같을 때
    	{
    
    	//  화면 중앙에 표시하는 UI로 length의 값을 문자열로 변환, 소수점 이하 둘째자리까지 표시
    	this.distance.GetComponent<Text>().text = "목표 지점까지 " + length.ToString("F2") + "m";
    
    	}
    
    	else // length 값이 0보다 작으면 ‘게임 오버!’ 를 화면 중앙에 표시함
    	{
    		this.distance.GetComponent<Text>().text = "게임 오버!";
    	 }
       }
    }
    💡 構成部品の理解
    自動車オブジェクトの座標で近づくとcar.transform.position.xの理由を書く?
    GameObjectという空のボックスにコンポーネントを追加することで、汎用オブジェクトの機能を追加できます.
    だから、car.transform.position.xにより自動車オブジェクトに適用されるTransform素子の座標情報にアクセスできる
    Transformは変換に使用できますが、残りの構成部品は使用できません.
    Transform構成部品にアクセスする場合、GetComponent()を書き込むのは毎回面倒です
    unityは簡単なフォーマット変換変数を提供しているので、使用できます!
       transform = GetComponent<Transform>()
    自分以外のオブジェクト構成部品へのアクセス方法
    1.Findメソッドを使用してオブジェクトを検索する(引数としてオブジェクトを検索する)
    2.GetComponentメソッドを使用してオブジェクトの構成部品を取得する
    3.構成部品を有するデータへのアクセス
    💡 効果音を適用
  • Audio Sourceコンポーネント
  • AudioSource要素を、
  • の効果音を発するオブジェクト
  • に適用する.
  • AudioSourceコンポーネントのAudioClipプロジェクトに有効な音響効果
  • を設定します.
  • 効果音を出したい場合は、Skypeを使用してPlayメソッド
  • を呼び出します.