【C#】AtCoder Beginner Contest180 A - box をC#で解いてみた【AtCoder】

※この解答は個人の見解の為、参考程度にご覧ください。



問題:N個のボールが入っていた箱からA個のボールを取り出し、新たにB個のボールを入れました。今、箱にはボールが何個入っていますか?


〇解答例

static void Main(string[] args){

var input = Console.ReadLine().Replace(" ", ",").Split(",");

var BallValue = int.Parse(input[0]);
var Ball_out = int.Parse(input[1]);
var Ball_in = int.Parse(input[2]);
 
var result = BallValue - Ball_out + Ball_in;

Console.WriteLine(result);

}

【Unity】UIを完全に理解した件

今作っているゲームはRPGなのだが、戦闘画面のUIを作るのに非常に苦労している。

何せネットに具体的な資料があまり無いし、あっても英語ばっかりなのでオムナイトと同程度の知能では理解するのもままならない。



色々調べてみたら、RPGバトルっていうアセットが参考になるという情報を聞きつけたので早速ダウンロードしてみた。


f:id:tomdokkk:20200902223820p:plain
こんなやつ。


中を見てみると…おやおやふむふむ…なるほど…わからん!www

頑張って読み解いていった結果、UIのオブジェクトはケーキに例えると…

 〇背景(スポンジ)
 〇ウィンドウ(クリーム)
 〇テキストやアイコン(イチゴやチョコレートのようなトッピング)

みたいになっており、XMLのような木構造になっていることがわかった。

例えばテキストを変更したいときは、ルートとなるスポンジにアクセスし、そこから木構造を辿っていってテキストにアクセスすればいいというわけだ。



そこで思いついたのが、「クリームを消したらトッピングも一緒に消えるのか?」という疑問。要はウィンドウを消したらそれに紐づいてるテキスト等も一緒に消えてしまうのか?ということである。



早速、Enterキーを押したら指定したウィンドウが消え、もう一つのウィンドウのテキストを変更するというスクリプトを書いて実行してみた。

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

public class TestScript : MonoBehaviour
{

    GameObject Canvas;
    Text MainWindowText;

    void Start()
    {
        Canvas = GameObject.Find("Canvas");
        MainWindowText = GameObject.Find("Text_MainWindow").GetComponent<Text>();

    }

    [System.Obsolete]
    void Update()
    {
        if(Input.GetKey(KeyCode.Return))
        {
            Transform transform = Canvas.transform.Find("Canvas_CharaData");

            if(transform.gameObject.active == true)
            {
                transform.gameObject.SetActive(false);
                MainWindowText.text = "消える";
                return;
            }

            transform.gameObject.SetActive(true);
            MainWindowText.text = "現れる";

        }
    }
}

結果↓



うおおおおおうまくいった!!!
もうこれでなにもこわくない。
俺は完全にUIを理解した!!!!11111

【C#】LINQ to XML 消すだけでもなかなか苦労した話

XMLファイルの操作の中で、要素の削除にわりと手間取った。

試行錯誤した結果、以下のコードでやりたいことが実現した。


〇削除したいXML

<?xml version="1.0" encoding="utf-8" ?>
<Root>
  <TestElement>TEST</TestElement>
</Root>

〇プログラム

    public static void DeleteElement()
    {        
        XDocument xmlDoc = XDocument.Load(”File”);

        var query = from y in xmlDoc.Descendants("Root")
                         select y;


        query2.Elements("TestElement").Remove();     ///☆
        xmlDoc.Save(”File");
    }

〇結果

<?xml version="1.0" encoding="utf-8" ?>
<Root></Root>


☆印のquery2.Elementsがミソで、Rootの中の要素を全て読み込んでいる。
その要素たちをRemove()で消している。
いままでクエリをforeachで回し、要素を順番に消そうとしていたがなぜか途中でエラーを吐いて止まるので困っていた。
ようやく有効な手立てが見つかってよかったのだ。

【Unity】Colliderで悩んだ話

UnityのColliderをどう設定してもキャラが当たり判定を貫通して壁抜けしてしまっていた。

 

どうしたもんかと悩んだ末、以下のやり方に変えた。

 

  1. TilemapにTilemap Collider 2Dを設定するのではなく、Edge Collider 2Dに変えた。
  2. それでもまだ貫通するので、Edge Radiusの値を変えてColliderを太くした。

    f:id:tomdokkk:20200901233617j:plain

    これが

    f:id:tomdokkk:20200901233624j:plain

    こう!

    f:id:tomdokkk:20200901233646p:plain

    ここを設定

    それでもある程度の移動速度があるとやっぱり貫通するので抑え目に設定。
    Colliderをもっと太くすれば大丈夫かもしれないけど。