粒子碰撞檢測
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;//攻擊結(jié)束時实蓬,渲染結(jié)束
}
}
線性渲染
lineRenderer.SetVertexCount(2);//先設置定點數(shù)量(方法)
(lineRenderer.positionCount=2; )(新版本屬性)
lineRenderer.SetPosition(0,transform.position);//設置第一個定點位置
linrRenderer.SetPosition(1,targetTransform.position);//設置第二個定點位置
導航線性渲染結(jié)合(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){
//生成一個導航網(wǎng)格的路徑的變量茸俭,用來存儲導航路徑的相關信息
NavMeshPath?? path=new? NavMeshPath( );
//計算路徑,得到路徑的相關信息,并且存儲到path中
agent.CalculatePath(endPoint.position,path);
//根據(jù)path中的拐點來設置lineRenderer的相關屬性
line.SetWidth(0.5f,0.5f);
line.SetColors(Color.red,Color.green);
//1.根據(jù)拐點數(shù)來設置頂點數(shù)
line.SetVertexCount(path.corners.Length+2);
//2.設置開始點和結(jié)束點
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;
//頂點數(shù)
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++;
}
}
}
}
}
}