三流作家の雑記帳

三流作家、葉山洋三が日々感じたことを記すブログ

餅は餅屋

本日、山仲間であり、プログラマーでもある友人が訪ねてきました。
彼の目的は私に仕事で使うオーディオインターフェースについて教えて欲しいというものです。
私はDTMもやっているので、若干その辺りの知識があります。

で、オーディオインターフェースの説明なんていっても大したことはないので、2時間程度で終わりました。
勘のいい方は気が付いたでしょうか?
そう、彼の特技はプログラミングなのです!

眠っていたUnityを起動し、教えを乞うことに。
いやあ、さすがに仕事でバリバリやっている人間は凄いです。
C#は使ったことがなく、Unityも初見でしたが、ガリガリとコードを打ち込み、少し動くように。
主にフラグ周りの基礎を実装してもらいました。

彼の帰宅後、私が2時間ほどかけて修正し、遂に!
girl_walk.png

まだ調整が微妙なので動画にはしていませんが、動いております!
水をやって回転、歩いて回転、また水をやって回転……と木の間を往復するだけですが、コードは100行近くになりましたw
多分、物凄く効率の悪いコードになっている気がします。
長いけど、一応貼ってみますね。

using UnityEngine;
using System.Collections;

public class Town_Girl : MonoBehaviour {

public const int state_water_drop = 0x0000;
public const int state_rotate = 0x0001;
public const int state_rotate2 = 0x0002;
public const int state_rotate3 = 0x0003;
public const int state_rotate4 = 0x0004;
public const int state_translate = 0x0005;
public const int state_translate2 = 0x0006;


public static int[] town_girl_state = new int[2];

// Use this for initialization
void Start () {
town_girl_state[0] = state_rotate;
town_girl_state[1] = 0;
}

// Update is called once per frame
void Update () {
if (town_girl_state[0] == state_rotate) {
if (town_girl_state[1] == 0){
animation.Play("Girl_Water_drop");
town_girl_state[1] = 1;
}
if (!animation.IsPlaying("Girl_Water_drop")){
town_girl_state[1]++;
if(town_girl_state[1] <= 60){
transform.Rotate(0,-1.5f,0);
if(town_girl_state[1] == 60){
town_girl_state[0] = state_translate;
town_girl_state[1] = 0;
}
}
}
}
if (town_girl_state[0] == state_translate) {
town_girl_state[1]++;
if(town_girl_state[1] <= 310){
animation.Play("Girl_Walk");
transform.Translate(0, 0, 0.5f);
if(town_girl_state[1] == 310){
town_girl_state[0] = state_rotate2;
town_girl_state[1] = 0;
}
}
}
if (town_girl_state[0] == state_rotate2) {
town_girl_state[1]++;
if(town_girl_state[1] <= 60){
transform.Rotate(0,1.5f,0);
if(town_girl_state[1] == 60){
town_girl_state[0] = state_rotate3;
town_girl_state[1] = 0;
}
}
}
if (town_girl_state[0] == state_rotate3) {
if (town_girl_state[1] == 0)
{
animation.Play("Girl_Water_drop");
town_girl_state[1] = 1;
}
if (!animation.IsPlaying("Girl_Water_drop")){
town_girl_state[1]++;
if(town_girl_state[1] <= 60){
transform.Rotate(0,1.5f,0);
if(town_girl_state[1] == 60){
town_girl_state[0] = state_translate2;
town_girl_state[1] = 0;
}
}
}
}
if (town_girl_state[0] == state_translate2) {
town_girl_state[1]++;
if(town_girl_state[1] <= 310){
animation.Play("Girl_Walk");
transform.Translate(0, 0, 0.5f);
if(town_girl_state[1] == 310){
town_girl_state[0] = state_rotate4;
town_girl_state[1] = 0;
}
}
}
if (town_girl_state[0] == state_rotate4) {
town_girl_state[1]++;
if(town_girl_state[1] <= 60){
transform.Rotate(0,-1.5f,0);
if(town_girl_state[1] == 60){
town_girl_state[0] = state_rotate;
town_girl_state[1] = 0;
}
}
}
}
}

transform.Rotateがある箇所で回転、transform.Translateで前進を行っています。
ポイントはif (!animation.IsPlaying("Girl_Water_drop")) ですね。
これはジョウロで水をやるアニメーションを終わったら、その中の処理を行うというもので、これがないとアニメーションの途中で回転とか始まってしまいます。

とりあえず、これが理解出来ればRPGのキャラを決まった動作で動かすというのは可能になるはず。
Unityについて書かれているブログに大変助けられているので、同志の方の参考になれば幸いです。
相当にマニアックな内容なので、Blender目当ての方はスルー推奨です。
知恵熱が出るかと。実際、私も頭痛がしました。

戦闘シーンとかの実装は私の技量では不可能な気がしていますが、また何か進展がありましたら、ご紹介しますね。
あと、今回のスクリプトなら私も大体理解出来たので、分からない箇所がありましたら質問して下さい。
こうすればもっとスムーズになる等の意見も、大歓迎します!
  1. 2014/01/12(日) 21:23:06|
  2. Unity
  3. | トラックバック:0
  4. | コメント:0
<<プログラミング | ホーム | M870をカスタマイズ>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://8ayama.blog.fc2.com/tb.php/356-271c30ed
この記事にトラックバックする(FC2ブログユーザー)

小説試し読み

販売している小説の冒頭部分です。PDFが開きます。

アルとフィルの大冒険 ~魔法の迷宮~
天賦の才

ご購入はこちらからどうぞ

アルとフィルの大冒険 ~魔法の迷宮~
天賦の才

Blender講座

選択すると、その記事へジャンプ出来ます。

Unity講座

最新記事

広告

月別アーカイブ

カテゴリ

未分類 (0)
雑記 (176)
小説 (29)
時事 (57)
ゲーム (72)
Blender (92)
競馬 (74)
映画 (34)
車/バイク (292)
狩猟/射撃 (92)
Unity (72)

検索フォーム

リンク

このブログをリンクに追加する