如何以自定义宽高比统一构建项目?

时间:2019-03-17 07:11:12

标签: c# unity3d

我有一个使用 9:16纵横比的游戏项目。还有使用“参考分辨率” 1080x1920(9:16)

“以屏幕尺寸缩放”的画布

当我构建项目并在“播放器设置”中进行如下设置时:
Player Settings

构建游戏结果,始终只使用“自由长宽比”。 像这样:

All game components, should be fit with the background

如何仅使用所需的宽高比来构建项目?

谢谢

2 个答案:

答案 0 :(得分:1)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef int bool;

#ifdef DEBUG
#define dbgprt(_fmt...) \
    printf(_fmt)
#else
#define dbgprt(_fmt...)     do { } while (0)
#endif

//structure definition of linked list node
#ifndef WORDLISTH
#define WORDLISTH

// word frequency control
typedef struct WordNode Word_t;
struct WordNode {
    const char *word;
    unsigned long count;
    Word_t *next;
    Word_t *prev;
};

// word list control
typedef struct {
    Word_t *head;
    Word_t *tail;
    unsigned long count;
} List_t;

void printWordList(List_t *list);

#endif

// create a list
List_t *
newList(void)
{
    List_t *list;

    list = calloc(1,sizeof(*list));

    return list;
}

// function to check if word is in linked list
Word_t *
findWord(List_t *list,const char *myword)
{
    Word_t *curr;

    for (curr = list->head;  curr != NULL;  curr = curr->next) {
        if (strcmp(curr->word,myword) == 0)
            break;
    }

    return curr;
}

//function to add word to linked list
Word_t *
addWord(List_t *list,const char *word)
{
    Word_t *match;

    do {
        // try to find existing word
        match = findWord(list,word);

        // word already exists
        if (match != NULL)
            break;

        // create new node
        match = malloc(sizeof(*match));
        match->word = strdup(word);
        match->count = 0;
        match->next = NULL;

        // attach to head of list
        if (list->head == NULL)
            list->head = match;

        // append to tail of list
        else
            list->tail->next = match;

        // set new tail of list
        list->tail = match;

        // advance list count
        list->count += 1;
    } while (0);

    // increment the word frequency count
    match->count += 1;

    return match;
}

//function to update the count of word
void
updateCount(List_t *list,const char *myword)
{
    Word_t *match;

    match = findWord(list,myword);
    if (match != NULL)
        match->count += 1;
}

//function to print word list
//takes head node as argument
void
printWordList(List_t *list)
{
    Word_t *curr;

    for (curr = list->head;  curr != NULL;  curr = curr->next) {
        printf("%s", curr->word);
        printf(" %ld\n", curr->count);
    }
}

int
main(int argc, char **argv)
{
    char *filename = argv[1];
    FILE *fp = fopen(filename, "r");

    printf("FILE: %s\n", filename);
    if (fp == NULL) {
        printf("Error: unable to open the file ");
        printf("%s", filename);
        return 1;
    }

    // These are our word delimiters.
    char *delim = " \t\n,:;'\".?!#$-><(){}[]|\\/*&^%@!~+=_";

    char line[1000];
    char *token;

    // create list/head pointer
    List_t *list = newList();

    // iterate through each line in file
    while (fgets(line, sizeof(line), fp) != NULL) {
        // seperate each word

        // first word of line
        char *bp = line;

        while (1) {
            token = strtok(bp, delim);
            bp = NULL;

            if (token == NULL)
                break;

            dbgprt("TOKEN1: %s\n", token);

            addWord(list,token);
        }
    }

    printWordList(list);

    return 0;
}

答案 1 :(得分:0)

我也很难在独立版本中获得自定义的宽高比。

您可以在启动方法中手动设置一次屏幕宽度和高度。

void Start()
{
    Screen.SetResolution(1080, 1920);
}

如果需要,您还可以在游戏运行时进行更新

private float lastWidth;
private float lastHeight;

void Update()
{
    if(lastWidth != Screen.width)
    {
        Screen.SetResolution(Screen.width, Screen.width * (16f / 9f));
    }
    else if(lastHeight != Screen.height)
    {
        Screen.SetResolution(Screen.height * (9f / 16f), Screen.height);
    }

    lastWidth = Screen.width;
    lastHeight = Screen.height;
}

统一文档:
Screen
SetResolution()