我需要撰寫一個基于引數獲取組件的函式。
我嘗試使用字串,然后使用 GetType,但沒有奏效。
我嘗試使用 MonoBehaviour,但沒有用。我當前的版本如下。我錯過了什么?
void move(MonoBehaviour co){
Touch screentouch = Input.GetTouch(0);
Ray ray = camera.ScreenPointToRay(screentouch.position);
if (screentouch.phase == TouchPhase.Began)
{
if (Physics.Raycast(ray, out RaycastHit hitInfo))
{
if (hitInfo.collider.gameObject.GetComponent<co>() != null)
{
set = true;
}
}
}
uj5u.com熱心網友回復:
GetComponent<T>是所謂的泛型方法。
泛型型別引數T需要是編譯時常量型別,例如
Renderer renderer = someGameObject.GetComponent<Renderer>();
將回傳一個型別為 的實體Renderer。
var something = someGameObject.GetComponent<ISomeInterface>();
將回傳一個型別為 的實體ISomeInterface。
其他多載都GetComponent(Type type)和GetComponent(string typeName)都回傳最基本的型別Component,并以正確的作業有了它,你必須輸入之后把結果。
同樣的例子看起來像
Renderer renderer = (Renderer) someGameObject.GetComponent(typeof(Renderer));
或者
Renderer renderer = (Renderer) someGameObject.GetComponent("Renderer");
因此,在您的情況下,您要么知道要查找的型別,并且應該傳入該型別,或者如果您愿意,您可以使自己的方法也通用并執行
void move<T>()
{
Touch screentouch = Input.GetTouch(0);
Ray ray = camera.ScreenPointToRay(screentouch.position);
if (screentouch.phase == TouchPhase.Began)
{
if (Physics.Raycast(ray, out RaycastHit hitInfo))
{
if (hitInfo.collider.gameObject.GetComponent<T>())
{
set = true;
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/395718.html
