• 创建一个C++ 类,命名为FloatActor,该类的父类Actor 就会在源码中自动生成

    创建一个C++ 类,命名为FloatActor,该类的父类Actor

    就会在源码中自动生成

    // Fill out your copyright notice in the Description page of Project Settings.
    
    #pragma once
    
    #include "CoreMinimal.h"
    #include "GameFramework/Actor.h"
    #include "FloatActor.generated.h"
    
    UCLASS()
    class QUICKSTART_API AFloatActor : public AActor
    {
    	GENERATED_BODY()
    	
    public:	
    	// Sets default values for this actor's properties
    	AFloatActor();
    
    protected:
    	// Called when the game starts or when spawned
    	virtual void BeginPlay() override;
    
    public:	
    	// Called every frame
    	virtual void Tick(float DeltaTime) override;
    	float RunningTime;
    };
    对应的cpp文件。

    // Fill out your copyright notice in the Description page of Project Settings.
    
    
    #include "FloatActor.h"
    
    
    // Sets default values
    AFloatActor::AFloatActor()
    {
     	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    	PrimaryActorTick.bCanEverTick = true;
    
    }
    
    // Called when the game starts or when spawned
    void AFloatActor::BeginPlay()
    {
    	Super::BeginPlay();
    	
    }
    
    // Called every frame
    void AFloatActor::Tick(float DeltaTime)
    {
    	Super::Tick(DeltaTime);
    
    	FVector NewLocation = GetActorLocation();
    	float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    	NewLocation.X += DeltaHeight * 5.0f;
    	NewLocation.Y += DeltaHeight * 10.0f;
    	NewLocation.Z += DeltaHeight * 20.0f;
    
    	RunningTime += DeltaTime;
    	SetActorLocation(NewLocation);
    }

    可以看到在.h文件申明了一个变量RunningTime.

    然后每帧中都会调用AFloatActor::Tick方法,然后通过RunningTime转换为高度DeltaHeight,最后设置物体的位置。

    最终的结果可以看到漂浮的物体。

    1. 认识GetActorLocation()函数,这个函数的作用是返回根节点(RootComponent)的的位置,返回的是一个FVector的向量。

    举例来说

        // Get the current location  
        FVector ActorLocation = GetActorLocation();  
        // Move it slightly  
        ActorLocation.Z += 10.0f;  
        // Set the location- this will blindly place the actor at the given location  
        SetActorLocation( ActorLocation, false );

    (1)记住第一个函数,GetActorLocation(),这里可以看到函数的第一个字符大写,和平时常规的有点不同。

    属于Engine模块,文件位置在

    Runtime/Engine/Classes/GameFramework/Actor.h

    这里有很多的命名规则不同,比如命名的变量NewLocation也是大写,需要遵守它们的写法来。


    (2) FVector,

    这是一个结构体, struct FVector.

    A vector in 3-D space composed of components (X, Y, Z) with floating point precision.

    是一个3维坐标系中的向量,这个向量含有三个浮点型的X, Y, Z元素。

    属于core模块,文件位置

    A point or direction FVector in 3d space. The full C++ class is located here: Engine/Source/Runtime/Core/Public/Math/Vector.h

    FVector是一个非常基础的结构体,下面有很多重要的构造函数,和成员函数。

    FVector这个类中有很多的方法可以宫调用,比如

    Normalize 单位化这个向量。

    GetMin或者向量中最小的值。

    而且有几个常量向量,由这几个常量向量就能知道Unreal所采用的坐标轴。

    ForwardVector   (1, 0, 0)

    OneVector(1, 1, 1)

    RightVector (0, 1, 0)

    UpVector (0, 0, 1)

    ZeroVector (0, 0, 0)


    (3) FMath

    也是一个结构体 strcut FMath : public FPlatformMath

    Structure for all math helper functions, inherits from platform math to pick up platform-specific implementations

    关于数学计算上的全局函数。

    在core模块中,头文件目录Runtime/Core/Public/Math/UnrealMathUtility.h

    这里用到的Sin函数在strcut FGenericPlatformMath结构体中,所以这里

    GenericPlatformMath.h: Generic platform Math classes, mostly implemented with ANSI C++

    可以看到这个结构体基本上是实现的C++的方法。

    很奇怪FPlatformMath没有搜索到,搜到的是FGenericPlatformMath.

    模块属于core,头文件在Runtime/Core/Public/GenericPlatform/GenericPlatformMath.h

    DeltaHeight是一个高度随着时间变化的正弦波,(-1, 1)的范围。

    然后是Z位置上加上这个值的多少倍数,表示距离。


    (4)SetActorLocation和getActorLocation一样,都是AActor类的方法。

    可以看到AFloatActor继承AActor所以,自然就获取了父类的方法,可以直接调用,而不是所谓的静态函数调用。

    这里需要重点讲AActor这个类。


    (5)AActor

    class AActor : public UObject

    可以看到它的直接父类是UObject,

    Actor is the base class for an Object that can be placed or spawned in a level. Actors may contain a collection of ActorComponents, which can be used to control how actors move, how they are rendered, etc. The other main function of an Actor is the replication of properties and function calls across the network during play.

    是一个基类,可以含有很多的ActorComponents.

    属于模块Engine

    头文件在Runtime/Engine/Classes/GameFramework/Actor.h

    内部的函数实在太多,先弄清楚两个,GetActorLocation SetActorLocation

    GetActorLocation就返回这个对象的FVector值没有什么好讲的,那就介绍SetActorLocation.

    bool SetActorLocation
    (
        const FVector & NewLocation,
        bool bSweep,
        FHitResult * OutSweepHitResult,
        ETeleportType Teleport
    )
    实现在Runtime/Engine/Private/Actor.cpp
    这个函数的第2, 3, 4应该是默认参数,第一个参数必须有。

    第一个参数是表示的目标位置,

    第二个参数bSweep是一个标识符,

    可以打这样一个比方,bSweep没有设置为true的时候,那么可以直接移动到目的位置。如果设置为true,那么移动的过程中需要检查中间是否有障碍物,如果有就不会设置成功,返回错误。

    下面这个例子很好地展示了它的用法,

        // Get the current location  
        FVector CurrentLocation = GetActorLocation();  
        // Move it slightly  
        CurrentLocation.Z += 1.0f;  
        FHitResult HitResult;  
        if( SetActorLocation(CurrentLocation, true, &HitResult) == false )  
        {  
            // If the set function returned false something is blocking at that location. We can interrogate this result to determine details of this  
            // @See FHitResult for more information  
            if( HitResult.GetActor() != nullptr)  
            {  
                UE_LOG( LogDocumentationCode, Warning, TEXT("Cannot move object to location, blocked by %s"), *HitResult.GetActor()->GetName() );  
            }         
        }  

    可以看到这个例子中首先获取这个对象的当前的位置,然后Z轴进行加1,设置现在的对象的位置。

    如果设置位置不成功,从解释中可以看到那个位置被其它的物体占据,所以需要打印错误信息,通过第三个参数获取阻挡物体的名字。

    这里第一篇就讲完了,很多的Unreal的东西还不是很理解,但是后面会更详细细致地讲述。

    简单的物体移动已经讲完。

    展开全文
  • 作者:谭草头乙链接:https://www.zhihu.com/question/52036177/answer/226200121来源...游戏引擎是由多个子系统共同构成的复杂系统,它几乎涵盖了游戏开发过程中的所有重要环节,是游戏开发的流程核心。 UE(Unreal...
  • unreal4 中文入门教程,该系列浅显易懂,特别适合那些有些C++基础的同学作为unreal4的入门教程。 区别于那些动辄几十集的视频教程,这套系列中文图文教程 能节省您大量的观看时间。
  • UnrealScript Game Flow通过Script看Unreal3的完整流程 注,此篇转自UDN,谨以学习之用,俗话说,好记性不如烂笔头,多码码字,加上实践,效果远胜于纸上谈兵~ 通过Script脚本的流程分析Unreal3游戏的整体流程,及...
  • Unreal的GameMode开始 2017-01-05 18:25:54
    所谓GameMode,顾名思义就是游戏模式,也可以理解为游戏规则。一个游戏可以有任意数量的GameMode,但是在一个时间点,只能有使用一个GameMode。
  • 【转】从Unity过渡到Unreal 2017-09-14 14:25:51
    Unreal Engine 4.9 开始 虚幻 4 之旅 本页面的内容: 编辑器 快速词汇查找表 项目文件和文件 从 GameObjects 到 Actors 如何在虚幻 4 中编写代码 在虚幻 4 中编写游戏逻辑代码 常见问题 然后呢? 本指南...
  • 什么是UnrealEngine4 2019-10-27 21:09:15
    首先要说的是,游戏开发是一项高度复杂的代码开发工作,编程语言只是最基本的知识,它涉及的内容还有计算机图形学、3D数学、物理学等复杂的学科。但是若需要学完这么多知识才能开发游戏,恐怕许多人都已经断气了,.....
  • 从Unity引擎过度到Unreal4引擎  前言   http://www.mamicode.com/info-detail-495369.html  打开电脑下载了UE引擎的一个类似管理的客户端,导航如下图:    EPIC这是要逆天的节奏吗?不过...
  • Unreal蓝图入门 节点 2019-12-21 16:49:45
    最近开始摸索Unreal的蓝图基础使用,一些基本的操作大家可以在官方网站中的教程中找到,所以我们直接跳到事件图表上来讲。 首先,Unreal有丰富的注释功能,按住键盘C可以创建出注释区域,在右侧的“细节”面板我们...
  • 原文地址:http://demo.netfoucs.com/u011707076/article/details/44036839 前言    寒假回家到现在已经有十多天了,这些天回家不是睡就是吃....哎╮(╯▽╰)╭,今天早上一觉醒来,突然得知...迫
  • 作者:唐小姐的茶 ...来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 游戏引擎是由多个子系统共同构成的复杂系统,它... UE(Unreal Engin)是目前世界最知名授权最广的顶尖游戏...
  • Ureal Engine(以下简称UE)是Epic Games开发的游戏引擎。他与游戏Ureal Tournament 2004(UT2004)一起发布。UE和UT2004都分别发布了Windows,Linux和Macintosh版本。UE针对第一人称射击游戏(FPS)提供了丰富的...
  • Unreal Plugin Language参考 2020-03-01 14:05:03
    添加XML 添加空的XML: <?xml version="1.0" encoding="utf-8"?> <root xmlns:android="http://schemas.android.com/apk/res/android"> ...trace enable="true"/>...--初始化时需要执行的操...
  • 摘要 : 从Unity引擎过度到Unreal4引擎(最终版) 前言 寒假回家到现在已经有十多天了,这些天回家不是睡就是吃....哎╮(╯▽╰)╭,今天早上一觉醒来,突然得知,UE4免费了,这绝对是个好消息,前不久我还在纠结怎么...
  • 介绍Flow Control节点和Timeline节点的使用方法
  • Unreal Frontend Unreal Frontend 概述 在PC上迭代 访问 Unreal Frontend Unreal Frontend界面 工具条 Profile列表 配置设置 地图 烘焙器选项 启动选项 Targets(目标) 移动设备 ...
1 2 3 4 5 ... 10
收藏数 182
精华内容 72