C Sharp – die neusten Beiträge

Unity Raycast / Gebäude anklicken?

Ich versuche aktuell ein Panel zu öffnen, wenn man auf ein platziertes Gebäude klickt (2D in Grid System)Das hier ist der kritische Code Ausschnitt:

void Update() {
  if (!Input.GetMouseButtonDown(0)) return;
  //if (EventSystem.current != null && EventSystem.current.IsPointerOverGameObject()) return;

  Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
  Vector2 point2D = new Vector2(worldPos.x, worldPos.y);

  RaycastHit2D hit = Physics2D.Raycast(point2D, Vector2.zero, 0f);

  Debug.Log($"Klick bei {point2D}, Treffer: {(hit.collider != null ? hit.collider.name : "kein Treffer")}");
  Debug.DrawLine(worldPos + Vector3.left * 0.2f, worldPos + Vector3.right * 0.2f, Color.green, 1f);
  Debug.DrawLine(worldPos + Vector3.up * 0.2f, worldPos + Vector3.down * 0.2f, Color.green, 1f);

  if (hit.collider != null) {
    var b = hit.collider.GetComponent<Building>();
    if (b != null) {
      Debug.Log($"Gebäude getroffen: {b.name}");
      StartCoroutine(OpenMenuDelayed(b));
      return;
    }
  }

  UIManager.Instance.ShowBuildingMenu(null);
} 

Die Kommentierte Zeile (die dritte) ist das Problem, sobald sie reingenommen wird kann ich das Gebäude nicht mehr anklicken (andere Tiles schon). Ich debugge jetzt schon etwas länger, weiß aber nicht wie ich das lösen soll (bin noch etwas neu bei Unity). Das Problem ist, dass ohne die diese Zeile es möglich ist durch UI Fragmente zu klicken, wie Buttons oder Menüs.

C Sharp, Unity

