@Maxxxior:
C++ jest wszechobecny w silnikach gier:
unreal, cryengine (Amazon Lumberyard?), godot, source (1 i 2) i 90% innych;
Codebase unity to głównie C++.
Ale robienie gier nie ma nic wspólnego z C++sem i nie powinno!
W grach komputer obciąża grafika i fizyka, dlatego logikę klepie się nie w "super wydajnych językach", lecz w językach, z którymi programista jest "super wydajny".
Po prostu nie ma się żadnych benefitów z katowania się C++sem podczas tworzenia gier. Liczy się czas tworzenia, a nie ugrana klatka co 20ms.
A teraz szybkie stronnicze porównanie przykładów "PlayerInput":
https://docs.unrealengine.com/latest/INT/Programming/Tutorials/PlayerInput/1/index.html
Unreal4:
myPawn.h
:
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "GameFramework/Pawn.h"
#include "MyPawn.generated.h"
UCLASS()
class HOWTO_PLAYERINPUT_API AMyPawn : public APawn
{
GENERATED_BODY()
public:
// Sets default values
AMyPawn();
// Called when the game starts or when spawned
virtual void BeginPlay() override;
// Called every frame
virtual void Tick( float DeltaSeconds ) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;
UPROPERTY(EditAnywhere)
USceneComponent* OurVisibleComponent;
};
myPawn.cpp
:
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "HowTo_PlayerInput.h"
#include "MyPawn.h"
// Sets default values
AMyPawn::AMyPawn()
{
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
// Set this pawn to be controlled by the lowest-numbered player
AutoPossessPlayer = EAutoReceiveInput::Player0;
// Create a dummy root component we can attach things to.
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
// Create a camera and a visible object
UCameraComponent* OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("OurCamera"));
OurVisibleComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("OurVisibleComponent"));
// Attach our camera and visible object to our root component. Offset and rotate the camera.
OurCamera->AttachTo(RootComponent);
OurCamera->SetRelativeLocation(FVector(-250.0f, 0.0f, 250.0f));
OurCamera->SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f));
OurVisibleComponent->AttachTo(RootComponent);
}
// Called when the game starts or when spawned
void AMyPawn::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AMyPawn::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
}
// Called to bind functionality to input
void AMyPawn::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
Super::SetupPlayerInputComponent(InputComponent);
}
http://docs.unity3d.com/ScriptReference/CharacterController.Move.html
Unity:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;
void Update() {
CharacterController controller = GetComponent<CharacterController>();
if (controller.isGrounded) {
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump"))
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
}
- Ograniczanie się do jednej platformy "z C#" i unity?
Której platformy Ci brakuje w dostępnych*?
-
- iOS, Android, Windows Phone, Tizen, Windows, Windows Store Apps, Mac, Linux/Steam OS, WebGL, PlayStation 4, PlayStation Vita, Xbox One, Xbox 360, Wii U, Nitendo 3DS, Oculus Rift, Google Cardboard, Steam VR, PlayStation VR, Gear VR, Microsoft Hololens, Android TV, Samsung SMART TV, tvOS
źródło: https://unity3d.com/unity/multiplatform