« Kerbal Space ProgramのパーツMODを作る 7 | トップページ | Kerbal Space Programで気に入ったMOD »

2015年7月18日 (土)

Kerbal Space ProgramのパーツMODを作る 8

とりあえずx, y, zそれぞれの軸について拡大縮小可能なパーツを作ることはできた。

KSPFieldでVector3型を使う場合、cfgファイルにはカンマ区切りで書けばよい。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
namespace JustFitStructures
{
    public class JustFit : PartModule
    {
        [KSPField(isPersistant = true, guiActiveEditor = true)]
        public Vector3 Size = new Vector3(1, 1, 1);
        [KSPField(isPersistant = true, guiActiveEditor = false)]
        public Vector3 SizeMax = new Vector3(5, 5, 5);
        [KSPField(isPersistant = true, guiActiveEditor = false)]
        public Vector3 SizeMin = new Vector3(1, 1, 1);
        [KSPField(isPersistant = true, guiActiveEditor = false)]
        public Vector3 SizeStep = new Vector3(1, 1, 1);
        [KSPField(isPersistant = true, guiActiveEditor = false)]
        public string FitY = "Independent";
        [KSPField(isPersistant = true, guiActiveEditor = false)]
        public string FitZ = "Independent";
        public override void OnStart(PartModule.StartState state)
        {
            base.OnStart(state);
            if (FitY == "FollowX" || FitY == "FollowZ")
                Events["IncreaseY"].active = Events["DecreaseY"].active = false;
            if (FitZ == "FollowX" || FitZ == "FollowY")
                Events["IncreaseZ"].active = Events["DecreaseZ"].active = false;
            FitPart();
        }
        [KSPEvent(active = true, guiActiveEditor = true)]
        public void IncreaseX()
        {
            Size.x = Math.Min(SizeMax.x, Size.x + SizeStep.x);
            FitPart();
        }
        [KSPEvent(active = true, guiActiveEditor = true)]
        public void DecreaseX()
        {
            Size.x = Math.Max(SizeMin.x, Size.x - SizeStep.x);
            FitPart();
        }
        [KSPEvent(active = true, guiActiveEditor = true)]
        public void IncreaseY()
        {
            Size.y = Math.Min(SizeMax.y, Size.y + SizeStep.y);
            FitPart();
        }
        [KSPEvent(active = true, guiActiveEditor = true)]
        public void DecreaseY()
        {
            Size.y = Math.Max(SizeMin.y, Size.y - SizeStep.y);
            FitPart();
        }
        [KSPEvent(active = true, guiActiveEditor = true)]
        public void IncreaseZ()
        {
            Size.z = Math.Min(SizeMax.z, Size.z + SizeStep.z);
            FitPart();
        }
        [KSPEvent(active = true, guiActiveEditor = true)]
        public void DecreaseZ()
        {
            Size.z = Math.Max(SizeMin.z, Size.z - SizeStep.z);
            FitPart();
        }
        private void FitPart()
        {
            transform.localScale = Size;
        }
    }
}
現状の問題点。
  • サイズ変更をしたときに親パーツの位置が変わらない
  • 子パーツを付けた状態でサイズ変更すると、子パーツのサイズも変更される
  • サイズ変更してもコストや質量が変わらない
PartModule直下のtransform.localScaleを書き換えるだけではダメだ。

Screenshot8

« Kerbal Space ProgramのパーツMODを作る 7 | トップページ | Kerbal Space Programで気に入ったMOD »

コメント

はじめまして
KSPでMOD制作に挑戦しているので
ここの『パーツMODを作る』を読んでお勉強させて頂きます(o_ _)o
日本語でKSP MOD制作でC#まで紹介してるサイトが見当たらないので本当に助かります
ありがとうございます(`・ω・´)

コメントありがとうございます。

Kerbal Space Programのシステムは良くできており
.cfgファイルを書き換えるだけでもかなりのことができるのですが、
C#による開発までできるといいですね。

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1499066/60791379

この記事へのトラックバック一覧です: Kerbal Space ProgramのパーツMODを作る 8:

« Kerbal Space ProgramのパーツMODを作る 7 | トップページ | Kerbal Space Programで気に入ったMOD »