Ich versuche, mein erstes ernsthaftes Projekt in Unity 2D (einem Plattformspiel im Stil von Hollow Knight) zu entwickeln und habe ein Problem mit CinemaChine in Unity 6.3. Das Problem ist, dass ich vier virtuelle Kameras und einen CameraManager mit Confider2D habe. Abgesehen davon, dass die Szenenränder nicht gut berücksichtigt werden (sogar die Wände mit dem 2D-Box-Collider verschmelzen), sind die Kameras widersprüchlich, weil zwei der vier verwendet werden, wenn der Spieler nach links oder rechts geht, und die restlichen zwei, wenn der Spieler fällt. Ich wollte einen fließenden Kameraübergang, aber wahrscheinlich aufgrund der Logik im Kameracode sind sie widersprüchlich. Die linke Kamera startet als wahr in der Szene, und wenn ich aus einer stationären Position springe, aktiviert sie die FallingRight-Kamera, was eigentlich nicht passieren sollte. Ich lasse den Player- und Kameracode hier, damit Sie ihn analysieren können.
using UnityEngine;
namespace Unity.Cinemachine.Samples
{
///
/// This class inherits CinemachineCameraManagerBase, which is a convenient base class for
/// making complex cameras by transitioning between a number of worker cameras, depending
/// on some arbitrary game state.
///
/// In this case, we monitor the player's facing direction and motion, and select a camera
/// with the appropriate settings. CinemachineCameraManagerBase takes care of handling the blends.
///
[ExecuteAlways]
public class PlatformerCamera2D : CinemachineCameraManagerBase
{
PlayerController2D playerController;
public enum PlayerState
{
Right,
Left,
FallingRight,
FallingLeft
}
[Space]
public float FallingSpeedThreshold = 0.1f;
// The cameras in these fields must be GameObject children of the manager camera.
[Header("State Cameras")]
[ChildCameraProperty] public CinemachineVirtualCameraBase RightCamera;
[ChildCameraProperty] public CinemachineVirtualCameraBase LeftCamera;
[ChildCameraProperty] public CinemachineVirtualCameraBase FallingRightCamera;
[ChildCameraProperty] public CinemachineVirtualCameraBase FallingLeftCamera;
Rigidbody2D m_Player;
PlayerState _currentState = PlayerState.Right;
protected override void OnEnable()
{
base.OnEnable();
var target = DefaultTarget.Enabled ? DefaultTarget.Target.TrackingTarget : null;
if (target != null)
m_Player = target.GetComponent();
playerController = target.GetComponent();
}
PlayerState GetPlayerState()
{
if (m_Player == null || playerController == null)
return _currentState;
bool isLeft = playerController.IsFacingRight == false;
bool isFalling =
!playerController.IsGrounded &&
m_Player.linearVelocity.y < -FallingSpeedThreshold;
PlayerState newState;
if (isFalling)
newState = isLeft ? PlayerState.FallingLeft : PlayerState.FallingRight;
else
newState = isLeft ? PlayerState.Left : PlayerState.Right;
_currentState = newState;
return _currentState;
}
///
/// Choose the appropriate child camera depending on player state.
///
protected override CinemachineVirtualCameraBase ChooseCurrentCamera(Vector3 worldUp, float deltaTime)
{
return GetPlayerState() switch
{
PlayerState.Left => LeftCamera,
PlayerState.FallingRight => FallingRightCamera,
PlayerState.FallingLeft => FallingLeftCamera,
_ => RightCamera,
};
}
}
}
Ich versuche, mein erstes ernsthaftes Projekt in Unity 2D (einem Plattformspiel im Stil von Hollow Knight) zu entwickeln und habe ein [url=viewtopic.php?t=26065]Problem[/url] mit CinemaChine in Unity 6.3. Das [url=viewtopic.php?t=26065]Problem[/url] ist, dass ich vier virtuelle Kameras und einen CameraManager mit Confider2D habe. Abgesehen davon, dass die Szenenränder nicht gut berücksichtigt werden (sogar die Wände mit dem 2D-Box-Collider verschmelzen), sind die Kameras widersprüchlich, weil zwei der vier verwendet werden, wenn der Spieler nach links oder rechts geht, und die restlichen zwei, wenn der Spieler fällt. Ich wollte einen fließenden Kameraübergang, aber wahrscheinlich aufgrund der Logik im Kameracode sind sie widersprüchlich. Die linke Kamera startet als wahr in der Szene, und wenn ich aus einer stationären Position springe, aktiviert sie die FallingRight-Kamera, was eigentlich nicht passieren sollte. Ich lasse den Player- und Kameracode hier, damit Sie ihn analysieren können. [code]using UnityEngine; using UnityEngine.InputSystem;
public class PlayerController2D : MonoBehaviour { [Header("Movement")] public float speed = 8f; public float jumpForce = 12f;
[Header("Ground Check")] public Transform groundCheck; public float groundRadius = 0.25f; public LayerMask groundLayer;
[Header("Gravity")] public float fallGravityMultiplier = 2.5f; public float lowJumpMultiplier = 2f;
[Header("Wall Check")] public Transform wallCheckLeft; public Transform wallCheckRight; public float wallCheckRadius = 0.2f;
public void OnMove(InputAction.CallbackContext context) { moveInput = context.ReadValue().x; }
public void OnJump(InputAction.CallbackContext context) { // Pressed the button if (context.performed && isGrounded) { rb.linearVelocity = new Vector2(rb.linearVelocity.x, jumpForce); }
// drop the button (jump cut) if (context.canceled && rb.linearVelocity.y > 0) { rb.linearVelocity = new Vector2( rb.linearVelocity.x, rb.linearVelocity.y * 0.5f ); } }
void CheckWall() { bool left = Physics2D.OverlapCircle( wallCheckLeft.position,wallCheckRadius,groundLayer ); bool right = Physics2D.OverlapCircle( wallCheckRight.position,wallCheckRadius,groundLayer );
if(left) { isTouchingWall = true; wallDirection = -1; } else if(right) { isTouchingWall = true; wallDirection = 1; } else { isTouchingWall = false; wallDirection = 0; } } void HandleFlip() { if (IsFacingRight && moveInput< 0) { Flip(); } else if (!IsFacingRight && moveInput > 0) { Flip(); } } void Flip() { IsFacingRight = !IsFacingRight; Vector3 scaler = transform.localScale; scaler.x *= -1; transform.localScale = scaler; } } [/code] [code]using UnityEngine; namespace Unity.Cinemachine.Samples { /// /// This class inherits CinemachineCameraManagerBase, which is a convenient base class for /// making complex cameras by transitioning between a number of worker cameras, depending /// on some arbitrary game state. /// /// In this case, we monitor the player's facing direction and motion, and select a camera /// with the appropriate settings. CinemachineCameraManagerBase takes care of handling the blends. /// [ExecuteAlways] public class PlatformerCamera2D : CinemachineCameraManagerBase { PlayerController2D playerController; public enum PlayerState { Right, Left, FallingRight, FallingLeft }
[Space] public float FallingSpeedThreshold = 0.1f;
// The cameras in these fields must be GameObject children of the manager camera. [Header("State Cameras")] [ChildCameraProperty] public CinemachineVirtualCameraBase RightCamera; [ChildCameraProperty] public CinemachineVirtualCameraBase LeftCamera; [ChildCameraProperty] public CinemachineVirtualCameraBase FallingRightCamera; [ChildCameraProperty] public CinemachineVirtualCameraBase FallingLeftCamera;
Ich versuche, mein erstes ernsthaftes Projekt in Unity 2D (einem Plattformspiel im Stil von Hollow Knight) zu entwickeln und habe ein Problem mit CinemaChine in Unity 6.3. Das Problem ist, dass ich...
Ich bin also neu bei Unity und habe diesen Code in meinem Player-Objekt:
Ich bemerke, dass sich die Bewegung meines Charakters umkehrt, während sich meine Kamera dreht. Ich denke, dass es XYZ von der...
Ich verwende vSCode für Windows, um Python auf einem Remote -Linux -Server zu entwickeln. Irgendwann in den letzten Wochen muss ich unerwartet getrennt haben, während meine virtuelle...
Ich bin sehr verblüfft und ist ein wenig besorgt, um das folgende Verhalten zu entdecken, bei dem ich zwei Tests und zwei Vorrichtungen habe. import pytest
Ich versuche, ein Pong-Spiel für zwei Personen zu erstellen, das von zwei verschiedenen Clients (möglicherweise auf zwei verschiedenen Computern) über eine TCP-Verbindung (Sockets) gespielt werden...