5.15拖尾渲染,線性渲染

粒子碰撞檢測

void OnParticleCollision(GameObject? other){

}

拖尾渲染

using Unity Engine;

usingSystem.Collections;

publicclassPlayerScript:MonoBehaviour{

private? Animator? animator;

int? attack;

private TrailRenderer? trailRender;

voidStart( ){

animator=GetComponent<Animator>( );

attack=Animator.StringToHash("Attack");

trailRender=GetComponentInChildren<TrailRenderer>( );//獲取子物體的組件

}

voidUpdate( ){

if(Input.GetMouseButtonDown(0)){

animator.SetTrigger(attack);

}

}

void TrailActive( ){

trailRender.enabled=true;//開始攻擊時,渲染開始

}

void TrailNoActive( ){

trailRender.enabled=false;//攻擊結束時,渲染結束

}

}

線性渲染

lineRenderer.SetVertexCount(2);//先設置定點數量(方法)

(lineRenderer.positionCount=2; )(新版本屬性)

lineRenderer.SetPosition(0,transform.position);//設置第一個定點位置

linrRenderer.SetPosition(1,targetTransform.position);//設置第二個定點位置


導航線性渲染結合(lineRenderer組件要掛載在第一個定點上)

usingUnityEngine;

usingSystem.Collections;

publicclassLineRendererScript:MonoBehaviour{

private NavMeshAgent agent;

private LineRenderer line;

public? Transform? startPoint;

public? Transform? endPoint;

voidStart( ){

agent=GetComponent<NavMeshAgent>( );

line=startPoint.gameObject.GetComponent<LineRenderer>( );

}

voidUpdate(){

if(line&&agent){

//生成一個導航網格的路徑的變量,用來存儲導航路徑的相關信息

NavMeshPath?? path=new? NavMeshPath( );

//計算路徑,得到路徑的相關信息,并且存儲到path中

agent.CalculatePath(endPoint.position,path);

//根據path中的拐點來設置lineRenderer的相關屬性

line.SetWidth(0.5f,0.5f);

line.SetColors(Color.red,Color.green);

//1.根據拐點數來設置頂點數

line.SetVertexCount(path.corners.Length+2);

//2.設置開始點和結束點

line.SetPosition(0,startPoint.position);

line.SetPosition(path.corners.Length+1,endPoint.position);

//設置其他頂點

for(inti=1;i<=path.corners.Length;++i){

line.SetPosition(i,path.corners[i-1]);

}

}

}

}

畫線(掛載在起點物體)

usingUnityEngine;

usingSystem.Collections;

publicclassDrawLine:MonoBehaviour{

LineRenderer line;

//當前頂點下標

int index=1;

//頂點數

int countOfLine=1;

RaycastHit hit;

voidStart(){

line=GetComponent<LineRenderer>( );

line.SetVertexCount(1);

line.SetPosition(0,transform.position);

}

voidUpdate(){

if(Input.GetMouseButtonDown(0)){

if(Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),outhit)){

if(hit.collider.name=="Plane"){

countOfLine++;

line.SetVertexCount(countOfLine);

if(index<countOfLine){

line.SetPosition(index,hit.point);

index++;

}

}

}

}

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容