首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对特定Prefab克隆的引用

对特定Prefab克隆的引用
EN

Stack Overflow用户
提问于 2016-04-29 10:33:16
回答 1查看 49关注 0票数 0

我正在开发一个简单的2D游戏。在游戏中,我已经为食客做了一个预制件。我正在改变预置运行时的精灵。这一切都执行得很好。现在,我希望在特定的预置克隆上应用单击事件,并希望增加预制件的规模。我正在附加一个c#脚本,到目前为止,我已经完成了这些工作。

代码语言:javascript
复制
public class ShoppingManager : MonoBehaviour {

public static ShoppingManager instance;

[System.Serializable]
public class Shopping
{
    public string CharacterName;
    public Sprite CharacterSprite;
}

public GameObject CharacterPrefab;
public Transform CharacterSpacer;

public List<Shopping> ShoppingList;

private CharacterScript NewCharacterScript;

/*********************************************Awake()******************************************/
void Awake()
{
    MakeSingleton ();
}

/******************************Create object of the script**********************************/
void MakeSingleton()
{
    instance = this;
    DontDestroyOnLoad (gameObject);
}

// Use this for initialization
void Start () {
    LoadCharacters ();
}

void LoadCharacters()
{
    foreach (var characters in ShoppingList) {
        GameObject NewCharacter = Instantiate (CharacterPrefab) as GameObject;

        NewCharacterScript = NewCharacter.GetComponent<CharacterScript> ();
        NewCharacterScript.CharacterName = characters.CharacterName;
        NewCharacterScript.Charcater.GetComponent<Image> ().sprite = characters.CharacterSprite;

        NewCharacterScript.GetComponent<Button> ().onClick.AddListener (() => CharacterClicked (NewCharacterScript.CharacterName, NewCharacterScript.Charcater));

        NewCharacter.transform.SetParent (CharacterSpacer, false);
    }
}

void CharacterClicked(string CharacterName, GameObject Char)
{
    StartCoroutine (IncreaseScale (Char));
}

IEnumerator IncreaseScale(GameObject TempCharacter)
{
    int i = 5;
    while (i > 0) {
        yield return new WaitForSeconds (0.1f);

        Vector3 TempVector = TempCharacter.GetComponent<RectTransform> ().localScale;
        TempVector.x = TempVector.x + 0.2f;
        TempVector.y = TempVector.y + 0.2f;
        TempCharacter.GetComponent<RectTransform> ().localScale = TempVector;

        i--;
    }
}

}

此代码触发单击事件,并且它还增加了规模,但增加了最后的克隆,而不是单击的预置克隆。我错过了什么,我不明白。在这件事上我该纠正什么。还有耶!我还附加了我添加到预制件上的脚本的代码。

代码语言:javascript
复制
public class CharacterScript : MonoBehaviour {

public string CharacterName;
public GameObject Charcater;

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-29 11:01:22

为您的对象创建对撞机,将下面的脚本附加到它上,这样每个对象都负责处理自己的功能,比如增加自己的大小

代码语言:javascript
复制
    public class characterFunctionalities: MonoBehaviour{ 
    void OnMouseDown()
    {
        StartCoroutine (IncreaseScale (this.gameobject));
    }

    IEnumerator IncreaseScale(GameObject TempCharacter)
    {
        int i = 5;
        while (i > 0) {
            yield return new WaitForSeconds (0.1f);

            Vector3 TempVector = TempCharacter.GetComponent<RectTransform> ().localScale;
            TempVector.x = TempVector.x + 0.2f;
            TempVector.y = TempVector.y + 0.2f;
            TempCharacter.GetComponent<RectTransform> ().localScale = TempVector;

            i--;
        }
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36936025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档