ChatGPT sieht ein Problem in meiner Method und ich verstehe nicht wirklich wo das Problem liegt (C# Programmieren)?

Ich lerne C# und habe ein kleines Programm entwickelt, In dem man Random eine Zahl rollt, die Größer sein soll als ein Random gerolltes Ziel. Ist die eigene Zahl kleiner als das Ziel hat man verloren, ist sie größer hat man gewonnen. Nun habe ich das Programm einmal ChatGPT überblicken lassen, und es sieht ein Problem in meiner StartReset variable in meiner ShouldPlay Methode und ich habe nicht ganz verstanden worin das Problem liegt, da mein Programm auch so ohne Probleme läuft und der Compiler weder Fehler, noch Warnungen anzeigt. Vielleicht kann mir ein Mensch besser erklären, worin ChatGPT das Problem sieht?

```

Random random = new Random();
Console.WriteLine("Would you like to play? Y/N)");
if (ShouldPlay(true))
{
  PlayGame();
}
void PlayGame()
{
  var play = true;
  while (play)
  {
    var target = random.Next(0, 6);
    var roll = random.Next(0, 7);
    Console.WriteLine($"Roll a number greater than {target} to win!");
    Console.WriteLine($"You rolled a {roll}");
    Console.WriteLine(WinOrLose(roll, target));
    Console.WriteLine("\nPlay again? (Y/N)");
    play = ShouldPlay(false);
  }
}
bool ShouldPlay(bool startReset)
{
  while (true)
  {
    Console.WriteLine("Please enter Y or N");
    string? userInput = Console.ReadLine();
    string? loweredInput = userInput?.ToLower();
    if (loweredInput == "y")
    {
      return true;
    }
    else if (loweredInput == "n")
    {
      return false;
    }
  }  
}
string WinOrLose(int roll, int target)
{
  if (roll > target)
  {
    return "You won!";
  }
  else
  {
    return "You lose!";
  }
}

```

programmieren, C Sharp, Code, Programmiersprache, Visual Studio, Algorithmus

WPF: DataGridTextColumn basierend auf ViewModel-Eigenschaft ausblenden – wie geht das?

Hallo zusammen,

ich arbeite an einer WPF-Anwendung und habe ein DataGrid, in dem ich eine bestimmte Spalte ausblenden möchte, wenn eine boolesche Eigenschaft (IstPM) im ViewModel true ist.

<DataGridTextColumn Header="Länge"
    Binding="{Binding Laenge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat=N1}"
    Visibility="{Binding IstNichtPM, Converter={StaticResource booleanToVisibilityConverter}}"
    Width="70"/>

Dabei ist IstNichtPM eine bool-Eigenschaft im ViewModel, die true sein sollte, wenn die Spalte sichtbar sein soll.

Ich verwende einen BooleanToVisibilityConverter, der true zu Visible und false zu Collapsed konvertiert.

Problem:

Die Spalte bleibt immer sichtbar oder wird nicht korrekt aktualisiert.

Ich habe auch versucht, es in Code-Behind zu ändern, aber das geht auch nicht, da man kein x-Name geben kann

„Der Wert „colLaenge“ des Name-Attributs kann für das Element „DataGridTextColumn“ nicht festgelegt werden.“

die IstPM und istNichtPM funktioniert aufjedenfall, da ich damit auch Tabs ausgeblendet habe in der Page. Das hat ohne Probleme funktioniert

=>

ausblenden bei IstNichtPM

<TabItem Header="Allgemein" Visibility="{Binding IstNichtPM, Converter={StaticResource booleanToVisibilityConverter}}">

einblenden bei IstPM

<TabItem Header="Allgemein" Visibility="{Binding IstPM, Converter={StaticResource booleanToVisibilityConverter}}">

beim DGV bin ich so langsam echt am verzweifeln.

Hat jemand eine funktionierende Lösung, wie ich eine DataGridTextColumn in WPF dynamisch ausblenden kann?

Bin für jeden Tipp dankbar!

C Sharp, Windows Presentation Foundation

Warum endet die Schleife nicht?

Hallo an Alle!

Ich versuch mich im Moment in Unity da ich großes Interesse am Spiele Entwickeln habe.

Mein Unity Editor hängt sich die ganze Zeit auf, wenn ich eine while-Schleife einbaue. Ich vermute mal, dass die while-Schleife nie endet und sich daher Unity aufhängt.

Was denkt ihr?

Hier noch mein Script-Code:

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UIElements;


public class Movement : MonoBehaviour
{
    public LayerMask ground;
    public float jumpforce = 8f;
    public float accel = 8f;
    public float maxSpeed;
    public bool isGroundTouched = false;
    public Rigidbody2D rb;


    public void Update()
    {


        if (GetComponent<Collider2D>().IsTouchingLayers(ground))
        {
            isGroundTouched = true;
        }
        else{


            isGroundTouched = false;
        }


        if (Input.GetKeyDown(KeyCode.R))
        {
            Jump();
        }


        if (Input.GetKey(KeyCode.D))
        {
            Move(accel);
        }
        else
        {
            while (rb.linearVelocity.magnitude > 0)
            {
                Move(-accel);
            }
        }
        
        if (Input.GetKey(KeyCode.A))
        {
            Move(-accel);
        }
        else
        {
            while (rb.linearVelocity.magnitude > 0)
            {
                Move(accel);
            }
        }
    }
    void FixedUpdate()
    {
        if (rb.linearVelocity.magnitude > maxSpeed)
        {
            rb.linearVelocity = rb.linearVelocity.normalized * maxSpeed;
        }
    }
    public void Move(float direction)
    {
            rb.AddForce(new Vector2(direction, 0));
    }
    public void Jump()
    {
        if (isGroundTouched)
        {
            rb.AddForce(new Vector2(rb.linearVelocity.x, jumpforce));
        }
    }
}

PS. Ich habe nicht viel Erfahrung mit C# doch mit ein paar anderen Programmiersprachen schon. Vor allem mit Objekt-Orientierten habe ich nicht viel Erfahrung.

C Sharp, Unity2D

Frage zu c# bzw. #script?

Kennt sich jemand mit #script aus?

Ich habe folgendes Skript:

 "Script/DeviceTemplate": {
        "Content": "{{var assignments = []}}
{{var nodeId = ServiceTask.DeviceInstallationServiceTask.Details.NodeId}}
{{#each groupName in Typicals.DeviceTypes.xxx.DeviceTypicals[ServiceTask.DeviceInstallationServiceTask.Details.Typical.Name].SignalGroups}}
{{var index = 0}}
{{#each signal in Typicals.DeviceTypes.xxx.SignalGroups[groupName].SignalList}}
{{var baseComponent = ServiceTask.DeviceInstallationServiceTask.Details.Typical.SignalAssignments[groupName].BaseComponent}}
{{var _ = assignments.push({
    "assignmentIndex": index,
	"deviceId": "" + nodeId,
    "sparkplugName": baseComponent + signal.MetricBaseName
})}}
{{index = index + 1}}
{{/each}}
{{/each}}
{{ {
  "system": {
    "deviceName": nodeId
  },
  "apps": [
    {
      "appName": "SPARKPLUG",
      "appId": 12345,
      "settings": {
                "clientId": nodeId,
                "keepAliveInterval": 120,
                "publishInterval": 120,
                "startupDelay": 50
      },	 
      "sparkplugSettings": {
            "mqttTopic": "spBv1.0",
            "sparkplugTopic": "NTN/{MessageType}/" + nodeId
      },
      "assignments": assignments
    }
  ]
} |> json}}"
      }

Dieses hat zwei Schleifen, in der inneren Schleife soll die Variable index um 1 erhöht werden. Alles funktioniert, nur bekomme ich in der Ausgabe für jeden Aufruf von

index = index + 1

ebenfalls eine Ausgabe:

     1
     2
     3
     4
     5
     6
     7
     8
     9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
   {"system":{"deviceName......

Wie kann ich die Ausgabe von 1 bis 23 unterdrücken?

Software, IT, programmieren, C Sharp, Code, Programmiersprache, Script, Softwareentwicklung

Meistgelesene Beiträge zum Thema C Sharp