Gamestudio Links
Zorro Links
Newest Posts
Trading Journey
by howardR. 04/28/24 09:55
Zorro Trader GPT
by TipmyPip. 04/27/24 13:50
Help with plotting multiple ZigZag
by M_D. 04/26/24 20:03
Data from CSV not parsed correctly
by jcl. 04/26/24 11:18
M1 Oversampling
by jcl. 04/26/24 11:12
Why Zorro supports up to 72 cores?
by jcl. 04/26/24 11:09
Eigenwerbung
by jcl. 04/26/24 11:08
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (1 invisible), 509 guests, and 0 spiders.
Key: Admin, Global Mod, Mod
Newest Members
wandaluciaia, Mega_Rod, EternallyCurious, howardR, 11honza11
19049 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 7 of 20 1 2 5 6 7 8 9 19 20
Re: unreal engine 4 [Re: AlbertoT] #440822
05/03/14 14:03
05/03/14 14:03
Joined: Nov 2008
Posts: 946
T
the_clown Offline
User
the_clown  Offline
User
T

Joined: Nov 2008
Posts: 946
I don't really see the connection between the use of pointers and a component based architecture.

Re: unreal engine 4 [Re: AlbertoT] #440823
05/03/14 14:25
05/03/14 14:25
Joined: Mar 2011
Posts: 3,150
Budapest
sivan Offline
Expert
sivan  Offline
Expert

Joined: Mar 2011
Posts: 3,150
Budapest
if interested in some actual code view, the pre-made 3rd person template character class looks like this (nothing sexy, the capital lettered U... thingies are engine macros you have to know, only the first few lines are auto generated when adding a new class via the editor wizard):
.h
Code:
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#pragma once

#include "GameFramework/SpringArmComponent.h"
#include "thirdpersontestCharacter.generated.h"

UCLASS(config=Game)
class AthirdpersontestCharacter : public ACharacter
{
	GENERATED_UCLASS_BODY()

	/** Camera boom positioning the camera behind the character */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera)
	TSubobjectPtr<class USpringArmComponent> CameraBoom;

	/** Follow camera */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera)
	TSubobjectPtr<class UCameraComponent> FollowCamera;

	/** Base turn rate, in deg/sec. Other scaling may affect final turn rate. */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera)
	float BaseTurnRate;

	/** Base look up/down rate, in deg/sec. Other scaling may affect final rate. */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera)
	float BaseLookUpRate;

protected:

	/** Called for forwards/backward input */
	void MoveForward(float Value);

	/** Called for side to side input */
	void MoveRight(float Value);

	/** 
	 * Called via input to turn at a given rate. 
	 * @param Rate	This is a normalized rate, i.e. 1.0 means 100% of desired turn rate
	 */
	void TurnAtRate(float Rate);

	/**
	 * Called via input to turn look up/down at a given rate. 
	 * @param Rate	This is a normalized rate, i.e. 1.0 means 100% of desired turn rate
	 */
	void LookUpAtRate(float Rate);

	/** Handler for when a touch input begins. */
	void TouchStarted(ETouchIndex::Type FingerIndex, FVector Location);

protected:
	// APawn interface
	virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) OVERRIDE;
	// End of APawn interface
};



.cpp
Code:
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.

#include "thirdpersontest.h"
#include "thirdpersontestCharacter.h"

//////////////////////////////////////////////////////////////////////////
// AthirdpersontestCharacter

AthirdpersontestCharacter::AthirdpersontestCharacter(const class FPostConstructInitializeProperties& PCIP)
	: Super(PCIP)
{
	// Set size for collision capsule
	CapsuleComponent->InitCapsuleSize(42.f, 96.0f);

	// set our turn rates for input
	BaseTurnRate = 45.f;
	BaseLookUpRate = 45.f;

	// Don't rotate when the controller rotates. Let that just affect the camera.
	bUseControllerRotationPitch = false;
	bUseControllerRotationYaw = false;
	bUseControllerRotationRoll = false;

	// Configure character movement
	CharacterMovement->bOrientRotationToMovement = true; // Character moves in the direction of input...	
	CharacterMovement->RotationRate = FRotator(0.0f, 540.0f, 0.0f); // ...at this rotation rate
	CharacterMovement->JumpZVelocity = 600.f;
	CharacterMovement->AirControl = 0.2f;

	// Create a camera boom (pulls in towards the player if there is a collision)
	CameraBoom = PCIP.CreateDefaultSubobject<USpringArmComponent>(this, TEXT("CameraBoom"));
	CameraBoom->AttachTo(RootComponent);
	CameraBoom->TargetArmLength = 300.0f; // The camera follows at this distance behind the character	
	CameraBoom->bUseControllerViewRotation = true; // Rotate the arm based on the controller

	// Create a follow camera
	FollowCamera = PCIP.CreateDefaultSubobject<UCameraComponent>(this, TEXT("FollowCamera"));
	FollowCamera->AttachTo(CameraBoom, USpringArmComponent::SocketName); // Attach the camera to the end of the boom and let the boom adjust to match the controller orientation
	FollowCamera->bUseControllerViewRotation = false; // Camera does not rotate relative to arm

	// Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character) 
	// are set in the derived blueprint asset named MyCharacter (to avoid direct content references in C++)
}

