Programming」カテゴリーアーカイブ

プログラミング全般に関するカテゴリーです。

C#のExtension Method

C#ではExtension Methodという便利な仕組みがあるそうです。

使い方

using System;

public static class Extension
{
  public enum Fruit { apple, orange }

  public static string function(this Fruit fruit)
  {
    return fruit == Fruit.apple ? "apple" : "orange";
  }
}

public static class Example
{
  static void Main()
  {
    string fruit = Extension.function(Extension.Fruit.apple);
    Console.WriteLine("fruit: " + fruit);
  }
}

実行結果

fruit: apple

テキトウ過ぎるexampleですが、thisキーワードを使ってこんな感じで書けるみたいです。enum以外にもclass/struct/primitive valueなどにも使えるそうなので、便利そうな気がします。

リンク

How to: Implement and Call a Custom Extension Method (C# Programming Guide) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/how-to-implement-and-call-a-custom-extension-method

ファーシェーダー

ファーシェーダーを試してみました。

fur

参考にさせてもらったのはこちらのサイトです。

[HoloLens]ファーシェーダを試してみた話 | HI-ROM.COM BLOG
http://hi-rom.com/blog/archives/2020

[Unity] ファーシェーダを移植してみた – Qiita
https://qiita.com/edo_m18/items/75db04f117355adcadbb

[Unity] AssetStoreのファーシェーダをupdateしたので分かったことを書いてみる – Qiita
https://qiita.com/edo_m18/items/21d3b37596da3fd4b32b

ジオメトリーシェーダーを使う方法もあるみたいです。

UnityでマウスがUI上にあるかどうかチェックするスクリプト

Unityでは、Physics.Raycastを使ってマウスがオブジェクト上にあるかどうか調べることができます。

Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit)) {
  // 処理したい内容
}

ただし、上のスクリプトはUIでは使えません。

マウスがUIのオブジェクト上にあるかどうか調べたい場合はUnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObjectを使うと良いそうです。

using UnityEngine.EventSystems;
if (EventSystem.current.IsPointerOverGameObject ()) {
  // 処理したい内容
}

リンク

Unity – スクリプトリファレンス: EventSystems.EventSystem.IsPointerOverGameObject
https://docs.unity3d.com/jp/current/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html