【Unity】Positionの操作を楽にする(C#)

UnityでオブジェクトのPositionを操作する場合 javascriptの場合 C#の場合 ながい。。。…

UnityでオブジェクトのPositionを操作する場合

  • javascriptの場合
    transform.position.x += 0.1;
    
  • C#の場合
    transform.position += new Vector3(0.1f, transform.position.y, transform.position.z);
    

    ながい。。。

  • ちなみにC#でこう書くとエラー
    transform.position.x += 0.1f;
    

    しかしこんな感じで書きたい

    C#でポジションの操作を楽にする

  • サンプルコード
    以下のメンバを追加し、setterとgetterでtransform.positionをいじるように定義しておく。

    using UnityEngine;
    using System.Collections;
    
    public class Sample : MonoBehaviour {
    
    	protected Vector3 Position
    	{
    		set { this.transform.position = value; }
    		get { return this.transform.position; }
    	}
    
    	protected float PositionX
    	{
    		set { Position = new Vector3(value, Position.y, Position.z); }
    		get { return Position.x; }
    	}
    
    	protected float PositionY
    	{
    		set { Position = new Vector3(Position.x, value, Position.z); }
    		get { return Position.y; }
    	}
    
    	protected float PositionZ
    	{
    		set { Position = new Vector3(Position.x, Position.y, value); }
    		get { return Position.z; }
    	}
    }
    

    これでPosition操作はこんな風に書ける。

    	PositionX += 0.1f;
    

    もうちょっと整理

    Positionの操作は楽になった、しかし毎回メンバ追加するのは無理
    という事で

  • 動く者クラスを作る
    using UnityEngine;
    using System.Collections;
    
    public class Mover : MonoBehaviour
    {
    	protected Vector3 Position
    	{
    		set { this.transform.position = value; }
    		get { return this.transform.position; }
    	}
    
    	protected float PositionX
    	{
    		set { Position = new Vector3(value, Position.y, Position.z); }
    		get { return Position.x; }
    	}
    
    	protected float PositionY
    	{
    		set { Position = new Vector3(Position.x, value, Position.z); }
    		get { return Position.y; }
    	}
    
    	protected float PositionZ
    	{
    		set { Position = new Vector3(Position.x, Position.y, value); }
    		get { return Position.z; }
    	}
    }
    
  • このMoverクラスを継承すればPosition操作は楽できる
    using UnityEngine;
    using System.Collections;
    
    public class Sample : Mover
    {
    	void Update ()
    	{
    		PositionX += 0.1f;
    	}
    }
    

    他にも共通機能はこのMoverに定義すれば全体に反映できるので便利