//////////////////////////////////////////////////////////////////////////
// Input

void AthirdpersontestCharacter::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
	// Set up gameplay key bindings
	check(InputComponent);
	InputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);

	InputComponent->BindAxis("MoveForward", this, &AthirdpersontestCharacter::MoveForward);
	InputComponent->BindAxis("MoveRight", this, &AthirdpersontestCharacter::MoveRight);

	// We have 2 versions of the rotation bindings to handle different kinds of devices differently
	// "turn" handles devices that provide an absolute delta, such as a mouse.
	// "turnrate" is for devices that we choose to treat as a rate of change, such as an analog joystick
	InputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
	InputComponent->BindAxis("TurnRate", this, &AthirdpersontestCharacter::TurnAtRate);
	InputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
	InputComponent->BindAxis("LookUpRate", this, &AthirdpersontestCharacter::LookUpAtRate);

	// handle touch devices
	InputComponent->BindTouch(EInputEvent::IE_Pressed, this, &AthirdpersontestCharacter::TouchStarted);
}


void AthirdpersontestCharacter::TouchStarted(ETouchIndex::Type FingerIndex, FVector Location)
{
	// jump, but only on the first touch
	if (FingerIndex == ETouchIndex::Touch1)
	{
		Jump();
	}
}

void AthirdpersontestCharacter::TurnAtRate(float Rate)
{
	// calculate delta for this frame from the rate information
	AddControllerYawInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds());
}

void AthirdpersontestCharacter::LookUpAtRate(float Rate)
{
	// calculate delta for this frame from the rate information
	AddControllerPitchInput(Rate * BaseLookUpRate * GetWorld()->GetDeltaSeconds());
}

void AthirdpersontestCharacter::MoveForward(float Value)
{
	if ((Controller != NULL) && (Value != 0.0f))
	{
		// find out which way is forward
		const FRotator Rotation = Controller->GetControlRotation();
		const FRotator YawRotation(0, Rotation.Yaw, 0);

		// get forward vector
		const FVector Direction = FRotationMatrix(Rotation).GetUnitAxis(EAxis::X);
		AddMovementInput(Direction, Value);
	}
}

void AthirdpersontestCharacter::MoveRight(float Value)
{
	if ( (Controller != NULL) && (Value != 0.0f) )
	{
		// find out which way is right
		const FRotator Rotation = Controller->GetControlRotation();
		const FRotator YawRotation(0, Rotation.Yaw, 0);
	
		// get right vector 
		const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
		// add movement in that direction
		AddMovementInput(Direction, Value);
	}
}



Free world editor for 3D Gamestudio: MapBuilder Editor
Re: unreal engine 4 [Re: sivan] #440831
05/03/14 19:24
05/03/14 19:24
Joined: Oct 2006
Posts: 1,245
A
AlbertoT Offline
Serious User
AlbertoT  Offline
Serious User
A

Joined: Oct 2006
Posts: 1,245
Thanks

It seems a clean code

Re: unreal engine 4 [Re: the_clown] #440832
05/03/14 19:45
05/03/14 19:45
Joined: Oct 2006
Posts: 1,245
A
AlbertoT Offline
Serious User
AlbertoT  Offline
Serious User
A

Joined: Oct 2006
Posts: 1,245
Originally Posted By: the_clown
I don't really see the connection between the use of pointers and a component based architecture.


suppose you want to move the entity John

In 3dgs you attach an "action" to John
Action contains the c_move function with the parameter "me" which is a pointer to the entity John

In Unity you attach a script to John which contains the function

transform.Traslate()

The pointer to john is implicit

Now suppose that you want to move John only if he is close to Bill

In 3dgs you must have a pointer to Bill in John's action
In Unity you call the pointer :

bill = GameObject.Find("Bill");

in John's script

Dont you see any similarity between 3dgs and Unity ?

Dont you agree that the following code is much cleaner ?

Start()

John = new Actor()
Bill = new Actor()

Update()

if( dist = John.position - Bill.position < = ...) john.Translate();

Re: unreal engine 4 [Re: AlbertoT] #440833
05/03/14 21:06
05/03/14 21:06
Joined: Nov 2008
Posts: 946
T
the_clown Offline
User
the_clown  Offline
User
T

Joined: Nov 2008
Posts: 946
That code may be cleaner as long as you only have Bill and John, but it'll get damn messy as you add functionality.
Encapsulation is always desireable.
What if you have not two but 1000 actors, of different kind, weapons, characters, vehicles, whatever. How would your code look then?

Also, actions in 3dgs can hardy be compared to components. Maybe to a script component, but that's only one flavour of components you could have in a real component based architecture.

Re: unreal engine 4 [Re: AlbertoT] #440834
05/03/14 21:10
05/03/14 21:10
Joined: Jan 2002
Posts: 4,225
Germany / Essen
Uhrwerk Offline
Expert
Uhrwerk  Offline
Expert

Joined: Jan 2002
Posts: 4,225
Germany / Essen
Code:
ENTITY* john = ent_create(SPHERE_MDL,vector(0,0,0),NULL);
ENTITY* bill = ent_create(SPHERE_MDL,vector(10,0,0),NULL);
if (vec_dist(&(john->x),&(bill->x)) > 100)
   bill->x += 10;


You can also create the GameObject.Find function easily in Gamestudio with the help of ent_next. All this has nothind to do with components.


Always learn from history, to be sure you make the same mistakes again...
Re: unreal engine 4 [Re: the_clown] #440836
05/03/14 23:18
05/03/14 23:18
Joined: Oct 2006
Posts: 1,245
A
AlbertoT Offline
Serious User
AlbertoT  Offline
Serious User
A

Joined: Oct 2006
Posts: 1,245
Originally Posted By: the_clown

What if you have not two but 1000 actors, of different kind, weapons, characters, vehicles, whatever. How would your code look then?

Also, actions in 3dgs can hardy be compared to components. Maybe to a script component, but that's only one flavour of components you could have in a real component based architecture.


Yes Unity scripts and 3dgs Actions are similar items
Unity supplies a complete set of prefabricated components while in 3DGS you must create your own components using lose functions

Of course a traditional engine does not come with the class Actor only
It supples different kind of classes
such as the class Vehicle or the class Camera , the class light or the generic class Object for non animated items such as weapons

Re: unreal engine 4 [Re: AlbertoT] #440838
05/04/14 00:27
05/04/14 00:27
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
It's a little off-topic but nevertheless, you don't have to use a single action or a single (global/ non-temporary) pointer to create a fully functional game with Gamestudio. Just use ent_next, ent_for_name("Bill") and so on, whatever you prefer.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: unreal engine 4 [Re: Uhrwerk] #440855
05/04/14 14:08
05/04/14 14:08
Joined: Oct 2006
Posts: 1,245
A
AlbertoT Offline
Serious User
AlbertoT  Offline
Serious User
A

Joined: Oct 2006
Posts: 1,245
Originally Posted By: Uhrwerk
Code:
ENTITY* john = ent_create(SPHERE_MDL,vector(0,0,0),NULL);
ENTITY* bill = ent_create(SPHERE_MDL,vector(10,0,0),NULL);
if (vec_dist(&(john->x),&(bill->x)) > 100)
   bill->x += 10;


You can also create the GameObject.Find function easily in Gamestudio with the help of ent_next. All this has nothind to do with components.


Ok but you can not write, for example
John.Animate()
or
bill.LookAt(john)

On th contrary the class Actor contains everything you would expect from an actor ( a character )
same as he class Camera or light or terrain etc

This makes the code much more intuitive and clean

Anyway superku is right a comparison Unity /3dgs is off topic
My question was

Can anybody describe in few words UE4 architecture ?

Re: unreal engine 4 [Re: AlbertoT] #440856
05/04/14 14:37
05/04/14 14:37
Joined: Mar 2011
Posts: 3,150
Budapest
sivan Offline
Expert
sivan  Offline
Expert

Joined: Mar 2011
Posts: 3,150
Budapest
I think no. But maybe if you read this page it helps a bit: https://docs.unrealengine.com/latest/INT/Programming/Basics/index.html


Free world editor for 3D Gamestudio: MapBuilder Editor
Page 7 of 20 1 2 5 6 7 8 9 19 20

Moderated by  aztec, Blink, HeelX 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1